[springboot] ENTITY, DTO, DAO, VO

Kyeong Ju·2025년 3월 3일

키워드 : Entity, DTO, DAO, VO

얼핏 보면 비슷해 보이는 개념이지만 코드를 작성하다 보면 이들을 구분하여 사용해야 하는 순간이 온다.

나는 수요조사 form 작성부터 통신 판매로 이어지는 웹 프로젝트를 하던 도중 Entity와 DTO 사용에 대한 고민을 하게 되어 이와 같은 내용을 정리하게 되었다.

Entity

  • Entity 단어 그 자체의 의미는 '개체'다.
  • DB에서 entity는 논리적 구성요소로, 정보의 단위며 표현하려는 유무형 정보의 객체라는 의미를 가진다.
  • Springboot의 entity 클래스는 DB와 대응을 하는 부분으로 entity 클래스의 요소들이 DB의 table에 매칭된다.
  • @Entity 에너테이션이 붙은 클래스에서 도메인 모델을 정의하고 이를 JPA가 DB의 table에 매핑한다.
  • Entity의 변경은 연관된 모든 클래스에 영향을 주기 때문에 변경을 지양한다. (이러한 이유로 view의 다양한 요청에 따른 값의 전달 등의 경우 Entity가 아닌 DTO를 통해 한다.)

DTO (Data Transfer Object)

  • DTO는 데이터 전달을 위한 객체로 계층(Controller, Service, Repository)간 데이터 전송에 사용된다.
  • 데이터 전달만을 목적으로 하고 있기 때문에 DTO의 경우 다른 로직을 가지고 있지 않다.
  • Getter, Setter 메서드를 통해 데이터를 주고 받는다.

DAO (Data Access Object)

  • DAO는 DB의 데이터에 access하기 위한 객체다.
  • Entity 객체는 영속성 컨텍스트(Persistence Context)에 의해 관리되기 때문에 Entity가 직접 DB에 접근하여 데이터를 조회하고 수정하면, 트랜잭션과 영속성 컨텍스트의 일관성이 깨질 위험이 있다. 따라서 이 경우에 DAO를 통해 데이터베이스에 접근한다.

VO(Value Object)

  • 값을 표현하기 위한 객체로 불변 객체가 원칙이다.
  • 주로 특정 연산에서 일시적인 데이터 저장 용도로 사용한다.
profile
백엔드 학습 공간

0개의 댓글