서비스 계층에 따라 패키지를 설계하는 방식
controller 끼리, dto 끼리 묶는 방식
서비스에 대한 이해가 없더라도 전체적인 구조를 파악하기 쉽다.
중복된 코드가 발생할 가능성이 적다.
특정 기능을 수정하려고 하면, 모든 계층에 그와 관련된 코드가 있어서 수정하기 어렵다.
Github이나 여러 툴들을 사용해 협업시 개발자들 사이에서 merge conflict가 날수도 있다.
article, like 처럼 각 도메인 별로 나누고,
각각의 도메인 아래에 controller, service, repository 등 layer 별로 패키지를 다시 나눈다.
global 또는 commons 에는 서비스 전체적으로 사용되는 코드로 구성한다.
파일이 많을 경우, 유용할 수 있다.
원하는 클래스를 찾기 쉽다.
코드의 응집도가 높아진다.
개발자의 설계 취향에 따라, 구조가 많이 달라지기도 한다.
다른 패키지에 있는 Class 들을 서로 참조하여 순환참조가 발생할 수 있다.
참고: [Spring] directory 구성 (계층형/도메인형)
참고: [Spring] 패키지 구조(계층형, 도메인형)