Redis 캐싱부터 Kafka 이벤트 하이브리드까지, 데이터 성격에 맞춘 최적의 연동 아키텍처 설계기
올리브영의 O2O 핵심 서비스인 '올영매장'이 분산된 MSA 환경에서 데이터 정합성과 성능을 모두 잡은 과정을 소개한다. 데이터의 변경 주기와 생명 주기를 분석하여 캐시와 이벤트 기반 아키텍처를 적재적소에 배치한 실무 인사이트를 제공한다.
MSA 구조에서 API 간 의존성으로 인해 성능 저하를 겪고 있거나, 대규모 트래픽 환경에서 실시간 데이터 동기화가 필요한 백엔드 엔지니어에게 강력히 추천한다.
올리브영의 MSA 환경에서 매장, 프로모션, 주문 등 서로 다른 스쿼드가 관리하는 도메인 데이터를 통합하여 고객에게 제공해야 하는 과제가 있었다. 단순 API 호출 방식은 데이터 변경 빈도나 사용처를 고려하지 않을 경우 서버 리소스 낭비와 응답 지연을 초래할 위험이 존재했다.
데이터 특성에 따라 두 가지 연동 전략을 수립했다. 변경이 적은 프로모션 데이터에는 Redis 기반의 Cache-Aside 패턴을 적용하여 API 부하를 줄였으며, 실시간성이 중요한 픽업 주문 데이터에는 Kafka Event Notification과 Redis 키 필터링을 결합하여 필요한 경우에만 API를 호출하는 하이브리드 방식을 도입했다.
데이터 제공 서버의 부담을 최소화하면서도 트래픽 집중 시 안정적인 성능을 확보했다. 특히 픽업 주문 연동의 경우 Kafka와 Redis를 활용해 불필요한 API 호출을 차단하고, 주문 상태가 변경된 고객에게만 최신 데이터를 실시간으로 제공할 수 있게 되었다.
Trade-off
본문에 구체적인 수치는 언급되지 않았으나, Kafka 이벤트 수신과 Redis 필터링이 결합된 하이브리드 구조를 도입함으로써 단순 API 호출 대비 시스템 구성 요소 간의 복잡도가 증가하고 운영 관점에서의 모니터링 포인트가 늘어났을 것으로 판단된다.
애플리케이션이 캐시를 우선 조회하고, 데이터가 없을 때만 원본 저장소에서 데이터를 가져와 다시 캐싱하는 전략이다.
상태 변경 발생 시 전체 데이터가 아닌 최소한의 정보(식별자 등)만 이벤트로 발행하여 소비자에게 알리는 방식이다.
특정 이벤트가 발생한 대상의 키만 Redis에 저장하고, 해당 키가 존재하는 요청에 대해서만 선택적으로 로직을 수행하는 필터링 기법이다.