대규모 이벤트 트래픽을 큐로 분리하고 수평 확장으로 대응한 설계 경험
졸업 프로젝트로 한정판 상품 선착순 구매 기능을 만들 때, 오픈 1분 만에 3,000명이 몰리는 시나리오를 시뮬레이션했습니다. 처음엔 요청을 바로 DB에 써서 재고를 차감했는데, 동시성 문제로 재고가 음수가 되거나 중복 구매가 발생했습니다.
이후 메시지 큐를 앞에 두고 처리 순서를 직렬화하는 방식으로 바꿨습니다. 요청은 큐에 쌓이고, 소비자가 순서대로 재고를 확인·차감하니 중복 구매가 사라졌습니다. 큐의 처리 속도가 병목이 되어 소비자 인스턴스를 수평으로 늘리는 방법도 실험했습니다.
실패했던 부분은 큐가 가득 찰 때의 폴백 전략을 미리 짜지 않아 큐 오버플로 시 요청이 그냥 버려진 것입니다. 덕분에 선착순 이벤트에서는 수용 가능한 최대치를 미리 정하고 초과 요청엔 즉시 거절 응답을 주는 설계가 더 나을 수 있다는 걸 배웠습니다.