이벤트 기반 데이터 동기화를 통한 서비스간 느슨한 결합 구현 및 API 성능 최적화
N+1 문제는 MSA (Microservices Architecture) 환경에서 특히 자주 발생하는 성능 문제입니다. 이는 여러 개의 마이크로서비스가 각각의 MySQL 데이터베이스와 연결될 때, 하나의 요청에 대해 N개의 추가 쿼리가 발생하는 상황을 의미합니다. 이 문제는 데이터베이스 연결 부하를 유발하고, 네트워크 지연을 증가시켜 시스템 성능을 크게 저하시킬 수 있습니다.
단계 | 설명 | 주요 주의사항 |
---|---|---|
1. 주문 요청 수신 | OrderService가 주문 DB 저장 | 재고 확인은 하지 않음 (비동기 처리) |
2. 이벤트 발행 | Kafka에 order.created 발행 |
중복 방지 키, 스키마 버전 관리 |
3. 재고 서비스 수신 | InventoryService가 이벤트 수신 | idempotency, partition key, 실패 시 대처 |
4. 재고 차감 | 수량 차감 후 저장 | 트랜잭션 보장, 재시도 가능성 |
5. 보상 처리 | 재고 부족 시 상태 전환 | Saga 설계, 사용자 알림, 로그 추적 |
1. 주문 요청이 들어온다 (Client → OrderService)
사용자가 상품을 장바구니에 담고 주문을 생성하면, OrderService
는 사용자가 요청한 상품 목록과 수량을 받아 주문 정보를 생성한다. 이때 주문은 재고 확인 없이 선주문(Pessimistic Lock 없이) 방식으로 처리된다.
⚠️ 구현 주의사항
status = CREATED
, not CONFIRMED
)