티스토리 뷰
Entity와 DTO를 분리하는 이유
1. Entity 보호: Entity는 자원의 속성이 무분별하게 변하면 안되기에 Setter 사용을 자제해야 한다. 그에 비해 DTO는 Getter, Setter에 영향이 크지 않다.
2. 필요한 데이터만 선별: 사용자의 경우(id, pw, email, address 등)으로 엔티티가 구성되어 있고 로그인을 한다고 가정을 하면 필요한 데이터는 id, pw의 값을 가지고 있으면 된다.
3. 순환참조 예방: JPA에서 양방향 참조 엔티티를 컨트롤러에서 반환하면 순환참조가 발생하고 스택오버플로우가 발생. 이를 DTO를 통해 예방할 수 있다.
DTO (Data Transfer Object)
로직을 가지지 않는 자바 빈이다. MVC간 데이터 교환을 위한 객체이며 Getter, Setter를 가진다.
Entity의 Wrapper 클래스라고 할 수 있다.
POJO (Plain Old Java Object) 로 일반적인 JAVA 객체이며 재사용과 가독성을 위해 만들어졌다.
Java Bean은 POJO이며 추가로 제한된 조건이 붙는다.
1. 모든 필드는 private 제한자를 가진다. == Getter, Setter를 통해 접근 가능
2. 빈 생성자가 존재하여야 한다.
DTO 요청
1. Controller가 DTO를 Entity로 변환후 Service에게 전달
2. Controller가 DTO를 Service에게 전달 후 Entity로 변환
서비스에서 DTO를 통해 객체를 찾는 함수를 정의해두고 필요에 따라 사용하면 되기에 이방법이 더 좋을 것 같다.
DTO 응답
1. Service가 DTO로 Controller에게 반환하고, DTO로 리턴
2. Service가 entity를 반환하고, Controller가 DTO로 리턴
서비스에 다른 메소드에서 또 다른 메소드의 리턴된 값을 사용해야 되는 경우가 생긴다. 이 같은 이유 때문에 DTO로 반환하는것보다 Entity로 반환하는게 좋을 것 같다. (Service의 자유도가 높다.)
'🍃 스프링' 카테고리의 다른 글
[SPRING] GET API Query String (0) | 2023.08.26 |
---|---|
[SPRING] 컬렉션 (0) | 2023.07.30 |
[SPRING] JPA (0) | 2023.06.05 |
[SPRING] 외부 REST api 사용하기 (0) | 2023.05.20 |
[SPRING] IntelliJ 설정 (0) | 2023.05.15 |