마이크로서비스를 잘 구축하려면 확립된 패턴을 통해 분산 시스템의 과제를 다뤄야 합니다 — 서비스 통신, 데이터 관리, 복원력, observability를 위한 패턴입니다. 이 패턴들은 마이크로서비스의 본질적 복잡성을 관리하는 데 도움이 됩니다.
통신과 API 패턴
✓ API GATEWAY → 단일 진입점; 횡단 관심사 중앙화 (라우팅, 인증 등)
✓ 서비스 디스커버리 → 인스턴스가 변할 때 서비스가 동적으로 서로 찾음 (레지스트리)
✓ 요청/응답엔 동기 (REST/gRPC); 디커플링엔 비동기 (이벤트/큐) → 가능한 곳엔
결합을 줄이기 위해 비동기/이벤트 선호
✓ BFF (Backend for Frontend) → 클라이언트 유형별 맞춤 gateway
데이터 관리 패턴
✓ DATABASE PER SERVICE → 각 서비스가 자기 데이터 소유 (공유 데이터베이스 없음) → 독립성,
그러나 데이터가 분산 (교차 서비스 조인/트랜잭션 없음)
✓ SAGA → 분산 트랜잭션 없이 서비스 간 트랜잭션 관리:
→ 로컬 트랜잭션 시퀀스 + 실패 시 보상 동작 (eventual consistency)
✓ EVENT SOURCING / CQRS → 이벤트 기반 상태와 읽기/쓰기 모델 분리
✓ 서비스 간 eventual consistency (수용; 분산 트랜잭션 회피)
