본문 바로가기
TIL

멀티모듈

by Wanado 2025. 3. 13.
728x90

https://dgjinsu.tistory.com/81

https://hello-judy-world.tistory.com/204

https://new-pow.tistory.com/98

https://velog.io/@bienlee/멀티모듈-우아한-멀티모듈-정리by.-권용근-1.-멀티모듈이란

https://hyeon9mak.github.io/woowahan-multi-module/

✅ 모듈

Oracle Java 문서에서 모듈이란 패키지의 한 단계 위의 집합체이며, 관련된 패키지와 리소스들의 재사용할 수 있는 그룹이라고 정의하고 있다.

이때 각 모듈은 독립적으로 개발, 빌드, 테스트, 배포가 가능하다.

✅ 멀티 모듈

멀티 모듈은 위에서 언급한 모듈들을 하나의 프로젝트 안에서 관리하는 것을 의미한다.

멀티 모듈 안에서 각각의 모듈은 서로를 향한 의존성을 가질 수 있다.

  • 코드 중복 제거
  • 특정 모듈만 변경해서 빌드 및 배포할 수 있어 유지보수가 쉬움.
  • 전체 프로젝트를 빌드하는 대신, 변경된 모듈만 빌드할 수 있어 속도가 개선됩니다.

방법>>

root의 settings.gradle

root의 build.gradle

하위 모듈에 주입할 내용들은 subprojects {} 안에 넣어준다.

실행 목적을 가진 하위 모듈은 bootJar만 활성화 하고 Jar는 비활성화 해준다.

하지만 common 모듈 같이 다른 모듈에서 공유해야 하는 경우라면 BooJar를 비활성화 하고 Jar는 활성화 해준다.

 

 

Spring Boot에서는 기본적으로 애플리케이션을 실행할 수 있는 JAR 파일(bootJar) 을 생성.

하지만 공통 모듈(common)은 실행 가능한 JAR 파일을 만들 필요가 없음.

일반 JAR 파일로 빌드하여 라이브러리처럼 사용함.

 

모듈 유형                                                 bootJar              jar                                       설명

실행 모듈 (API, Service 등) ✅ 활성화 ❌ 비활성화 실행 가능한 Spring Boot 애플리케이션을 패키징
공통 모듈 (Common, Core 등) ❌ 비활성화 ✅ 활성화 다른 모듈에서 사용할 라이브러리 제공

 

 


 

🔹 공통 모듈과 Config Server의 차이점

공통 모듈Config Server는 모두 MSA에서 재사용성을 높이고 유지보수를 쉽게 하기 위한 방식이지만, 역할이 완전히 다릅니다.

공통 모듈 (Common Module) Config Server

주요 역할 자주 사용하는 코드, 로직, 유틸리티를 모듈화하여 여러 서비스에서 재사용 서비스별로 **설정(Configuration)**을 중앙에서 관리
포함되는 내용 DTO, Feign Client, JWT, Redis, 공통 유틸리티, Exception Handling 등 DB 설정, API URL, 인증 키, 로깅 설정 등 환경 변수
적용 방식 각 서비스에서 라이브러리처럼 의존성 추가하여 사용 Config Server를 통해 설정을 가져와서 적용
예제 JwtUtil, RedisService, UserDto 등 application.yml, database.properties 등

📌 왜 Config Server가 필요할까?

MSA에서는 서비스가 많아질수록 각 서비스별 환경 설정 (DB URL, API 키, 로그 설정 등)이 많아지고 변경이 어려움.

Config Server는 이런 설정을 한 곳에서 관리하고, 필요할 때 각 서비스가 가져다 사용할 수 있도록 함.

Config Server 예제

yaml
복사편집
# config-server에서 관리하는 설정 파일 (Git 저장소 등에 보관)
user-service.yml:
  server:
    port: 8081
  spring:
    datasource:
      url: jdbc:mysql://db:3306/user_db
      username: user
      password: secret

➡ 이 설정을 각 서비스가 가져와서 사용하기 때문에, 환경 설정 변경이 쉬워짐.

💡 Config Server의 핵심 목표:

✔ 설정 변경을 중앙에서 관리

서비스별로 다른 환경 설정을 유지

배포 없이 설정 변경 가능 (Spring Cloud Bus + RabbitMQ 사용 시)


🔹 멀티 모듈이 곧 MSA인가?

아니요! 멀티 모듈 프로젝트와 MSA는 완전히 다른 개념입니다.

멀티 모듈 (Multi-Module) MSA (Microservices Architecture)

구성 방식 하나의 프로젝트 안에서 여러 모듈을 나누어 관리 여러 개의 독립적인 서비스(애플리케이션)로 분리
배포 방식 모든 모듈을 함께 빌드 & 배포 (단일 애플리케이션) 각 마이크로서비스를 별도로 배포
데이터베이스 주로 하나의 DB를 공유 서비스별로 개별 DB를 가질 수 있음
통신 방식 같은 프로젝트 내에서 모듈 간 직접 호출 REST API, Feign Client, 메시지 큐(Kafka 등)로 통신
예제 common, user-service, order-service 같은 모듈을 하나의 프로젝트에서 관리 user-service, order-service가 각각 독립 실행 가능

📌 멀티 모듈 예제 (Gradle)

gradle
복사편집
root
 ├── common-module  (공통 모듈)
 ├── user-service   (유저 관련 서비스)
 ├── order-service  (주문 관련 서비스)

➡ 하지만 이 방식은 단일 애플리케이션 안에서 모듈을 나누는 것일 뿐, MSA가 아님!


🔹 멀티 모듈과 MSA를 비교하는 실제 사례

예제 설명

멀티 모듈 하나의 Spring Boot 프로젝트에서 common-module, user-module, order-module을 관리 (하나의 실행 파일)
MSA user-service는 8081에서 실행, order-service는 8082에서 실행, 데이터베이스도 따로 운영 (각 서비스가 독립 실행)

➡ 멀티 모듈은 "하나의 큰 프로젝트를 관리하는 방법", MSA는 "완전히 독립된 여러 서비스를 운영하는 방식"


🎯 정리

공통 모듈과 Config Server의 차이

  • 공통 모듈 → 여러 서비스에서 재사용할 코드 & 라이브러리 (DTO, JWT, Redis 등)
  • Config Server → 여러 서비스의 환경 설정을 중앙에서 관리 (DB 설정, API 키 등)

멀티 모듈 ≠ MSA

  • 멀티 모듈은 하나의 프로젝트에서 모듈을 나누는 것 (한 개의 애플리케이션)
  • MSA는 여러 개의 서비스가 독립적으로 운영되는 구조 (각각 실행 & 배포)

멀티 모듈을 사용한다고 MSA가 되는 것은 아님

MSA에서는 서비스가 독립적으로 실행되며, API, 메시지 큐 등을 통해 통신함

728x90

'TIL' 카테고리의 다른 글

MSA 인증인가 전략1  (0) 2025.03.18
Swagger 통합  (0) 2025.03.17
Error와 예외처리  (0) 2025.03.12
spring cloud - Gateway  (0) 2025.03.11
@NoArgsConstructor,@AllArgsConstructor와(access=AccessLevel.PROTECTED) + @Builder  (0) 2025.03.10