![[Spring] DTO를 사용하는 이유를 알아보자](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdedimx%2Fbtr1XORdRnR%2FHHQRfJq9hknjMamxq3InKk%2Fimg.png)
DTO란?
DTO(Data Transfer Object)란 데이터 전송 객체로 비즈니스 로직을 포함하지 않는 데이터를 전달하기 위한 단순한 객체를 의미합니다. MVC 패턴에서 주로 Client와 Controller 사이에서 DTO가 사용됩니다.
DTO 사용이유?
엔티티를 직접 사용하지 않고 DTO를 사용하는 이유에 대해 알아보겠습니다.
User 엔티티를 생각해 보겠습니다. User 엔티티의 경우 다음과 같은 필드로 이루어져 있습니다.
@Entity
@Getter
@Setter
public class User {
@Id @GeneratedValue
@Column(name = "user_id")
private Long id;
private String name;
private String loginId
private String password;
}
User 엔티티를 그대로 Client에게 전달하게 될 경우, loginId와 password가 공개되는 문제가 생깁니다.
이 문제의 경우, @JsonIgnore 어노테이션을 사용하여 Client에게 전달하면 안 되는 필드를 선택할 수 있지만, 이 경우 규모가 큰 애플리케이션의 경우 한눈에 엔티티의 속성을 알아보기 힘들뿐더러, 다양한 API에 따른 필요한 속성들을 동적으로 선택할 수 없는 문제점이 있습니다.
이를 해결하기 위해, DTO를 사용합니다.
@Getter
@Setter
public class UserDTO {
@Id @GeneratedValue
@Column(name = "user_id")
private Long id;
private String name;
}
DTO를 사용할 경우, id, name과 같이 Client에게 노출해도 되는 필드만 전송이 가능합니다.
물론 요구사항이 단순한 경우는 DTO를 사용하지 않고 엔티티를 직접 사용가능합니다.
하지만 요구사항이 복잡해질수록 엔티티를 사용할 경우 엔티티에 화면을 처리하기 위한 기능이 점점 추가되고 이는 곧 유지보수하기 어려워지는 문제가 생깁니다. 따라서, 엔티티는 핵심 비즈니스 로직만 가져야 하고, 화면을 위한 로직은 없게 하는 편이 좋습니다.
참고자료
https://tecoble.techcourse.co.kr/post/2020-08-31-dto-vs-entity/
요청과 응답으로 엔티티(Entity) 대신 DTO를 사용하자
…
tecoble.techcourse.co.kr
'Spring' 카테고리의 다른 글
[Spring] Cascade옵션 알아보기 (0) | 2023.03.15 |
---|---|
[Spring] Bean Validation 알아보기 (1) | 2023.03.09 |
[Spring] 의존성 주입(DI) 알아보기 (0) | 2023.02.28 |
[Spring] JPA 연관관계 매핑 알아보기 (0) | 2023.02.23 |
[Spring] 프로젝트 생성 및 환경 세팅 (0) | 2023.02.22 |
느리더라도 단단하게 성장하고자 합니다!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!