코드 저장소.

멀티모듈을 도입을 하는 이유 본문

포폴/일정관리앱

멀티모듈을 도입을 하는 이유

slown 2025. 2. 3. 23:36

목차

1. 멀티모듈을 도입한 이유?

2.멀티모듈의 특징

3.프로젝트에 적용할 모듈 구조

4. 각 모듈의 역할 기술

5. 의존성 환경과 헥사고날 구조

 

1. 멀티모듈을 도입한 이유?

이번 프로젝트에서는 단일 구조(Monolthic)이아닌 멀티모듈의 구조로 진행을 하려고 한다.

기존의 프로젝트에서는 모놀리식구조로 프로젝트를 진행을 하다보니깐 여러문제점이 있었는데 그것은 다음과 같았다.

  • 패키지끼리 의존성이 강해서 하나의 수정을 잘못하면 다른곳에서 에러가 속출하는 점
  • 시간이 지날수록 기능이 추가되면 무거워진다는 점.

간략하게 이야기를 하면 각 패키지의 레이어간의 의존성이 강해져서 시간이 지날수록 코드의 유지보수가 점점 어려워진다는 점이다. 이러한 단점을 해결을 하기 위해서 멀티모듈을 도입을 해봤습니다.

2.멀티모듈의 특징

그럼 멀티모듈은 무엇인지? 를 알기 전에 '모듈'이 무엇인지를 알아야 합니다. 

 

우선 모듈이라는 것은 프로그램을 구성하는 시스템을 기능 단위의 독립적인 부분으로 분리한 것을 의미합니다.  그리고 하나의 프로젝트 안에 독립적인 모듈을 여러  담은 구조를 멀티 모듈 프로젝트입니다.  그럼 멀티모듈을 도입을 하면 어떤 특징이 있는지를 보면 다음과 같습니다.

  • 각각의 모듈과 패키지가 독립적인 역할을 해서 의존성이 낮아진다.
  • 공통 기능을 별도 모듈로 분리하여 재사용 가능.
  • 도메인별로 분리하여 유지보수성과 확장성을 높일 수 있음
  • 한가지 기능의 수정으로 모든 프로젝트를 빌드 할 필요가 없다. 수정한 기능 모듈만 리빌드 한다.

3.프로젝트에 적용할 모듈 구조

  • bootstrap
  • common
    • jpa
    • security
    • exception
    • logging
  • domain
    • api
    • connector
      • in-connector
      • out-connector
      • interfaces
      • api-model
    • core
      • enumerate
      • exception
      • service
      • model
    • infrastructure
      • rdb
      • api-client

4. 각 모듈의 역할 기술

  • bootstrap: yml 정보 스캐널, 프로젝트 시작점
  • common: jpa, security, logging, exception 공통적 정보 설정
  • domain
    • core.model: 비지니스 로직 (Entity + 기본 가장찰)
    • core.service: 혼자 되기 힘들고, 회계로 제어하는 로직
    • connector: Model 과 DTO 간 변환 요청
    • infrastructure: JPA, 외부 API 호출 구현
  • connector
    • in-connector: Controller나 Consumer에서 호출하는 서비스
    • out-connector: 도메인에서 외부를 호출하기 위한 아웃포트 구현
    • interfaces: 인터페이스(포트) 정의
    • api-model: 요청/응답 DTO
  • infrastructure
    • rdb: JPA 기반 Repository 구현체
    • api-client: 외부 API 요청

5. 의존성 환경과 헥사고날 구조

모듈과 각 계층은 다음과 같이 진행되는 헥사고날 아키템(Hexagonal Architecture) 건설 상위에서 시작되어 Core(Domain)로 수행되는 것이 요약 개념입니다.

헥사고날 구조:

[ API / KafkaConsumer ]
          ↓
   [ in-connector (Input Adapter) ]
          ↓
   [ domain-core (ScheduleDomainService 등) ]
          ↓
   [ out-connector (Output Port) ]
          ↓
[ DB, KafkaProducer, S3Uploader 등 (Adapter) ]

 

포트/어댑터 패턴을 적용함으로써 도메인은 외부 구현을 전혀 모르게 하고, 외부 변경에도 도메인은 안정성을 유지합니다.

 

 

참고 

https://woo0doo.tistory.com/37

 

[Project] 멀티 모듈을 왜 쓸까? (멀티 모듈 도입 전)

서론 IT 연합동아리 DND에 참가하게 되어서 새로운 사이드 프로젝트를 진행하게 되었습니다. 백엔드는 2명으로 이루어져 있는데, 소통을 하다보니 자연스럽게 이번 프로젝트에 대해 고민하게 되

woo0doo.tistory.com

https://ji-soo708.tistory.com/20

 

[Spring] 멀티 모듈 프로젝트 도입하기

1. 단일 모듈 프로젝트의 문제점장기 프로젝트의 경우, 시간이 지날수록 기능이 추가되고 무거워집니다. 서비스가 분리된 후에도 도메인이 서로 강하게 결합되어 있는 경우, 도메인의 수정이나

ji-soo708.tistory.com