프로젝트를 만들다보면 수많은 DTO들이 만들어진다. 이 DTO들은 어느 패키지에 두는 것이 맞을까?

첫 번째로 DTO 패키지를 만들어 보관하는 방법이 있다.

두 번째로 DTO를 사용하는 클래스의 패키지에 같이 두는 방법이 있다.

만약 MemberDTO를 Controller, Service, Repository 전부가 사용한다면 Controller는 Service, Service는 Repository를 호출하기에 결과적으로 Repository가 DTO를 소지하는 것이 맞다. Service가 DTO를 가지고 있다면 Service는 Repository를 호출하는데 Repository는 Service package에 있는 DTO를 참조하기에 의존관계 순환이 일어난다.

만약 DTO가 여러 군데에 참조되어 구조가 복잡하다면 별도의 DTO 패키지를 만드는 것이 편할 것이다.