내생각
DTO는 어느 패키지에 존재해야 할까?
songjb
2023. 9. 10. 23:21
현재 프로젝트는 Layered Architecture를 사용하고있고, 해당 아키텍처에 따라 패키지를 분리 했다.
패키지 구조에 대해서 크게 고민해보지 않고 관습적으로 아래와 같이 작성했다.
Layered Architecture
관심사에 따라 각 계층으로 분리하며, 각 계층은 자신의 하위 계층에만 의존하도록 설계된 아키텍처 패턴입니다
│─ controller
│─ service
│─ dto
│─ domain

사실 위와 같은 설계가 Layered Architecture를 위반하고있지는 않다.
하지만 dto는 각각에 계층별로 사용되기 때문에 프로젝트가 커지면서 패키지별로 위치를 변경 하기로 했다.

request, response dto 위치에 대해서 토론을 했었는데
그 당시에는 구조에 대해서 크게 고민을 해보지않고 팀원이 원하는 방향인 컨트롤러 하위에 두기로 했다.
│─ controller
│─ dto
│─ service
│─ domain

하지만 service 계층에서 controller 계층에 있는 dto를 의존하고있기때문에 의존성 사이클이 생기는 문제가 있다.
│─ controller
│─ service
│─ dto
│─ domain

내생각
그렇기 때문에 Layered Architecture 를 사용하는 프로젝트 구조에서는
Controller와 Service 사이에서 사용되는 request, response dto는 Service 계층에 있어야한다고 생각한다.
https://github.com/woowacourse/service-apply/tree/master/src/main/kotlin/apply/application
지원 플랫폼은 DDD Layered Architecture 구조이다.