OPEN HYPER STEP
← 목록으로 (stack-analysis)
STACK-ANALYSIS · 113 / 120
stack-analysis
CHAPTER 113 / 120
읽기 약 2
FUNCTION

마이크로서비스: 분해 기준과 통신


핵심 개념

Bounded Context·gRPC·이벤트·실전 분해 — 모놀리스 → MSA.

본문

모놀리스 vs MSA

📋 코드 (15줄)
모놀리스:
- 1개 코드베이스, 1개 배포
- 트랜잭션 강력
- 시작 빠름
- 100명+ 팀 시 비효율

모듈러 모놀리스:
- 1개 배포 + 도메인 분리
- DB는 schema 분리 또는 공유
- 점진적 분해 가능

MSA:
- 다수 서비스 + 다수 배포
- 팀 자율성
- 운영 복잡 (대량의 도구·문화 필요)

분해 시점

📋 코드 (14줄)
시작:
- 모놀리스 (NoYAGNI)

분해 시그널:
- 팀 분리 (5+ 팀)
- 다른 배포 주기 필요
- 다른 기술 스택 필요
- 독립 확장 필요 (예: 검색만 트래픽 폭주)
- 한 부분의 장애가 전체 영향


→ 너무 일찍 분해 = 운영 지옥
→ 너무 늦게 분해 = 개발 속도 저하
→ 보통 50명+ 팀에서 검토

분해 기준 — Bounded Context

📋 코드 (18줄)
[DDD (Domain-Driven Design) 기반]

❌ 기능별 분해 (CRUD 단위)
- UserService, ProductService, OrderService
- 너무 작음 → 통신 폭주


✅ 비즈니스 도메인별
- Catalog Service (상품·검색)
- Order Service (주문·결제)
- Customer Service (사용자·인증)
- Fulfillment Service (배송)
- Notification Service (이메일·푸시)


[Inverse Conway Maneuver]
- 조직이 코드 구조 결정
- 팀 구조 ≈ 서비스 구조

통신 패턴

📋 코드 (13줄)
[동기] REST/gRPC
- 요청-응답
- 결합 강함
- 카스케이딩 실패 위험

[비동기] 메시지 큐 (Kafka·SQS·RabbitMQ)
- 발행-구독
- 결합 느슨
- 최종 일관성


→ 요청 응답 필요: REST/gRPC
→ 이벤트 통지·비동기: 메시지 큐

gRPC (서비스 간 통신)

PROTOBUF📋 코드 (16줄)
// 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;
}
TYPESCRIPT📋 코드 (14줄)
// 클라이언트 (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

📋 코드 (21줄)
모든 외부 트래픽 → 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

데이터베이스 분리

📋 코드 (13줄)
[패턴 1] DB per Service (권장)
- 각 서비스 자기 DB
- 다른 서비스는 API로 접근
- 결합 최소

[패턴 2] Shared DB (안티패턴)
- 여러 서비스가 같은 DB
- 강한 결합
- 마이그레이션 지옥


→ DB per Service이 정답
→ 데이터 중복 OK (eventual consistency)

분산 트랜잭션 — Saga 패턴

📋 코드 (20줄)
모놀리스: 단일 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