지금까지의 나의 모든 Springboot 프로젝트는 계층형의 directory 구조를 고집해왔다. 사실 큰 이유는 없고 학부 당시 프로젝트에서 계층형으로 교수님이 진행하셨기 때문이 가장 컸다. 하지만 프로젝트 볼륨이 커지며 파일이 늘어날수록 내가 원하는 파일을 쉽게 찾을 수 없다는 단점을 느꼈고 이를 개선하고자 도메인형을 찾아보기 시작했다.
오늘은 계층형과 도메인형이 무엇인지를 함께 알아보고 장단점을 따져보자.
Springboot 프로젝트를 처음 생성하면 아무런 디렉토리 구조가 잡혀있지 않다.
그래서 사용자가 다양하게 내부 레이아웃을 구성할 수 있다.
보편적으로는 아래 같이 애플리케이션 아키텍처(MVC)를 기반으로 설계한다.
ㄴsrc/main/java/com/example/demo
ㄴ DemoApplication.java
ㄴ controller
ㄴ service
ㄴ repository
ㄴ domain
ㄴ config
계층형 구조는 각 애플리케이션 계층을 대표하는 directory를 기준으로 코드가 구성된다.
스프렝 웹 계층에 주목하기 보다는 도메인에 주목하는 방식
ㄴsrc/main/java/com/example/demo
ㄴ DemoApplication.java
ㄴ domain
ㄴ user
ㄴ controller
ㄴ service
ㄴ repository
ㄴ domain
ㄴ post
ㄴ controller
ㄴ service
ㄴ repository
ㄴ domain
ㄴ global
ㄴ auth
ㄴ common
ㄴ config
계층형을 실제로 프로젝트에서 사용하다보면 하나의 디렉토리에 너무 많은 클래스가 모이게 된다. 프로젝트 볼륨이 조금만 커지더라면 몇십개의 클래스들이 길게 나열되는 것이다. 이는 파악하기도 어렵고 이런 파일 관리에 오히려 더 많은 시간을 쏟게 된다.
도메인형을 적용하게 되면 관련 코드가 자연스럽게 하나의 디렉토리에 모이기 때문에 개발에도 훨씬 수월하다. 클래스명이라던가 변수 이름 등도 같은 도메인에서 빠르게 찾아보면서 공통화된 코드를 작성할 수 있다.
패키지 방식에서 '이렇게 해라'라고 정해진 답은 없지만 요즘의 추세에 따르면 도메인형으로 관리하는게 트렌드인 듯 하다. 실제로도 그게 편하고
ref
https://velog.io/@jsb100800/Spring-boot-directory-package
https://cheese10yun.github.io/spring-guide-directory/
https://hyeran-story.tistory.com/160
계층형으로 가져가되 계층 내부적으로 도메인으로 분리하는 방법은 어떻게 생각하시나요?