분산 환경 동시성 문제 해결 경험 - 락과 메시지 큐 방식 서술
인턴 때 여러 서비스가 동일한 DB 레코드를 동시에 업데이트하면서 데이터 불일치가 생기는 문제를 담당했습니다. 같은 재고 수량을 두 요청이 거의 동시에 읽고 각자 감소 연산을 한 뒤 저장하면, 하나의 차감이 무시되는 Lost Update 패턴이었습니다. 첫 접근은 Optimistic Locking이었습니다. 레코드에 version 컬럼을 추가하고, 업데이트 시 읽은 시점의 version과 현재 version이 같을 때만 반영하도록 조건을 걸었습니다. 충돌이 잦지 않은 경우에 효율적이었지만, 트래픽이 몰리면 재시도가 반복되는 문제가 있었습니다. 그래서 메시지 큐(Kafka)로 요청을 순차 처리하는 구조로 전환했습니다. 재고 차감 이벤트를 큐에 쌓고 소비자가 하나씩 처리하니, 동시성 충돌 자체가 없어졌습니다. 처리 지연은 늘었지만 정확성이 보장되는 쪽이 이 도메인에서 더 중요한 요구사항이었습니다. 동시성 문제는 단일 해법이 없고, 트레이드오프를 파악한 후 도메인 요구에 맞는 선택을 해야 한다는 걸 배웠습니다.