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, 메시지 큐 등을 통해 통신함
'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 |