목록 보기
주문 트래픽 20배를 견디는 재고 처리 구조 만들기
백엔드

주문 트래픽 20배를 견디는 재고 처리 구조 만들기

아임웹
아임웹
2026년 4월 8일

두줄요약

공동구매 트래픽 폭증으로 재고 처리의 lock 경합이 병목이 되자 Redis와 Kafka 중심으로 구조를 재설계했습니다. 재고 경로를 단일화하고 비동기 반영과 fallback을 더해 약 20배 트래픽을 안정적으로 견뎠습니다.

문제 상황

  • 공동구매처럼 짧은 시간에 트래픽이 몰릴 때 재고 처리 구간의 lock 경합으로 slow query, timeout, 500 에러가 반복 발생
  • 트랜잭션 내 재고 row 직접 갱신 구조 때문에 먼저 들어온 요청이 lock을 잡고 뒤 요청이 대기하며 DB 프로세스가 적체
  • DBA가 실시간으로 slow query를 모니터링하고 오래 잡은 쿼리를 직접 kill해야 하는 운영 부담 발생

원인 분석

  • 느린 쿼리의 본질이 실행 시간보다 row lock 대기 시간 증가에 있었음
  • 재고 변경 경로가 주문, 상품, 어드민, OPEN-API, 배치 등 여러 곳에 흩어져 병목과 복구 지점이 복잡해짐
  • 순간 TPS 상승 시 같은 옵션 재고를 갱신하려는 요청이 한 지점에 집중되는 구조적 경쟁 상태

해결 방법

  • 재고 변경 경로를 상품 도메인 한 곳으로 단일화해 재고 관리 지점을 통합
  • hot path를 Redis 중심으로 짧게 만들고 분산 락으로 동시성을 제어
  • 재고 변경 이벤트를 Kafka로 비동기 발행하고 consumer가 DB 반영과 Redis TTL 갱신을 처리
  • 메시지 실패 시 retry 후 fallback으로 DB 직접 변경하는 안전장치 구성

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...