Skip to content

[Concern] 숙소 날짜 예약 시의 동시성 문제 해결 방법 결정

시원 edited this page Jan 25, 2025 · 4 revisions

✨ 배경

예약을 위한 숙소별 날짜 상태를 변경하는 API에 관련해서 분산 환경에서는 다수의 사용자가 동시에 동일한 날짜를 예약하려고 시도할 경우, 데이터 무결성이 깨지거나 상태가 비정상적으로 처리되는 동시성 문제가 발생할 가능성이 있다는 생각이 들었다.

문제 발생 상황 예시

  1. 사용자 A와 사용자 B가 동일한 날짜를 포함해 예약하기 위해 동시에 요청을 보냄
  2. 두 요청이 각기 다른 애플리케이션 인스턴스에서 처리되면서 동일한 날짜에 대한 상태 변경이 동시에 진행
  3. 데이터베이스에서 상태가 중복 예약 또는 비정상 상태로 저장될 가능성이 존재

✨ 사용할 수 있는 기술 검토

✨ 결정

여러 해결 방법을 비교한 결과, Redisson을 사용한 분산 락을 적용하기로 결정하였다.

카프카를 사용하는 경우 비동기 처리여서 해당 로직과 맞지 않다고 생각했다. 예약 로직이 예약 서비스에서 요청이 오면 숙소 쪽에서 바로 응답이 필요하기 때문에 맞지 않다고 생각했다.

또 LuaScript보다 관리와 구현이 용이하다고 생각했기 때문에 분산 락을 사용해 문제를 해결했다.

✨ 테스트

테스트 코드를 작성하여 다중 스레드 환경에서 정상적으로 처리가 이뤄지는지 확인하였다.

Clone this wiki locally