코딩/sparta TIL

멀티 모듈 vs MSA 구조

americanoallday 2025. 6. 17. 10:50

🧱 1. 멀티 모듈 구조 (Multi-Module)

한 프로젝트 안에 여러 개의 기능을 나눈 폴더가 있는 것

 

 

🍱 도시락

하나의 프로젝트(cluvr-api) 안에:

  • user
  • club
  • auth
  • notice

 

이런 모듈 폴더들이 있음.

→ 근데 이건 다 같은 서버에서 같이 실행. (= 하나의 jar 파일로 빌드)

📦 cluvr-api
├── user/
├── club/
├── auth/
└── notice/

➡️ 결국 하나의 프로그램!

 

🏘️ 2. MSA 구조 (Microservices Architecture)

기능별로 아예 다른 프로젝트, 다른 서버로 분리한 구조

 

 

🏠 집을 여러 채 짓는 느낌

기능별로 아예 다른 프로젝트로 나눠서, 각자 따로 실행되고, 서로 통신(API, Kafka 등) 으로만 연결.

📁 cluvr-user-service       ← 회원가입, 로그인
📁 cluvr-club-service       ← 클럽 생성, 가입
📁 cluvr-notification-service ← 알림
📁 cluvr-chat-service       ← 채팅

각 서비스는 서로 다른 서버Docker 컨테이너에서 돌 수 있음!

 

 

🚦비교 표로 보면?

항목 멀티 모듈 구조 MSA 구조
코드 위치 하나의 프로젝트 안 여러 개의 프로젝트
실행 서버 1개 서버 여러 개
빌드 JAR 1개 생성 서비스마다 JAR 따로
통신 내부 메서드 호출 REST API, Kafka 등
배포 한 번에 배포 서비스별 개별 배포
고장 하나 망가지면 다 영향 한 서비스 망가져도 나머지는 동작

 

🍜 비유로 다시

🍲 멀티 모듈 = 짜장면 + 짬뽕 + 볶음밥을 한 그릇에 같이 담은 “3종 세트”

→ 같이 요리되고, 같이 서빙됨

 

 

🍱 MSA = 짜장면집, 짬뽕집, 볶음밥집 따로 있는 식당가

→ 각자 가게 주인이 따로 있음. 고장나도 나머지는 장사함

 

✅ 결론

질문
멀티모듈은 뭐야? 하나의 프로젝트 안에 기능을 나눈 폴더들 (같이 실행)
MSA는 뭐야? 기능을 완전히 따로 나눠서 각각 실행되는 구조 (서버도 따로)
왜 MSA로 바꾸는 거야? 더 유연하게 관리하고, 장애 격리하고, 독립적으로 배포하려고

 

 

멀티모듈도 따로 빌드해서 컨테이너로 띄울 수 있다면… MSA랑 뭐가 다른 거냐?

✅ 결론부터

🔥 “어떻게 빌드하느냐”보다,
🔥 “서비스가 진짜 독립되어 있느냐”가 MSA의 핵심!

 

🔍 예시

🎒멀티모듈 프로젝트

📦 cluvr-api (멀티모듈)
├── user/
├── club/
├── board/
  • 👉 bootJar 하면 하나의 JAR 파일 생성 (cluvr-api.jar)
  • 컨테이너에 올릴 때도 결국 이 JAR 하나만 올려서 실행
  • user/club/board 모듈은 따로 실행 안 됨
  • DB, 설정, 로그 등도 모두 공유됨
  • 하나 망가지면 서버 전체 영향

 

🏘️ MSA 구조

📦 cluvr-user-service
📦 cluvr-club-service
📦 cluvr-board-service
  • 각자 Spring Boot 앱이고, 각각 따로 bootJar 생성
    → 각각 컨테이너로 만들어서 따로 띄움 (예: user는 8081, club은 8082)
  • 설정, DB, 로그, 배포 모두 독립적
  • user-service가 터져도 club-service는 계속 살아있음

 

🧠 핵심 차이 정리

항목 멀티모듈 MSA
코드 위치 한 프로젝트 서비스마다 별도 프로젝트
빌드 결과 JAR 1개 서비스별 JAR 각각
실행 방식 JVM 1개에서 실행 JVM 여러 개, 컨테이너 따로
서비스 간 의존 직접 참조 (클래스 import) REST API, Kafka 등 외부 통신
고장 시 영향 전체 다운 위험 장애 격리 가능
배포 전략 전체 재배포 서비스만 개별 배포 가능

 

💬 질문 요지 다시 보면

“멀티모듈도 따로 빌드하고 컨테이너로 올릴 수 있다면 차이 없지 않나?”

 

→ 이론상 멀티모듈 중 하나만 빼서 따로 실행할 수 있음. 하지만 그건 MSA 흉내만 낸 거고, 진짜 MSA는:

  • 아예 프로젝트, 설정, 환경, 배포, 통신까지 완전히 분리
  • 개발 팀도 서비스마다 따로 움직일 수 있을 정도

 

✅ 한 줄 요약

멀티모듈은 코드는 나눴지만 실행은 한 몸, MSA는 코드도, 실행도, 운영도 전부 따로라는 점이 차이!