stack-analysis
CHAPTER 113 / 120
읽기 약 2분
FUNCTION
마이크로서비스: 분해 기준과 통신
핵심 개념
Bounded Context·gRPC·이벤트·실전 분해 — 모놀리스 → MSA.
본문
모놀리스 vs MSA
모놀리스:
- 1개 코드베이스, 1개 배포
- 트랜잭션 강력
- 시작 빠름
- 100명+ 팀 시 비효율
모듈러 모놀리스:
- 1개 배포 + 도메인 분리
- DB는 schema 분리 또는 공유
- 점진적 분해 가능
MSA:
- 다수 서비스 + 다수 배포
- 팀 자율성
- 운영 복잡 (대량의 도구·문화 필요)분해 시점
시작:
- 모놀리스 (NoYAGNI)
분해 시그널:
- 팀 분리 (5+ 팀)
- 다른 배포 주기 필요
- 다른 기술 스택 필요
- 독립 확장 필요 (예: 검색만 트래픽 폭주)
- 한 부분의 장애가 전체 영향
→ 너무 일찍 분해 = 운영 지옥
→ 너무 늦게 분해 = 개발 속도 저하
→ 보통 50명+ 팀에서 검토분해 기준 — Bounded Context
[DDD (Domain-Driven Design) 기반]
❌ 기능별 분해 (CRUD 단위)
- UserService, ProductService, OrderService
- 너무 작음 → 통신 폭주
✅ 비즈니스 도메인별
- Catalog Service (상품·검색)
- Order Service (주문·결제)
- Customer Service (사용자·인증)
- Fulfillment Service (배송)
- Notification Service (이메일·푸시)
[Inverse Conway Maneuver]
- 조직이 코드 구조 결정
- 팀 구조 ≈ 서비스 구조통신 패턴
[동기] REST/gRPC
- 요청-응답
- 결합 강함
- 카스케이딩 실패 위험
[비동기] 메시지 큐 (Kafka·SQS·RabbitMQ)
- 발행-구독
- 결합 느슨
- 최종 일관성
→ 요청 응답 필요: REST/gRPC
→ 이벤트 통지·비동기: 메시지 큐gRPC (서비스 간 통신)
// proto/order.proto
syntax = "proto3";
service OrderService {
rpc GetOrder (GetOrderRequest) returns (Order);
rpc CreateOrder (CreateOrderRequest) returns (Order);
rpc ListOrders (ListOrdersRequest) returns (stream Order);
}
message Order {
string id = 1;
string user_id = 2;
repeated OrderItem items = 3;
double total = 4;
string status = 5;
}// 클라이언트 (Node.js)
import * as grpc from '@grpc/grpc-js';
import { OrderServiceClient } from './generated/order_grpc_pb';
const client = new OrderServiceClient(
'order-service:50051',
grpc.credentials.createInsecure()
);
const order = await new Promise((resolve, reject) => {
client.getOrder({ id: '123' }, (err, res) => {
err ? reject(err) : resolve(res);
});
});API Gateway
모든 외부 트래픽 → API Gateway → 내부 서비스
기능:
- 라우팅 (path 기반)
- 인증·권한 (JWT 검증)
- Rate limit
- 캐싱
- 로깅
도구:
- Kong (오픈소스)
- AWS API Gateway
- Tyk
- Nginx + custom
// 예: /api/orders/* → order-service
// /api/users/* → user-service
// /api/search/* → search-service데이터베이스 분리
[패턴 1] DB per Service (권장)
- 각 서비스 자기 DB
- 다른 서비스는 API로 접근
- 결합 최소
[패턴 2] Shared DB (안티패턴)
- 여러 서비스가 같은 DB
- 강한 결합
- 마이그레이션 지옥
→ DB per Service이 정답
→ 데이터 중복 OK (eventual consistency)분산 트랜잭션 — Saga 패턴
모놀리스: 단일 DB 트랜잭션
MSA: 분산 트랜잭션 → Saga로 해결
[Saga 패턴]
주문 → 결제 → 재고 → 배송
각 단계 성공 시 다음 단계
실패 시 보상 트랜잭션 (rollback)
[Choreography] 이벤트 기반
order.placed → payment.processing
payment.success → inventory.reserve
inventory.reserved → shipment.create
[Orchestration] 중앙 조정
SagaCoordinator가 단계별 명령
실패 시 보상 명령다음 챕터
CH.114 "이벤트 기반 아키텍처: 메시지 큐".
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude
무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
내 코드의 마이크로서비스 부분을 분석해서 실전 분석 + 개선 우선순위를 알려줘.
ChatGPT
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
마이크로서비스 관련 베스트 프랙티스 5가지를 비교 분석해서 패턴 추출를 알려줘.
Gemini
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
내 프로젝트 전체에서 마이크로서비스 최적화 가능 위치를 보고해줘.
Grok
무료: Grok 4.1 / SuperGrok $30/mo
2026년 한국 시장의 마이크로서비스 트렌드를 솔직히 알려줘.
⭐ 이것만 기억하세요
마이크로서비스: 분해 기준과 통신은 이 3가지만 확실히 잡으세요
1.비즈니스 도메인 (Bounded Context) 단위로 분해 — CRUD 단위 X
2.gRPC = 동기, 메시지 큐 = 비동기 — 케이스에 맞춰
3.DB per Service + Saga 패턴 = 분산 트랜잭션
공유하기
진행도 113 / 120