원래의 패키지 구조는 이러했다.
계층형으로 Controller, Service, Repository, Dto, Entity 나누어 작업하고 있었다.

작은 프로젝트라면 확실히 계층형이 익숙하고 직관적이라 작업하기 편하다.
그런데 작업량이 많아지고 저 폴더들을 열어둔 채 작업을 하다보면
뭐가 어디에 박혀있는지 마우스 휠을 계속 오르락내리락 해야하는 귀찮음이 생긴다.
그리고 함께 작업하는 다른 개발자와 소통을 하다보면
그 자리에서 관련된 코드들을 까봐야하는 경우가 생기는데
관련된 곳을 찾아가기 위해 뭔가 헤매는 모습을 보이는 게 스스로 영 신통치 않아보였다.
"코드 좀 봐볼게요~ 서비스에서... NotificationService... 여기서 DTO.. DTO.. 아 여깄네" 이런 나의 모습이 보기 좋지 않다고 생각되었다.
(물론 인텔리제이에서는 컨트롤 + 마우스 왼쪽 클릭을 하면 바로 관련된 곳으로 이동이 됩니다)
또한 설정들이 추가되면서 계속 다른 폴더들이 생기게 되는데
이런 애들까지 같은 계층에 있게 되니 보기가 영 좋지 않았다. .
그래서 도메인형으로 나눠봤다.

주요 기능들을 domain 패키지로 묶고 관련된 코드들을 모아 두었다.
그리고 전역적으로 쓰는 건 global 패키지로 두면 깔끔하게 정리가 된다.
열어보면 이런 모습이다.

응집도가 높아져 유지보수하거나 확장하기에 좋을 듯하다.
또한 협업을 할 때는 자신의 도메인 폴더 내에서 작업을 하기 좋아 협업시에도 좀 더 도움이 되지 않을까 생각한다.
그런데 폴더가 꽤나 많아져서 처음에는 오히려 더 복잡하게 느껴질 수도 있을 것 같다. 지금 사실 좀 어색한 상태;;;
더 좋은 건 없고.... 그냥 자신의 상황에 맞게 하는 게 옳은 듯 하다.
초기에는, 혹은 작은 프로젝트를 하게된다면 직관적인 계층형으로 하다가
기능이 많아지거나 큰 프로젝트를 하게 된다면 도메인형으로 변경하는 것도 괜찮을 것 같다.