*아래 모듈의 네이밍에서 server → 서비스명으로 생각하면 된다!
server-common
: 공통 모듈 계층제약이 가장 많은 계층
사용하는 시스템이 하나로 국한되지 않고, 다른 프로젝트에서도 가져와 사용할 수 있는 모듈로, 다른 모든 모듈이 해당 모듈을 의존하므로 여기서는 다른 모듈을 의존하지 못한다. (서로 의존하는 관계가 된다면 순환 참조 문제가 발생할 수 있으므로)
server-core, server-domain
: 도메인 모듈 계층하나의 도메인 모듈은 하나의 infrastructure에 대한 책임만을 가진다.
만약 2개 이상의 infrastructure를 사용하는 상황이라면, 아예 책임을 가지지 않도록 해야 한다.
예를 들어, User 엔티티에서 User 객체 자체를 저장하는 RDB와 리프레시 토큰을 저장하는 Redis 2가지의 infrastructure를 사용할 때 2개의 의존성을 모두 추가해버리면 엄청나게 관계가 꼬여버리게 될 것이다. 따라서 아예 책임을 지지 않도록 하여, 2개의 infrastructure 간의 관계가 생길 때 2개 모듈(domain-redis
, domain-rds
)을 품는 모듈을 작성하거나, 2개 infrastructure 모듈을 품는 어플리케이션에서 처리하는 방법이 있다.
Domain
도메인 클래스 (테이블과 매핑되는 엔티티 클래스)
Repository
도메인의 CRUD 기능
Service
도메인 로직 → 트랜잭션 단위, 요청 데이터 검증, 이벤트 발생 등을 처리
server-client, core-web, server-event-publisher
: 내부 모듈 계층저장소, 도메인 외 시스템에서 필요한 모듈
ex. 푸시알림 이벤트 전송, 소셜 로그인 외부 클라이언트로부터 받아온 정보 처리
→ 독립 모듈 계층과 비슷한 역할을 하지만 가장 큰 차이는 시스템에 연관이 있는 모듈이라는 점이다.
server-app-xxx
: 어플리케이션 모듈 계층하위의 모듈들을 조립하여 독립적으로 실행가능한 계층
‘app’이라는 네이밍을 넣어서 모듈 내의 실행가능한 어플리케이션을 명확히 한다
server-external
: 독립 모듈 계층시스템과 연관이 없는 완전히 분리된 계층
ex. 소셜로그인에 필요한 외부 클라이언트 설정, 파이어베이스 연결 설정
umbba-api, umbba-notification : 어플리케이션 계층
umbba-domain : 도메인 계층
umbba-common : 공통 계층
umbba-external : 독립 계층
위와 같이 API서버, 알림서버를 분리하여 두고 해당 어플리케이션에서 하위 세 개 계층의 모듈을 불러와 사용하는 것으로 결정!