도메인 관점
예를 들어, 유저가 책을 주문하는 서비스의 경우 모듈을 유저, 책, 주문과 같은 형식으로 나누어 모듈을 분리한다.
도메인을 기준으로 나누는 것으로 DDD가 떠올랐다.
백엔드 개발 관점
첫 번째는 아키텍처를 기준으로 분리하는 것이다.
예시로는 계층형 아키텍처를 사용할 경우 컨트롤러, 서비스, 레포지토리(+도메인)를 각각 다른 모듈로 분리한다.
두 번째는 관련된 서버(api 서버, 배치 서버 등)를 기준으로 분리하는 것이다.
예시로는 컨트롤러+서비스(api 서버), 레포지토리+도메인(db 서버), 배치 서버 등 관련된 서버를 기준으로 모듈을 분리한다.
이 중에서도 사이드 프로젝트에서 보통 많이 쓰는 구성은 백엔드 개발 관점에서 관련된 서버를 기준으로 분리하는 방식이었고
필자도 해당 방식을 택했다.
module-api (컨트롤러+서비스)
module-domain (레포지토리+엔티티)
module-infrastructure (외부 api)
module-batch (배치 서버)
allprojects
: 현재 모듈과 하위 모듈에 적용
subprojects
: 하위모듈에만 적용됨