[TIL] DTO vs VO vs Entity, DTO/DAO/Repository

2025-04-02 TIL

📝 TIL (Today I Learned)
🔗 원본 이슈: #35
📅 작성일: 2025-04-02
🔄 최종 수정: 2025년 04월 09일


🍀 새롭게 배운 것

  • DTO vs VO vs Entity
    • 약간씩 다른 비슷한 개념인 것 같은데, 어떤 것이 정확히 다른지 알아보기 위해 블로그에 정리해보았다.
    • DTO vs VO vs Entity
  • DTO, DAO
    • 이름이 비슷한데 역할이 다른 것 같아 아래에 정리해보았다.
  • 공부하다 보니 Repository와 DAO도 비슷한 개념인 것 같아서 아래에 같이 정리했다.

📦 DTO (Data Transfer Object)

💡 데이터 “전달용” 객체

✅ 개념

  • 계층 간(Controller ↔ Service, Frontend ↔ Backend 등) 데이터를 주고받기 위한 객체
  • 순수 데이터만 담는 클래스 (getter/setter만 있는 경우 많음)

✅ 예시

public class UserDTO {
    private String name;
    private int age;
}

✅ 용도

  • API 요청/응답 데이터 전달
  • DB Entity와 분리된 가벼운 데이터 구조

🗃️ DAO (Data Access Object)

💡 DB에 접근하는 역할을 하는 객체

✅ 개념

  • 실제로 DB와 연결되어 데이터를 저장하거나 불러오는 역할
  • SQL 실행, JPA 사용 등 DB 처리 로직을 담당

✅ 예시

public interface UserDAO {
    UserEntity findById(Long id);
    void save(UserEntity user);
}

✅ 용도

  • DB 연동 로직을 캡슐화해서 Service 계층에서 쉽게 사용하도록 함
  • DB 종류가 바뀌어도 DAO만 바꾸면 되게 설계 가능

📌 핵심 비교 정리

항목DTODAO
의미Data Transfer ObjectData Access Object
역할데이터 전달 전용DB 접근/처리 전용
내용필드 + getter/setter메서드 (save, find 등 DB 작업)
위치Controller ↔ Service 계층 사이 등Service ↔ DB 사이에서 사용
비유택배 상자 (데이터만 담음)택배기사 (DB에서 데이터를 꺼내옴)

Repositoryvs DAO

✅ 공통점

  • 둘 다 데이터에 접근하기 위한 객체
  • 보통 DB에서 데이터를 가져오거나 저장하는 역할을 한다.

✅ DAO (Data Access Object)

📌 정의

DAO는 데이터베이스에 직접 접근해서 데이터를 CRUD(Create, Read, Update, Delete)하는 객체

💡 특징

  • 기술 중심: SQL, JDBC, MyBatis 같은 구체적인 구현 기술을 다룰 때 자주 씀.
  • DB와 직접 소통하는 코드를 포함.
  • 예전 Java에서 많이 쓰던 방식.

📦 예시

public class UserDao {
    public User findById(int id) {
        // JDBC, SQL 직접 사용
    }

    public void save(User user) {
        // INSERT 쿼리
    }
}

✅ Repository (Spring에서의 의미)

📌 정의

Repository는 도메인 객체의 컬렉션처럼 다루기 위한 추상화된 계층

💡 특징

  • 비즈니스 관점에서 설계: “데이터 저장소”처럼 보이도록 추상화.
  • Spring에서는 보통 @Repository 어노테이션 붙임.
  • JPA에서는 CrudRepository, JpaRepository 등을 상속받아 간단하게 사용 가능.
  • SQL보다 객체 지향적인 도메인 중심 접근.

📦 예시

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    User findByEmail(String email);
}

🔍 DAO vs Repository 요약 비교

항목DAORepository
의미데이터에 접근하는 객체도메인 저장소를 추상화한 객체
초점기술 (SQL, JDBC, MyBatis)비즈니스/도메인 중심 (JPA, ORM 기반)
구현 방식구현체를 직접 만듦인터페이스 + Spring Data JPA가 구현체 제공
어노테이션 사용없음 (전통적인 Java 방식)@Repository 사용
대표 기술JDBC, MyBatisSpring Data JPA, Hibernate

✨ 결론적으로…

  • DAO는 전통적인 방식으로, 데이터베이스 중심의 설계.
  • Repository는 도메인 중심의 설계 방식이며, Spring에서는 더 추상화된 계층
  • 요즘 Spring 프로젝트에서는 대부분 Repository 패턴을 쓴다. 특히 JPA랑 궁합이 잘 맞는다.