📖 배경
하나의 호텔에는 다양한 공급사(예: 익스피디아, 트립닷컴 등)에서 제공하는 객실 정보가 존재
사용자에게 동일한 객실 정보가 중복 표시되지 않고,
하나의 룸 그룹으로 묶여 정리된 형태로 제공
되어야 함
예시: “킹 디럭스”라는 마스터 룸 그룹 아래에 각 공급사의 개별 요금이 매핑되는 방식
❗ 요구되는 시스템 특성
룸 그룹핑 결과는 "최종 진실"이어야 함
최종적으로 사용자에게 보여질 룸 그룹핑 정보는
항상
일관되며 정확한 단 하나의 상태
여야 함
병렬로 유입된 여러 작업 중 잘못된 업데이트가 반영될 경우
사용자의 UX 및 신뢰도에 직접적인 영향을 미침
따라서 작업 효율성보다
결과 정합성과 일관성 유지가 핵심 가치
🧭 판단
항목
Redis 락
낙관적 락
정합성
강함 (하나만 수행)
중간 (조건 update + 재시도)
성능
특정 시뮬 지연에 한정 → 병목 적음
일반적 상황에서 빠름
복잡도
락 유틸 구성 필요
Mongo 자체 기능으로 단순
UX 신뢰성
실패 fallback → 데이터 구 버전 가능
최종 업데이트된 정보 제공 가능
재시도 전략
없음 (단일 시도)
가능 (재시도 제한 가능)
현재 작업은 단일 호출 시 8개의 시뮬레이션이 병렬로 실행되며, 이 동작이
외부에서 여러 번 유입
될 수 있음
이런 구조에서는 낙관적 락(version)의 경우 충돌 발생 시 재시도 비용 및 실패 확률 증가
환경적 특성(Armeria, Dagger, 비동기)으로 인해 트랜잭션 적용은 복잡성과 리소스 측면에서 비효율적이라고 판단하여 제외
Redis 기반의 호텔 단위 락
을 통해 단 하나의 update 작업만 수행되도록 제어하는 것이 정합성 확보에 가장 적합
🧩 고민한 점