작성
·
216
1
안녕하세요!
강의를 듣다가 의문점이 생겨서 질문드립니다.
컨트롤러에서 요청에 대한 응답 반환시 엔티티를 직접 반환하는 대신 DTO를 반환하는 것은 이해를 하였는데요!
그렇다면 조회한 엔티티를 DTO로 변환하는 것은 서비스 계층에서도 할 수 있고 아니면 컨트롤러 계층에서도 할 수 있을 것 같은데요.
강의에서는 리포지토리에서 엔티티를 직접 조회하는 경우, DTO로 조회하는 경우 둘 다 서비스 계층에서 DTO를 반환하는 식으로 구현이 되었는데요.
제 생각에는 컨트롤러에서 반환하는 DTO는 아무래도 화면에 의존적이므로 UI가 바뀌면 DTO도 자주 바뀔 것 같아서서비스에서는 엔티티를 리턴하고 DTO로 변환은 컨트롤러에서 하는 방법이 좋을 것도 같긴한데요.
혹시 실무에서는 어떤식으로 사용하시나용?
감사합니다.
답변 1
2
안녕하세요!! 연어포케님~!!! 크으~~~ 매우매우 좋은 질문이십니다 ㅎㅎㅎㅎ
저의 경험을 말씀드리자면, 실무에서 제가 경험했던 그리고 건너건너(?) 이야기 들었던 프로젝트들에서는 모두 Service에서 DTO를 처리해주었습니다!
제가 유추해보자면, 그 이유는 다음과 같습니다!
DTO 자체가 View에 종속적인 면이 있지만, 동시에 DTO를 만드는 행위 자체를 Business Logic으로 간주할 수도 있음.
예를 들어, Entity를 집계하거나 가공해야 한다면 이는 Controller 보다는 Service에서 처리해야함
DTO를 만드는 과정에서 외부 API, 트랜잭션 등이 필요할 수 있음. Controller는 HTTP와 관련된 역할을 담당하기에 이러한 일을 처리하기 애매함.
간단한 기능은 한 유형의 Entity로 구현 가능하지만, 기능이 조금만 복잡해지면 최소 N개 유형의 Entity가 필요함. Service에서 Controller로 N개의 Entity를 반환해주는 것은 애매한 측면이 있음
도움이 되었으면 좋겠네요~!! ㅎㅎㅎㅎ 좋은 질문 감사드립니다!!! 🙏🙏