[maxxlog] 멀티 모듈 적용

maxxyoung·2024년 2월 5일
0

maxxlog

목록 보기
4/9

멀티 모듈은 두 번째 회사에서 처음 알게 되었다. 이를 내 개인 프로젝트에 적용해 보려고 한다.

멀티모듈

  • 모듈은 개별로 개발, 빌드, 테스트, 배포가능해야한다.
  • 이러한 모듈을 여러 개 모아놓은 형태

멀티 모듈의 이점

내가 체감상 느낄 수 있는 장점은 아래 두 가지다.

  • 중복되는 domain로직 관리가 가능하다.
  • 모노리틱으로 구성했을 때 배치의 문제가 생겨 배포가 이루어져야 하는 상황에서 서버도 같이 배포가 나가게 된다. 하지만 멀티모듈로 구성했다면 배치 부분의 멀티 모듈만 배포를 하면 된다.

멀티 모듈의 구성


다음과 같은 형태로 멀티 모듈을 구성했다.

  • out side of system -> study-consumer
  • application -> study-app
  • system domain -> study-domain
  • in system available -> study-internal

study-consumer

  • 카프카의 컨슈머 모듈이다.
  • 포인트 관련 로직을 처리한다.
  • domain 모듈을 의존하고 있다.

study-app

  • 하나의 큰 실행 단위들로 나눠진다. 또한 3개 모두 멀티 모듈로 구성되어있다.
    • 앱 api
    • 배치
    • 백오피스
  • 각각의 멀티 모듈은 domain을 의존하고 있다.
dependencies {
	implementation(project(":study-domain:rds"))
}

study-domain

  • 도메인은 하나의 인프라스트럭처를 갖게했다.
  • MySQL과 redis를 사용할 예정이라 인프라 별로 도메인을 나눴다.
    • A도메인을 B도메인으로 가공해 임시저장을 해야하는 요구사항이 있어, A에 redis 의존성이 추가 됐다고 하자. 이 때 조회성으로 A 도메인을 쓰려고 할 때도 jpa 뿐만 아니라 redis에 대한 의존성이 추가되게 될 것이다. 따라서 의존성을 분리하게 위해 모듈도 나누었다.
  • 도메인 모듈 안은 domain, repository, domain service로 구성된다.
    • domain service에서 트랜잭션 단위 처리, 요청 데이터 검증, 이벤트 발생을 실행한다.
  • 아무런 모듈도 의존하지 않는다.

study-internal

  • 내부 모듈 계층은 어플리케이션, 도메인 비즈니스를 모른다.
  • 시스템 전체적인 기능을 서포트하기 위한 기능 모듈이 만들어 질 수 있다.
  • async에서 특정 이벤트에 대한 처리를 담당한다. 이벤트는 Spring Application Event를 말한다.
    • 이벤트 비동기 처리로 kafka를 사용할 예정이다.
  • 아무런 모듈도 의존하지 않는다.

우아한형제들 - 멀티모듈
토스 - 지속 가능한 설계

profile
오직 나만을 위한 글. 틀린 부분 말씀해 주시면 감사드립니다.

0개의 댓글