DTO(Data Transfer Object)와 Entity의 가장 핵심적인 차이는
객체의 목적과 사용되는 계층(Layer)에 있습니다.
DTO는 시스템의 여러 계층 간에 데이터를 오직 '전달'하기 위해 사용하는 상자인 반면,
Entity는 실제 데이터베이스의 테이블과 1:1로 매핑되는 비즈니스 로직의 핵심 객체입니다.
DTO (데이터 전송 객체)목적: 오직 데이터를 담아서 전달하는 우편물 상자 역할을 합니다.
특징:사용자 화면(View)에서 요청하는 데이터 구조에 맞춰 유연하게 정의합니다.
데이터 이동을 위한 Getter/Setter만 가지며, 비즈니스 로직은 들어가지 않습니다.
클라이언트에게 민감한 정보(비밀번호, 주민번호 등)를 숨긴 채 필요한 데이터만 골라서
보낼 수 있습니다.
Entity (엔티티)목적: 데이터베이스 테이블의 구조를 그대로 표현하고
애플리케이션의 핵심 규칙을 담습니다.
특징:테이블의 컬럼들과 직접 매핑되므로, Entity의 변경은 곧 DB 스키마의 변경이나
다름없습니다.
무분별한 수정(Setter)을 막기 위해 생성자나 빌더(Builder) 패턴을 통해 데이터를
생성하고 가급적 값을 보호합니다.
화면에서 "회원가입 양식에 이메일 인증 확인 칸을 추가해 주세요"라고
요청했을 때, Entity를 그대로 쓰면 DB 테이블까지 변경해야 하는 대참사가 일어납니다.
DTO만 수정하면 DB나 핵심 서비스 로직에는 아무런 영향을 주지 않습니다.
User Entity에는 비밀번호(password)나 주민등록번호 같은 정보가 포함되어 있을 수 있습니다.회원 조회 API 응답으로 Entity를 그대로 던져버리면 보안 사고로 이어집니다. UserResponseDTO를 만들어 이름과 이메일만 담아 반환해야 안전합니다.
JPA 사용 시 Entity 간에 양방향 연관관계(예: Member ↔ Team)가 맺어져 있을 때,
Entity를 그대로 JSON으로 직렬화하면 서로를 무한히 참조하다가
에러(StackOverflowError)가 발생할 수 있습니다.
DTO를 사용하면 필요한 데이터만 딱 끊어서 전달하므로 이 문제가 방지됩니다.