3. 캐시(Redis), 캐시 일관성, 비동기 영속화, 멱등성, 분산락

난이도 상 해설 보기 →
문제

문제 3 — 캐시(Redis), 캐시 일관성, 비동기 영속화, 멱등성, 분산락

면접 질문

  1. 게임 서버에서 Redis 같은 인메모리 캐시를 두는 이유는 무엇인가요? 대표적인 캐싱 패턴인 Look-Aside(Cache-Aside), Write-Through, Write-Behind(Write-Back)를 설명하고 캐시와 DB의 일관성 관점에서 비교해보세요.

  2. "멱등성(idempotency)"이 무엇이며, 결제/보상 지급 API에서 왜 중요한가요? 멱등성을 보장하기 위한 구체적 구현 방법을 한 가지 이상 설명해보세요.

  3. 분산 환경에서 여러 서버가 같은 자원(예: 한 플레이어의 인벤토리)을 동시에 수정하려 할 때 발생하는 문제와, 분산락(distributed lock)으로 이를 막는 방법을 설명해보세요. 분산락의 위험(예: 락 만료, 락 소유권)도 함께 언급해보세요.

응용 시나리오

이벤트 보상 지급 기능을 만들고 있습니다.

  • 클라이언트가 "출석 보상 받기" 버튼을 누르면 서버가 보상(다이아 100)을 지급한다.
  • 네트워크가 불안정해서 클라이언트가 같은 요청을 재전송(retry)하는 일이 잦다.
  • 서버는 여러 대(scale-out)이고, 플레이어 데이터는 Redis에 캐시되고 주기적으로 DB에 비동기 저장된다.

(a) 이 상황에서 그냥 "받기 요청 = 다이아 +100"으로 구현하면 어떤 사고가 나는지 설명하고, 멱등성을 어떻게 설계해 중복 지급을 막을지 본인의 방법으로 제시해보세요. (b) 보상 지급 시 Redis 캐시와 DB를 어떤 순서로 갱신할지(캐싱 패턴 선택)와, 그 선택의 일관성/손실 트레이드오프를 설명해보세요. (c) 같은 플레이어에 대해 두 서버가 동시에 보상 지급을 처리하려 할 때 분산락을 쓴다면 어떻게 적용하고, 락이 걸린 채 서버가 죽으면 어떻게 풀리도록 설계할지 설명해보세요.

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

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