이번에 백엔드 포지션으로 프로젝트를 진행하게 됐다. 프로젝트 시작 전에 패키지 구조를 어떤식으로 구성하면 좋을지 알아보고자 본 글을 작성.
스프링 웹 계층
- Web Layer : 사용자의 요청과 용청에 대한 응답 반환의 전반적인 처리가 일어나는 영역
- Service Layer : 실질적인 애플리케이션 비즈니스 로직이 일어나는 영역
- Repository Layer : DB에 접근 및 통신하는 영역
계층형 구조는 말 그대로 계층별로 패키지를 구성하는 방식이다. Controller
, Service
, Repository
등과 같이 계층을 대표하는 디렉터리가 존재하고, 그 안에 클래스가 존재한다.
계층형 구조는 전체적인 구조를 빠르게 파악할 수 있지만, 각 패키지에 너무 많은 클래스들이 존재한다는 단점이 있다.
스프링 웹 계층이 아닌 도메인 별로 패키지를 분리한 구조이다.
도메인형 구조는 관련된 코드들이 응집해있고 각 도메인이 서로 의존하는 코드가 적도록 설계하기 적합하여 코드의 재활용성이 향상된다는 장점이 있다. 하지만, 프로젝트에 대한 이해도가 낮을 경우 전체적인 구조를 파악하기 어렵다는 단점이 있다.
규모가 작은 단순한 프로젝트에서는 계층형, 도메인형이 상관없지만 규모가 커질수록 도메인 구조로 설계하는 것이 좋을 것 같다. 하나의 서비스 패키지에 서비스 클래스가 모두 들어있다고 생각하면...
패키지 구조에 정답은 없다. 자신이 관리하기 쉽고, 능률을 향상시킬 수 있는 구조를 찾아서 사용하자.
다양한 기술 블로그에서 계층형, 도메인형 외에도 모듈형 등 다양한 패키지 구조를 찾아볼 수 있다.
더 효율적일 것 같다고 생각하는 패키지 구조를 적용해보자.