
MSA(Microservice Architecture)에서는 하나의 거대한 애플리케이션 대신, 역할별로 쪼개진 여러 서비스가 독립적으로 배포/확장됩니다. 이때 모든 외부 트래픽은 API Gateway를 통해 유입되며, Gateway는 인증/인가, 라우팅, 로깅/모니터링, 속도 제한, 응답 집계(데이터 통합) 같은 공통 관심사를 담당합니다.
[Client]
↓
[API Gateway] ← 인증/인가 · 라우팅 · 로깅 · 캐싱 · 속도 제한 · 응답 집계
↓
┌───────────────┬────────────────┐
│ │ │
[Auth Service] [Event Service] [Other Services...]
Gateway와 내부 서비스(또는 서비스 간) 통신은 단일 해법이 아닌 목적에 따라 다양한 방식을 조합합니다.
| 구분 | 프로토콜 | 통신 형태 | 대표 용도 |
|---|---|---|---|
| (1) | HTTP REST | 요청/응답(동기) | 범용 API, 인증/인가, 간단한 CRUD |
| (2) | gRPC | 요청/응답(동기) + 스트리밍 | 고성능 내부 RPC, 다량 조회 |
| (3) | Message Queue(Kafka/RabbitMQ/Redis Streams) | 비동기 | 이벤트 발행/구독, 비동기 CUD 처리 |
| (4) | GraphQL Federation | 질의 기반(동기) | 다수 서비스 데이터의 통합 조회 |
| (5) | WebSocket / SSE | 실시간 양방향/단방향 스트림 | 실시간 알림, 상태 갱신 |
특징
장점
단점
권장 사용처
특징
장점
단점
권장 사용처
특징
장점
단점
권장 사용처
특징
장점
단점
권장 사용처
데이터 통합이란?
User는 사용자 서비스, Attendance는 이벤트 서비스가 관리하지만, 클라이언트는 “사용자 이름 + 출석 현황”을 한 번에 요청.특징
장점
단점
권장 사용처
| 분류 | 선호 통신 | 이유 |
|---|---|---|
| Read(조회) | gRPC(내부), REST(외부) | 지연 최소화/범용 접근성 |
| Create/Update/Delete | MQ | 멱등/재시도/탄력성/확장성 |
| 복합 조회 | GraphQL 또는 Gateway 집계 | 다수 서비스 데이터의 단일 응답 |
| 방식 | 형태 | 속도 | 결합도 | 실시간성 | CRUD 적합성 | 주요 용도 |
|---|---|---|---|---|---|---|
| HTTP REST | 동기 | 중간 | 중간~높음 | 낮음 | Read(범용), 간단 CUD | 외부/범용 API, 인증 |
| gRPC | 동기 | 빠름 | 중간 | 중간(스트리밍) | Read(내부 고성능) | 내부 RPC 조회 |
| MQ | 비동기 | 빠름(버퍼링) | 낮음 | 낮음 | CUD(비동기 반영) | 이벤트 드리븐 처리 |
| GraphQL Federation | 동기 | 중간 | 중간 | 낮음 | Read(복합/집계) | 통합 조회 레이어 |
| WebSocket/SSE | 스트림 | 빠름 | 중간 | 높음 | 실시간 피드백 | 알림/대시보드 |
| 계층 | 통신 방식 | 비고 |
|---|---|---|
| Client ↔ Gateway | REST 또는 GraphQL | JWT 검증/속도 제한/로깅 |
| Gateway ↔ Auth | REST 또는 gRPC | 로그인/토큰 검증/유저 조회 |
| Gateway ↔ Event | REST | 출석/보상 API |
| Event ↔ Reward/Coupon | MQ(Kafka 등) | CUD 이벤트 비동기 반영 |
| Gateway ↔ Client(실시간) | WebSocket/SSE | 보상 달성 알림 |
graph TD
Client -->|HTTP/GraphQL| Gateway
Gateway -->|HTTP REST| AuthService
Gateway -->|HTTP REST| EventService
EventService -->|Kafka Topic (CUD)| RewardService
Gateway -->|WebSocket/SSE| Client
1) 단일 해법은 없다. 도메인 특성과 경험적 지표에 따라 혼합한다.
2) 동기(Read) / 비동기(CUD) 분할을 기본 축으로 삼으면 설계가 단순해진다.
3) 복합 조회가 많다면 GraphQL 또는 Gateway 집계 레이어로 데이터 통합을 제공한다.
4) 실시간 피드백이 중요하면 WebSocket/SSE를 보조로 도입한다.
5) 관측성(Tracing/Logging/Metrics)과 멱등성/재처리 전략을 초기부터 포함해 운영 복잡도를 낮춘다.