본문 바로가기
개발 용어 정리

[NestJS] Entity vs DTO vs VO

by minhyeok.lee 2023. 3. 25.
반응형

Entity vs DTO vs VO 정리 및 차이점 정리

 

Entity(ORM)

1. Entity는 실제 DB 테이블과 매핑되는 핵심 클래스이다.
2. 이를 기준으로 테이블이 생성되고 스키마가 변경된다.
3. 따라서, 절대로 Entity를 요청이나 응답값을 전달하는 클래스로 사용해서는 안된다.
4. Entity는 id로 구분된다. 그리고 비즈니스 로직을 포함할 수 있다.
5. Entity는 DTO처럼 setter를 가지는 경우 가변 객체로 활용할 수 있다.

 

DTO(Data Transfer Object)

1. 데이터 유효성 체크, 데이터를 전달하기 위한 객체이다.
2. 계층간 데이터를 주고 받을 때, 데이터를 담아서 전달하는 바구니로 여러 레이어 사이에서 DTO를 사용할 수 있지만, 주로 View와 Controller 사이에서 데이터를 주고 받을 때 활용한다.
3. DTO는 getter / setter 메소드를 포함한다. 이 외의 비즈니스 로직은 포함하지 않는다.
4. setter를 가지는 경우 가변 객체로 활용할 수 있다.

5. 불변 객체로 만들면 데이터를 전달하는 과정에서 데이터가 변조되지 않음을 보장할 수 있다.

VO(Value Object)

1. VO는 값 자체를 표현하는 객체이다.
2. VO는 객체들의 주소가 달라도 값이 같으면 동일한 것으로 여긴다.
3. 예를 들어 고유번호가 서로 다르지만 값은 같은 객체 2개(예. 같은 값, 100을 가진 객체 x와 y)가 있다고 하면 둘은 고유번호(주소)는 다르지만 100은 동일하다.


정리

분류  정의  변경 여부 로직 포함 여부
DTO  레이어간 데이터 전송용 가변 또는 불변 객체 로직을 포함할 수 없다.
VO  객체 값 표현용 불변 객체  로직을 포함할 수 있다.
Entity 객체 DB 테이블 매핑용 객체 가변 또는 불변 객체 로직을 포함할 수 있다.
반응형

댓글