DTO(Data Transfer Object)는 계층 간 데이터 전달을 위한 객체로, 로직을 포함하지 않고 데이터를 담는 역할만 한다.
1. 관심사 분리
2. 보안성과 캡슐화
3. API 응답 포맷 통제
4. 유지보수성 향상
5. 성능 최적화
@Getter
public class UserReqestDto{
private String name;
private String email
@Builder
public UserRequestDto(String name, String email) {
this.name = name;
this.email = email;
}
//Entity -> DTO 변환
public User toEntity() {
return User.builder()
.name(name)
.email(email)
.build();
}
}
/*
* Controller 사용 예시
*/
UserRequestDto requestDto = UserRequestDto.builder()
.name("홍길동")
.email("aaa@aaa.com")
.build();
User user = requestDto.toEntity(); //DTO -> Entity로 변환
@Getter
public class UserResponseDto{
private Long id;
private String name;
private String email;
@Bulider
public UserResponseDto(Long id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
//Entity -> DTO 변환
public static UserResponseDto from(User user){
return UserResponseDto.builder()
.id(user.getId())
.name(user.getName())
.email(user.getEmail())
.build();
}
}
/*
* Controller 사용 예시
*/
User user = userRepository.findById(1L).orElseThrow();
UserResponseDto responseDto = UserResponseDto.from(user);
구분 | Entity | DTO |
---|---|---|
목적 | DB 연동, 비즈니스 로직 | 계층 간 데이터 전달 |
위험성 | 외부 노출 시 보안 문제 | 필요한 데이터만 노출 |
유연성 | 변경 시 외부 영향 있음 | 변경에 유연함 |
포함 데이터 | 모든 필드 | 필요한 필드만 선택 |