MSA 단점을 제대로 알고 도입을 결정하셨나요? “요즘 잘 나가는 회사는 다 MSA 씁니다”라는 말에 이끌려 무작정 마이크로서비스 아키텍처를 도입했다가 운영 지옥을 경험하는 팀이 적지 않습니다. Netflix, Amazon, Uber가 MSA로 성공했다는 이야기는 넘쳐나지만, 그 이면에 수백 명의 엔지니어와 수천억 원의 인프라 투자가 있었다는 사실은 잘 알려지지 않습니다. MSA는 분명 강력한 아키텍처입니다. 하지만 모든 팀, 모든 서비스에 맞는 정답이 아닙니다. 이 글에서는 MSA가 실무에서 어떤 문제를 만들어내는지, 언제 도입해야 하고 언제 피해야 하는지를 냉정하게 분석합니다.
목차
- MSA란 무엇인가 – 모놀리식과의 기초 개념 비교
- MSA의 핵심 작동 원리와 분산 시스템의 본질
- MSA가 가져오는 실질적인 장점과 성공 조건
- MSA의 핵심 단점 – 실무에서 마주치는 7가지 함정
- 모놀리식·모듈러 모놀리스·MSA 상황별 선택 기준
- 전문가 관점 – MSA 도입 전 반드시 점검할 체크리스트와 대안
1. MSA란 무엇인가 – 모놀리식과의 기초 개념 비교
소프트웨어 아키텍처를 이야기할 때 가장 자주 비교되는 두 가지 방식이 있습니다. 바로 모놀리식(Monolithic) 아키텍처와 **MSA(Microservices Architecture)**입니다. 둘의 차이를 명확히 이해하는 것이 MSA의 장단점을 판단하는 출발점입니다.
모놀리식 아키텍처란
모놀리식은 “단일 덩어리”라는 뜻입니다. 쇼핑몰을 예로 들면, 회원 관리·상품 조회·주문 처리·결제·배송 추적 기능이 하나의 애플리케이션 안에 모두 들어 있는 구조입니다.
[모놀리식 구조]
┌─────────────────────────────────────────┐
│ 단일 애플리케이션 (WAR/JAR) │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ 회원 모듈 │ │ 상품 모듈 │ │
│ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ │
│ │ 주문 모듈 │ │ 결제 모듈 │ │
│ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ │
│ │ 배송 모듈 │ │ 알림 모듈 │ │
│ └──────────┘ └──────────┘ │
└─────────────────────────────────────────┘
│
단일 데이터베이스
모든 모듈이 같은 메모리 공간에서 동작하며, 함수 호출로 서로 통신합니다. 배포도 전체를 한 번에 합니다.
MSA(마이크로서비스 아키텍처)란
MSA는 하나의 큰 애플리케이션을 기능별로 독립된 작은 서비스들로 분리하는 방식입니다. 각 서비스는 독립적으로 개발·배포·확장되며, 서로 네트워크(API, 메시지 큐 등)를 통해 통신합니다.
[MSA 구조]
┌───────────┐ ┌───────────┐ ┌───────────┐
│ 회원 서비스 │ │ 상품 서비스 │ │ 주문 서비스 │
│ (포트 8081)│ │ (포트 8082)│ │ (포트 8083)│
│ DB: MySQL │ │ DB: MongoDB│ │ DB: MySQL │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
└───────────────┼───────────────┘
│ (REST API / gRPC / 메시지 큐)
┌───────────┐ ┌─────┴─────┐ ┌───────────┐
│ 결제 서비스 │ │ API Gateway│ │ 알림 서비스 │
│ (포트 8084)│ │ (포트 80) │ │ (포트 8085)│
│ DB: Oracle│ └───────────┘ │ DB: Redis │
└───────────┘ └───────────┘
각 서비스는 자체 데이터베이스를 가지고(Database per Service 패턴), 독립적인 기술 스택을 선택할 수 있습니다.
두 아키텍처 핵심 비교
| 구분 | 모놀리식 | MSA |
|---|---|---|
| 서비스 구성 | 하나의 통합 애플리케이션 | 독립된 다수의 소형 서비스 |
| 배포 단위 | 전체 동시 배포 | 서비스별 독립 배포 |
| 통신 방식 | 함수 호출(In-Process) | 네트워크 호출(HTTP·gRPC·MQ) |
| 데이터베이스 | 공유 단일 DB | 서비스별 독립 DB |
| 확장 방식 | 전체 스케일아웃 | 서비스별 선택적 스케일아웃 |
| 장애 격리 | 한 곳 장애 → 전체 영향 가능 | 장애 서비스만 격리 가능 |
| 초기 개발 속도 | 빠름 | 느림 |
| 운영 복잡도 | 낮음 | 매우 높음 |
2. MSA의 핵심 작동 원리와 분산 시스템의 본질
MSA를 제대로 평가하려면 분산 시스템이 본질적으로 무엇을 의미하는지 이해해야 합니다. MSA의 장점과 단점은 모두 여기서 출발합니다.
분산 시스템의 8가지 오류 (Fallacies of Distributed Computing)
1992년 Sun Microsystems의 엔지니어 피터 도이치(Peter Deutsch)가 제시한 **”분산 컴퓨팅의 8가지 오류”**는 지금도 MSA 설계의 핵심 교훈으로 인용됩니다.
| 오류 | 실제 현실 |
|---|---|
| 네트워크는 믿을 수 있다 | 네트워크는 언제든 끊길 수 있다 |
| 지연(Latency)은 없다 | 네트워크 호출에는 항상 지연이 존재한다 |
| 대역폭은 무한하다 | 대역폭은 유한하고 비용이 든다 |
| 네트워크는 안전하다 | 네트워크는 본질적으로 보안 위협에 노출된다 |
| 토폴로지는 변하지 않는다 | 서버·IP·네트워크 경로는 언제든 바뀐다 |
| 관리자는 한 명이다 | 여러 팀·조직·벤더가 개입한다 |
| 전송 비용은 없다 | 직렬화·역직렬화·프로토콜 비용이 존재한다 |
| 네트워크는 균일하다 | 실제 네트워크는 이질적이고 불균일하다 |
MSA는 모든 서비스 간 통신이 네트워크를 거칩니다. 즉 위의 8가지 오류를 모두 현실로 받아들이고 설계해야 합니다. 이것이 MSA 복잡도의 근본 원인입니다.
CAP 정리 – 분산 시스템의 근본적 한계
분산 시스템에서는 CAP 정리가 항상 따라옵니다. CAP는 다음 세 가지 속성의 약자입니다.
- C(Consistency): 모든 노드가 동시에 같은 데이터를 봄
- A(Availability): 모든 요청이 응답을 받음
- P(Partition Tolerance): 네트워크 분리가 발생해도 시스템이 동작함
CAP 정리: 분산 시스템은 이 세 가지를 동시에 모두 만족할 수 없으며, 최대 두 가지만 보장 가능합니다.
MSA에서 네트워크 분리(P)는 피할 수 없기 때문에, 결국 일관성(C)과 가용성(A) 사이에서 트레이드오프를 선택해야 합니다. 이는 모놀리식에서는 존재하지 않는 설계 고민입니다.
3. MSA가 가져오는 실질적인 장점과 성공 조건
MSA의 단점을 논하기 전에 MSA가 왜 주목받게 됐는지, 어떤 상황에서 효과를 발휘하는지 균형 있게 살펴봐야 합니다.
MSA의 핵심 장점
① 독립 배포와 빠른 릴리즈 사이클
결제 서비스를 수정했을 때, 회원 서비스나 상품 서비스를 재배포하지 않아도 됩니다. 팀별로 자신의 서비스를 독립적으로 배포할 수 있어 하루에도 수십 번 배포하는 CI/CD 파이프라인이 가능합니다.
② 서비스별 독립적 스케일아웃
주문이 폭주하는 이벤트 시즌에 주문 서비스만 인스턴스를 10배로 늘릴 수 있습니다. 모놀리식에서는 전체 애플리케이션을 스케일아웃해야 하므로 비효율적입니다.
③ 장애 격리(Fault Isolation)
알림 서비스가 다운되더라도 주문·결제·회원 서비스는 정상 동작합니다. 서킷 브레이커(Circuit Breaker) 패턴과 결합하면 장애 전파를 효과적으로 차단합니다.
④ 기술 이기종성(Polyglot)
회원 서비스는 Java, 추천 서비스는 Python, 실시간 채팅은 Node.js로 각 서비스에 최적화된 기술 스택을 선택할 수 있습니다.
MSA가 성공하는 조건
MSA가 실제로 효과를 발휘하는 환경에는 공통점이 있습니다.
MSA 성공 조건 체크리스트
✅ 팀 규모: 서비스당 "피자 두 판" 규모(5~8명) 이상의 독립 팀 운영 가능
✅ DevOps 성숙도: CI/CD 파이프라인, 컨테이너 운영 경험 보유
✅ 트래픽 규모: 특정 서비스에 불균형한 대규모 트래픽 발생
✅ 배포 빈도: 서비스별로 다른 주기의 독립 배포가 실질적으로 필요
✅ 도메인 복잡도: 비즈니스 도메인이 명확히 분리 가능한 경계 존재
✅ 조직 문화: 서비스 오너십, SRE 문화, 장애 대응 체계 완비
이 조건들 중 대부분을 갖추지 못한 상태에서 MSA를 도입하면 장점은 누리지 못하고 단점만 고스란히 떠안게 됩니다.
4. MSA의 핵심 단점 – 실무에서 마주치는 7가지 함정
이제 이 글의 핵심입니다. MSA 단점을 실무 사례와 함께 하나씩 짚어봅니다.
함정 ① 분산 트랜잭션 – 가장 어려운 난제
모놀리식에서는 트랜잭션이 간단합니다.
java
// 모놀리식 – 하나의 트랜잭션으로 모든 것을 처리
@Transactional
public void placeOrder(OrderRequest req) {
inventoryService.decrease(req.getProductId(), req.getQty()); // 재고 차감
paymentService.charge(req.getUserId(), req.getAmount()); // 결제
orderRepository.save(new Order(req)); // 주문 저장
}
// 하나라도 실패하면 모두 롤백 → 간단명료
MSA에서는 이 세 가지 작업이 각각 다른 서비스, 다른 데이터베이스에서 일어납니다. 재고는 차감됐는데 결제가 실패하면? 주문은 저장됐는데 재고 서비스가 다운되면? 네트워크를 통한 분산 트랜잭션에는 완전한 원자성을 보장하는 단순한 해법이 없습니다.
이를 해결하기 위해 Saga 패턴, 2PC(Two-Phase Commit), 이벤트 소싱(Event Sourcing) 등 복잡한 패턴을 도입해야 합니다.
[Saga 패턴 – Choreography 방식]
주문 서비스 재고 서비스 결제 서비스
│ │ │
│── OrderCreated ──→ │ │
│ │── StockDecreased ─→│
│ │ │── PaymentFailed
│ │←─ StockRollback ───│
│←─ OrderCancelled ──│ │
각 단계별 보상 트랜잭션(Compensating Transaction)을 설계해야 함
이 패턴들은 구현·테스트·디버깅 모두 매우 복잡합니다. 작은 팀에서 구현하다 보면 비즈니스 로직보다 트랜잭션 관리 코드가 더 많아지는 역설이 발생합니다.
함정 ② 네트워크 지연과 통신 오버헤드
모놀리식에서 함수 호출은 나노초(ns) 단위입니다. MSA에서 서비스 간 HTTP 호출은 수 밀리초(ms)에서 수십 밀리초입니다. 서비스가 깊이 연쇄 호출될수록 지연은 누적됩니다.
[서비스 연쇄 호출로 인한 지연 누적 예시]
클라이언트 → API Gateway(5ms)
→ 주문 서비스(10ms)
→ 회원 서비스(8ms)
→ 재고 서비스(12ms)
→ 결제 서비스(15ms)
→ 외부 PG사 API(80ms)
→ 알림 서비스(10ms)
= 총 140ms 이상
모놀리식이었다면 내부 함수 호출 → 수 ms 이내
이 문제를 완화하기 위해 비동기 통신(Async), 이벤트 드리븐 아키텍처, 캐싱 전략을 도입해야 하지만, 이는 또 다른 복잡도를 추가합니다.
함정 ③ 운영 복잡도의 폭발적 증가
서비스가 10개라면 관리해야 할 대상이 10배가 됩니다. 모니터링, 로깅, 배포, 장애 대응, 보안 패치 모두 서비스 수만큼 곱해집니다.
모놀리식 vs MSA 운영 비교:
| 운영 항목 | 모놀리식 | MSA(서비스 10개 기준) |
|---|---|---|
| 배포 파이프라인 | 1개 | 10개 이상 |
| 로그 수집 | 단일 로그 파일 | 분산 로그 수집 시스템 필요 |
| 추적(Tracing) | 단일 스택트레이스 | 분산 추적(Jaeger, Zipkin) 필요 |
| 모니터링 대시보드 | 1개 | 서비스별 + 통합 대시보드 |
| 서비스 디스커버리 | 불필요 | Eureka, Consul 등 필요 |
| 설정 관리 | 단일 설정 파일 | 중앙 설정 서버(Config Server) 필요 |
| 인증/인가 | 단일 처리 | API Gateway + 서비스별 처리 |
이 모든 인프라를 구축하고 운영하려면 전담 DevOps·SRE 팀이 필요합니다. 10명 규모의 스타트업이 이 부담을 감당하기는 어렵습니다.
함정 ④ 분산 추적의 어려움 – 장애 디버깅이 지옥이 된다
모놀리식에서 버그가 발생하면 단일 스택트레이스(Stack Trace)로 원인을 추적합니다. MSA에서는 하나의 요청이 수십 개의 서비스를 거치기 때문에, 어느 서비스에서 문제가 시작됐는지 파악하는 것 자체가 큰 도전입니다.
[MSA 분산 추적 없이 장애 발생 시]
"주문 실패" 오류 리포트 접수
│
├─ API Gateway 로그 확인 → 정상
├─ 주문 서비스 로그 확인 → 타임아웃 발생
├─ 재고 서비스 로그 확인 → 정상
├─ 결제 서비스 로그 확인 → 외부 API 호출 지연
└─ 외부 PG사 연동 로그 → 간헐적 응답 지연
→ 원인 파악까지 수십 분 ~ 수 시간 소요
→ Jaeger, Zipkin, AWS X-Ray 같은
분산 추적 시스템 없이는 사실상 추적 불가
Correlation ID 기반 로그 추적, 분산 추적(Distributed Tracing) 시스템 구축이 필수이지만, 이 자체가 상당한 초기 투자를 요구합니다.
함정 ⑤ 데이터 일관성 문제 – 서비스별 DB 분리의 역설
MSA의 원칙 중 하나인 Database per Service는 서비스 독립성을 높이지만, 데이터 일관성 유지를 매우 어렵게 만듭니다.
[문제 시나리오: 회원 탈퇴 처리]
회원 서비스 DB: users 테이블 → 회원 상태 '탈퇴'로 변경 ✅
주문 서비스 DB: orders 테이블 → 진행 중 주문 처리? ❓
결제 서비스 DB: payments 테이블 → 미완료 결제 처리? ❓
리뷰 서비스 DB: reviews 테이블 → 작성한 리뷰 처리? ❓
포인트 서비스 DB: points 테이블 → 잔여 포인트 처리? ❓
→ 모놀리식: JOIN 쿼리 하나로 전체 파악 가능
→ MSA: 각 서비스에 개별 이벤트 발행 + 각자 처리 로직 구현 필요
이 문제를 해결하려면 **이벤트 드리븐 아키텍처(Event-Driven Architecture)**와 최종 일관성(Eventual Consistency) 개념을 팀 전체가 이해하고 받아들여야 합니다. “데이터가 즉시 일치하지 않을 수 있다”는 개념은 기존 개발자들에게 매우 낯설고 버그를 유발하기 쉽습니다.
함정 ⑥ 서비스 간 계약 관리 – API 버전 지옥
모놀리식에서는 함수 시그니처를 바꾸면 컴파일 오류가 즉시 발생해 문제를 바로 잡을 수 있습니다. MSA에서는 서비스 간 API 계약이 느슨하게 연결됩니다. 한 서비스의 API 스펙이 바뀌었는데 다른 서비스가 이를 모르면 런타임에 장애가 발생합니다.
[API 버전 관리 문제 예시]
주문 서비스 → 회원 서비스 호출: GET /api/v1/users/{id}
Response: { "userId": 1, "name": "홍길동" }
회원 서비스 팀이 스펙 변경: GET /api/v2/users/{id}
Response: { "id": 1, "userName": "홍길동" }
(필드명 변경: userId→id, name→userName)
→ 주문 서비스는 v1 응답 형식으로 파싱 → NullPointerException 발생
→ 컴파일 타임에는 발견 불가, 런타임 장애로만 나타남
→ Consumer-Driven Contract Testing(Pact) 등 계약 테스트 도입 필요
함정 ⑦ 초기 개발 속도 저하와 팀 역량 요구사항 급증
MSA는 “빠른 개발”을 위한 아키텍처처럼 보이지만, 초기 셋업 비용이 매우 큽니다.
MSA 도입 시 초기에 구축해야 할 인프라:
□ API Gateway (Kong, AWS API Gateway, Spring Cloud Gateway)
□ 서비스 디스커버리 (Eureka, Consul)
□ 중앙 설정 서버 (Spring Cloud Config, Consul)
□ 분산 추적 (Jaeger, Zipkin, AWS X-Ray)
□ 중앙 로그 수집 (ELK Stack, Loki)
□ 메시지 브로커 (Kafka, RabbitMQ)
□ 서킷 브레이커 (Resilience4j, Hystrix)
□ 컨테이너 오케스트레이션 (Kubernetes)
□ CI/CD 파이프라인 (Jenkins, GitHub Actions × N개)
□ 서비스 메시 (Istio, Linkerd) – 선택사항이지만 권장
→ 이 모든 것을 구축하고 운영할 역량이 팀에 있는가?
비즈니스 가치를 만들기도 전에 인프라 구축에 수개월을 소비하는 상황이 발생합니다. 스타트업이 “MVP를 빨리 내야 한다”면서 MSA를 선택하는 것은 자기모순입니다.
5. 모놀리식·모듈러 모놀리스·MSA 상황별 선택 기준
“모놀리식이냐 MSA냐”는 이분법이 아닙니다. 그 사이에 **모듈러 모놀리스(Modular Monolith)**라는 현실적인 중간 지점이 있습니다.
세 가지 아키텍처 특성 비교
| 구분 | 모놀리식 | 모듈러 모놀리스 | MSA |
|---|---|---|---|
| 배포 | 단일 배포 | 단일 배포 | 독립 배포 |
| 모듈 분리 | 없거나 느슨함 | 패키지·모듈 단위 명확히 분리 | 서비스 단위 물리적 분리 |
| 통신 | 함수 호출 | 함수 호출 (인터페이스 기반) | 네트워크 호출 |
| DB 분리 | 공유 DB | 공유 DB (스키마 분리) | 서비스별 독립 DB |
| 운영 복잡도 | 낮음 | 낮음 | 매우 높음 |
| 전환 용이성 | MSA로 전환 어려움 | MSA로 전환 비교적 쉬움 | – |
모듈러 모놀리스 – 현실적인 최선의 출발점
모듈러 모놀리스는 하나의 애플리케이션이지만 내부가 명확한 도메인 경계(Bounded Context)로 분리된 구조입니다. 나중에 특정 모듈이 성장하면 그 부분만 떼어 MSA로 전환하기 쉽습니다.
[모듈러 모놀리스 패키지 구조 예시]
com.example.shop
├── member ← 회원 도메인 (외부에서 직접 접근 금지)
│ ├── api (외부 인터페이스만 공개)
│ ├── domain
│ └── infra
├── order ← 주문 도메인
│ ├── api
│ ├── domain
│ └── infra
├── payment ← 결제 도메인
│ ├── api
│ ├── domain
│ └── infra
└── shared ← 공통 컴포넌트 (최소화)
Shopify, Stack Overflow 같은 대형 서비스들이 잘 설계된 모놀리스로 수억 명의 사용자를 서비스하고 있다는 사실은 많은 시사점을 줍니다.
단계별 아키텍처 선택 가이드
[서비스 성장 단계별 아키텍처 권장]
Stage 1 (초기 MVP, 팀 1~5명)
→ 모놀리식
→ 빠른 개발과 검증이 최우선
Stage 2 (서비스 성장, 팀 5~20명)
→ 모듈러 모놀리스
→ 내부 도메인 경계를 명확히 하면서 단일 배포 유지
Stage 3 (대규모 트래픽, 팀 20명 이상, 명확한 병목 식별)
→ 선택적 MSA 전환
→ 병목이 발생하는 특정 서비스만 분리 (Strangler Fig 패턴)
Stage 4 (성숙한 MSA 조직)
→ 전면적 MSA + DevOps 성숙도 완비
현재 상황 점검 체크리스트
다음 항목에서 **”아니오”**가 3개 이상이면 MSA 도입을 재고하세요.
- 서비스당 독립적으로 일할 수 있는 팀이 있는가?
- Kubernetes 또는 동급 컨테이너 오케스트레이션 운영 경험이 있는가?
- CI/CD 파이프라인이 서비스별로 구축 가능한가?
- 분산 추적·중앙 로그 수집 시스템을 운영할 수 있는가?
- 팀이 Saga 패턴, 이벤트 소싱, 최종 일관성 개념을 이해하는가?
- 특정 서비스의 스케일아웃이 실제로 필요한 트래픽이 있는가?
- 서비스 간 배포 주기가 실질적으로 다른가?
6. 전문가 관점 – MSA 도입 전 반드시 점검할 체크리스트와 대안
마틴 파울러(Martin Fowler)는 MSA의 개념을 대중화한 장본인이면서도 다음과 같이 경고했습니다.
“모놀리식을 제대로 만들지 못하는 팀이 MSA를 성공시킬 수 없다. MSA는 단순함이 아닌 복잡함을 관리하는 기술이다.”
또한 그는 “모놀리스 우선(Monolith First)” 접근을 강하게 권장합니다. 도메인을 충분히 이해한 뒤 경계가 명확해졌을 때 비로소 분리하라는 조언입니다.
국내 실무 현장의 현실
국내 금융·공공·SI 환경에서 MSA 도입 실패 사례의 공통 패턴은 다음과 같습니다.
[국내 MSA 도입 실패 패턴]
1. 유행에 따른 도입
└─ 기술 검토 없이 "요즘 MSA 한다니까" 결정
2. 도메인 분리 없는 서비스 분리
└─ 경계 없이 기능 단위로 쪼갬 → Distributed Monolith 탄생
3. DevOps 준비 없는 MSA
└─ 쿠버네티스 도입했지만 운영 인력 없음
4. 분산 트랜잭션 미검토
└─ SAGA 패턴 없이 HTTP 동기 호출로만 연결
5. 테스트 전략 부재
└─ 서비스 간 계약 테스트 없이 통합 테스트도 없음
Distributed Monolith – 최악의 결과
MSA를 잘못 도입했을 때 나타나는 최악의 형태가 **분산 모놀리스(Distributed Monolith)**입니다. 서비스를 물리적으로 분리했지만, 서비스 간 강결합이 그대로 남아 있는 상태입니다.
- 서비스가 분리됐지만 DB는 공유
- 서비스 간 동기 HTTP 호출이 모든 곳에 연결됨
- 한 서비스 배포 시 다른 서비스도 함께 배포해야 함
- MSA의 복잡도는 그대로이면서 모놀리식의 단순함도 잃음
이 상태는 모놀리식보다 나쁩니다.
현실적인 대안 전략
| 전략 | 설명 | 적합한 상황 |
|---|---|---|
| 모듈러 모놀리스 | 내부 모듈 경계 강화, 단일 배포 유지 | 팀 성장 중, MSA 준비 전 단계 |
| Strangler Fig 패턴 | 레거시를 점진적으로 MSA로 전환 | 기존 모놀리스를 단계적 마이그레이션 |
| 선택적 서비스 분리 | 명확한 병목 서비스만 분리 | 특정 서비스에 극단적 트래픽 집중 시 |
| Backend for Frontend | 클라이언트별 전용 API 레이어 | 모바일·웹·어드민 요구사항 분리 시 |
추천 학습 로드맵
MSA를 올바르게 이해하고 판단하기 위한 학습 경로입니다.
| 단계 | 학습 내용 | 참고 자료 |
|---|---|---|
| 1단계 | 소프트웨어 아키텍처 기초 | 클린 아키텍처 (로버트 마틴) |
| 2단계 | DDD(도메인 주도 설계) | 에릭 에반스 DDD |
| 3단계 | 마이크로서비스 패턴 | 마이크로서비스 패턴 (크리스 리처드슨) |
| 4단계 | 분산 시스템 기초 | Designing Data-Intensive Applications |
| 5단계 | 쿠버네티스 실습 | Kubernetes 공식 문서 |
| 6단계 | 실무 아키텍처 사례 | AWS Well-Architected Framework |
결론
MSA 단점은 분산 트랜잭션의 복잡성, 네트워크 지연 누적, 운영 복잡도 폭발, 장애 추적의 어려움, 데이터 일관성 문제, API 계약 관리, 초기 개발 속도 저하라는 7가지 현실적인 함정으로 요약됩니다. MSA는 분명 강력한 아키텍처이지만, 이를 감당할 수 있는 팀 규모·DevOps 성숙도·도메인 복잡도가 갖춰지지 않은 상태에서의 도입은 득보다 실이 큽니다. 모놀리식으로 빠르게 시작하고, 모듈러 모놀리스로 경계를 정비한 뒤, 실제 필요가 생겼을 때 점진적으로 MSA로 전환하는 것이 대부분의 팀에게 현실적으로 가장 올바른 전략입니다.
지금 바로 본문의 MSA 도입 체크리스트를 팀과 함께 점검해보고, 현재 단계에 맞는 아키텍처 전략을 세워 보세요.
답글 남기기