티스토리 뷰

🍃 스프링

[SPRING] Entity, DTO

홓옇 2023. 7. 24. 23:06

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함