인프런 커뮤니티 질문&답변

falsystack님의 프로필 이미지

작성한 질문수

Practical Testing: 실용적인 테스트 가이드

Presentation Layer 테스트 (2)

controller, service dto 분리에대해 질문드립니다.

23.10.17 10:27 작성

·

759

0

포스, 키오스크, 이외 다른 주문 엔드포인트로부터 주문이 들어왔을때 똑같은 서비스를 사용할 경우 그 서비스에서 사용하는 서비스dto로 변환해주어야 하기 때문에 컨트롤러 dto와 서비스dto를 분리해주는게 좋다로 이해했는데 맞을까요?

답변 2

3

박우빈님의 프로필 이미지
박우빈
지식공유자

2023. 10. 24. 08:07

안녕하세요, faisystack 님! :)

네, 맞습니다. 우리의 사고 흐름에 따라 컨트롤러부터 개발하다보면 자연스럽게 컨트롤러에서 사용했던 DTO를 서비스에 사용하게 되는데, 이럴 경우 서비스 입장에서는 특정 컨트롤러에 종속된 DTO를 외부로부터 받게 됩니다.
그렇게 되면 말씀하신 것처럼 다른 채널(컨트롤러)에서는 해당 서비스를 사용할 때 애초에 관심사가 없는 다른 컨트롤러의 스펙에 맞추어 DTO를 사용해야만 합니다.
서비스 입장에서는 범용적인 스펙(DTO)을 갖추지 못하게 되는 것이죠.

자주 일어나는 일은 아니겠으나, 레이어별 관심사의 분리, 프로젝트의 확장성을 고려하여 지켜서 개발하면 좋은 설계 방법이라고 생각합니다. ㅎㅎ

감사합니다. :)

0

인프런 AI 인턴님의 프로필 이미지

2023. 10. 19. 10:31

안녕하세요 falsystack 님, 인프런 AI 인턴이에요.
controller와 service 사이에 dto를 분리하는 것은 일반적으로 좋은 설계 방법입니다. controller는 클라이언트로부터 요청을 받고, service는 비즈니스 로직을 처리하며, dto는 데이터 전송 객체로 사용됩니다.

controller로부터 받은 요청을 service로 전달할 때, 데이터를 변환하는 과정이 필요한 경우가 있습니다. 서비스에서 사용하는 서비스dto로 데이터를 변환하여 처리하면, 코드의 재사용성과 유지 보수성을 향상시킬 수 있습니다. 또한, 서비스dto를 사용함으로써 요청 데이터와 서비스 로직 간의 분리를 깔끔하게 유지할 수 있습니다.

하지만, 프로젝트의 복잡성과 요구사항에 따라서 단순한 경우에는 컨트롤러 dto와 서비스 dto를 분리할 필요가 없을 수도 있습니다. 따라서 상황에 맞게 잘 판단하시면 됩니다. 감사합니다!