🧱 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는 코드도, 실행도, 운영도 전부 따로라는 점이 차이!
'코딩 > sparta TIL' 카테고리의 다른 글
CI/CD 구축하기 : Jenkins + AWS + Docker + Git hub 구조 공부 (1) | 2025.06.18 |
---|---|
MSA 구조에서 인증된 유저에 대한 정보는 어떻게 확인하는가? (0) | 2025.06.17 |
프로젝트 개선 구조 2 : 멀티 모듈 -> MSA 구조 (3) | 2025.06.17 |
하... 어제까지 잘 되던 모듈 빌드 및 도커 띄우기가 갑자기 메인을 못찾고 에러 남... (0) | 2025.06.14 |
채팅 서버 만들기 : Redis pub/sub + Kafka 구조로 가는 이유 (2) | 2025.06.13 |