| 구분 | DTO (Data Transfer Object) | Entity |
|---|---|---|
| 역할 | 계층 간 데이터 전달용 (Controller ↔ Service ↔ Repository) | DB 테이블과 1:1 매핑 (Persistence 대상) |
| 목적 | 데이터 이동 최적화, 네트워크 비용 절감 | DB 저장/조회/수정/삭제를 직접 담당 |
| 특징 | - 주로 getter/setter만 가짐 - 비즈니스 로직 없음 - 필요한 데이터만 담음 | - JPA/Hibernate에서 관리 - @Entity 어노테이션 붙음 - DB와 직접 연관 |
| 변경 가능성 | 자유롭게 변경 가능 (UI/API 요구사항에 맞춰) | 변경 신중 (DB 스키마에 영향) |
| 예시 | 회원가입 요청 DTO, 게시글 응답 DTO 등 | Member, Post, Comment 등 |
| 구분 | DTO (Data Transfer Object) | VO (Value Object) |
|---|---|---|
| 역할 | 데이터 전달용 객체 (주고받기 위함) | 값 자체를 표현하는 객체 (의미와 불변성 중심) |
| 목적 | 계층 간 통신 최적화 | 고유한 값 표현, 비교 및 불변성 보장 |
| 특징 | - 보통 가변(mutable) 객체 - setXxx()로 수정 가능 | - 불변(immutable) 객체 - 값이 같으면 객체 자체가 같다 - 생성 시 값이 정해지고 변경 불가 |
| 사용 예시 | 요청/응답 DTO, 폼 데이터 수집용 DTO | 좌표(Point), 주소(Address), 금액(Money) 등 |
| 대표적 차이 | "데이터 전달"이 목적 | "값 자체"가 목적 |
VO = "값 그 자체"를 표현하는 불변 객체 (ex. 좌표, 금액, 주소)
VO는 "값이 같으면 같은 객체" (주소가 아니라 값 자체 비교)
DTO = 필요한 데이터만 골라 실어나르는 객체 (ex. 회원가입 요청 DTO)
DTO는 "가변적" (필요한 데이터만 골라 담는다)
Entity = DB랑 1:1로 연결된 JPA 관리 객체 (ex. Member 테이블 매핑)
Entity는 "DB 변경을 조심" (Entity 구조가 바뀌면 DB 스키마에 바로 영향!)