5. 트랜잭션 격리수준·락·MVCC, 동시성 이상현상

난이도 중 해설 보기 →
문제

문제 5 — 트랜잭션 격리수준·락·MVCC, 동시성 이상현상

면접 질문

  1. SQL 표준의 4가지 트랜잭션 격리수준(READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE)을 설명하고, 각 수준에서 허용/차단되는 동시성 이상현상(Dirty Read, Non-repeatable Read, Phantom Read)을 표로 정리해보세요.

  2. 비관적 락(pessimistic lock)과 낙관적 락(optimistic lock)의 차이를 설명하고, 각각 어떤 상황(경합 빈도, 트랜잭션 길이)에 적합한지 말해보세요. SELECT ... FOR UPDATE는 어느 쪽에 해당하나요?

  3. MVCC(Multi-Version Concurrency Control)가 무엇이며, "읽기가 쓰기를 막지 않는다"는 특성이 어떻게 가능한지 설명해보세요. MVCC 환경에서도 발생할 수 있는 문제(예: 쓰기 충돌, write skew)는 무엇인가요?

응용 시나리오

게임 내 거래소(auction house)를 만들고 있습니다. 동작은 다음과 같습니다.

  • 판매자가 아이템을 등록한다.
  • 구매자가 "구매하기"를 누르면 (1) 아이템이 아직 팔리지 않았는지 확인하고, (2) 구매자 골드를 차감하고, (3) 아이템 소유권을 옮기고, (4) 판매자에게 대금을 지급한다.
  • 인기 아이템은 동시에 여러 구매자가 같은 매물을 클릭한다.

(a) 격리수준이 너무 낮으면(예: READ COMMITTED) 이 거래에서 어떤 이상현상(예: 같은 매물이 두 명에게 팔리는 double-sell)이 가능한지, 구체적인 인터리빙(interleaving) 시나리오로 설명해보세요.

(b) 이 double-sell을 막기 위해 (1) 격리수준을 올리는 방법, (2) 비관적 락(SELECT ... FOR UPDATE)을 쓰는 방법, (3) 낙관적 락(version/조건부 UPDATE)을 쓰는 방법을 각각 어떻게 적용할지 설계하고, 거래소 특성상 어느 방법이 가장 적합한지 본인의 근거로 선택해보세요.

(c) 인기 매물 한 건에 구매 요청이 폭주할 때(핫 로우, hot row) 락 경합으로 처리량이 급락합니다. 이 핫스팟을 완화하기 위한 방법을 한 가지 이상 제시해보세요.

답안 작성
내 답안 · 자동 저장

직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.