[28일차] | 대규모 시스템 설계 기초2 | 책너두

Heechan Kang·2025년 2월 4일
0
post-thumbnail

동시성 문제

  • 아래와 같은 이중 예약을 방지해야한다.
    • 한명의 사용자가 예약 버튼을 두 번 이상 누르는 경우
    • 두 명의 사용자가 동시에 같은 객실을 예약하는 경우

첫번째 시나리오: 한명의 사용자가 예약 버튼을 두 번 이상 누르는 경우

  • 클라이언트측 구현

    • 사용자가 예약 버튼을 누르면 버튼을 비활성화하고, 예약 요청을 보낸다.
    • 간단하지만 우회가 가능하므로 완전한 해결책이 아니다.
  • 멱등 API 사용

    • 예약 요청에 멱등 기를 추가하여 중복 예약을 방지한다.
    • 이를 통해 중복 예약을 확인하고 이를 처리하지 않는다.
    • 예시
      • 예약을 확정하기 전에 예약 주문서를 발급
      • 예약 주문서의 id를 클라이언트에 반환
      • 클라이언트는 예약 주문서의 id를 저장하고, 예약 요청 시 이를 포함
      • 서버는 예약 주문서의 id를 확인하여 중복 예약인 경우 예약을 처리하지 않음

❗ 멱등성과 멱등 API

멱등성(Idempotence)은 연산을 여러 번 적용해도 결과가 달라지지 않는 성질을 의미한다.
멱등 API는 이러한 멱등성을 가지는 API를 의미한다.

일반적으로 주요 method별 멱등성은 아래와 같다.

  • GET: 멱등
  • POST: 멱등하지 않음
  • PUT: 멱등
  • PATCH: 멱등하지 않음
  • DELETE: 멱등

이는 method의 의미적인 요소일 뿐, 가능하다면 실제 구현은 멱등하게 구현하는 것이 좋다.

두번째 시나리오: 두 명의 사용자가 동시에 같은 객실을 예약하는 경우

  • 예약 가능한 객실이 1개인 상황에서, A가 예약을 진행중에 B가 같은 객실을 예약하는 경우
  • 이러한 문제를 막기 위해서는 어떻게든 락을 사용해야 한다.
  • 락을 사용하는 방법은 아래와 같다.
    • 비관적 락
    • 낙관적 락
    • 데이터베이스 제약 조건
profile
안녕하세요!

0개의 댓글