Dto-Entity 변환을 Service / Controller 둘 중 어디서 해야 할까

김재웅·2021년 8월 9일
0

스프링 부트 개발을 처음 시작하다 보니 모르는 게 많다.
책을 보면서 따라했던 것을 바탕으로 비슷하게 프로젝트를 진행하고 있다. dto - entity 간의 변환을 찾다 보니 stackoverflow에서 'dto는 순수하게 데이터만 담고 있어야 하고 business layer를 몰라야 하기 때문에 entity로 변환하는 코드가 담겨서는 안 된다', 'dto가 entity로 변환되는 곳은 controller이다'는 요지의 글들을 보게 되었다.

책에서는 dto 내에 toEntity()를 선언하고 service에서 이를 호출해 entity로 변환했기에 어떻게 하는 게 맞는지 고민하기 시작했다. 특히 의문이었던 점은 controller에서 변환하는 경우 하나의 entity로 나타나지 않는 응답을 생성하기 위해 여러 service를 호출해서 조합해야 하는데, 결국 service layer가 해야 할 일이 controller에게 가는 것 아닌가 라는 점이었다. 또 dto 변환 코드를 dto 외부에 (controller layer)에 작성한다면 코드 길이가 의미 없이 길어지는 것 아닌가 하는 생각이 들었다.

검색하던 중 괜찮은 글을 찾았다. ([Tecoble] DTO의 사용 범위에 대하여)
결론은 'Entity를 어느 계층까지 노출해야 하는가는 프로젝트의 규모와 아키텍쳐의 방향 등을 종합적으로 고려해서 고민할 문제' 이고, service layer에서 변환하는 것도 그만의 장점이 있다는 것이다. 일단은 지금까지 하던 대로 해도 큰 문제는 없을 것 같다.

0개의 댓글