Kafka Streams 기반 EDA 구축 사례: 올리브영 품절 시스템 현대화 프로젝트
올리브영이 Oracle 함수 직접 호출 방식을 OGG + AWS MSK + Kafka Streams 기반 EDA로 전환해 Oracle 함수 호출량을 86% 감소
AI 요약
Context
올리브영 온라인몰은 상품 품절 여부를 Oracle 함수 직접 호출로 조회하고 있었으나, 복잡한 내부 쿼리와 캐시 부재로 인해 응답 속도가 저하되고 데이터베이스에 지속적인 부하가 발생했다. 올영세일 같은 대규모 트래픽 상황에서 품절 정보 조회 지연이 심화되어 온라인몰 전체 서비스 품질에 영향을 주고 있었다.
Technical Solution
- Oracle GoldenGate(OGG)를 통한 변경 데이터 캡처(CDC): 상품 재고 변경을 실시간으로 감지하여 Kafka Topic으로 즉시 발행
- AWS MSK(Managed Streaming for Apache Kafka) 도입: Event-Driven Architecture의 메시지 브로커로 활용하여 DB 단일 의존성 제거
- Kafka Streams를 통한 실시간 스트림 처리: 재고 변경 이벤트 중 "모든 재고 소진" 또는 "재고 입고로 판매 재개" 상태 전환을 감지하여 SoldOut Topic으로 발행
- 처리된 품절 데이터를 OpenSearch에 저장: 기존 Oracle 함수 호출 대신 검색 조회 구조로 변경
- 상품 유형별 처리 분화: 직매입 상품은 Inventory Service에서 직접 발행, 위수탁/예약/한정 상품은 Kafka Streams로 처리
Impact
개선 전 일주일 동안 Oracle 함수 호출량은 2.34GB(약 2억 3천 4백만 건)에서 개선 후 237MB(약 2천 3백 7십만 건)로 감소하여 함수 호출량 86% 감소를 달성했다.
Key Takeaway
Batch 중심의 DB 직접 호출 구조에서 Event-Driven Architecture로 전환하면 단순히 성능 향상을 넘어 서비스 간 결합도 감소, 새로운 요구사항 대응의 유연성, 장애 영향도 격리를 동시에 확보할 수 있다. Kafka Streams DSL은 Consumer/Producer 로직을 단일 애플리케이션에 통합하여 구조 복잡도를 낮추면서도 실시간 스트림 처리를 간결하게 구현할 수 있는 핵심 도구다.
실천 포인트
데이터베이스에 집중된 단순 조회 작업(Oracle 함수 호출 등)이 고빈도·고트래픽인 서비스에서는 CDC + Kafka + 전용 저장소(OpenSearch 등) 구조로 전환하면 DB 부하를 70~90% 단계별로 감소시킬 수 있다. 특히 상품 유형별로 데이터 소유권이 다른 경우, 각 소유자가 독립적으로 이벤트를 발행하고 중앙의 Stream Processor가 통합 처리하는 구조를 설계하면 팀 간 의존성을 최소화하면서도 일관된 처리 로직을 유지할 수 있다.