2. DB 트랜잭션·ACID, 인덱스 기본, 게임 데이터 영속화

난이도 중 해설 보기 →
문제

문제 2 — DB 트랜잭션·ACID, 인덱스 기본, 게임 데이터 영속화

면접 질문

  1. 데이터베이스 트랜잭션의 ACID 4가지 속성을 각각 설명하고, 게임에서 "골드 차감 + 아이템 지급"을 한 트랜잭션으로 묶어야 하는 이유를 ACID와 연결해 설명해보세요.

  2. 인덱스(index)는 왜 조회를 빠르게 하나요? 인덱스를 무작정 많이 거는 것이 좋지 않은 이유는 무엇인가요? (읽기/쓰기 관점에서)

  3. 게임 데이터를 DB에 저장할 때 "즉시 저장(write-through, 매 변경마다 저장)"과 "주기적 저장(periodic/dirty flush)"의 차이를 설명하고, 각각 어떤 데이터에 적합한지 말해보세요.

응용 시나리오

MMORPG에서 플레이어 상태(좌표, HP, 경험치, 인벤토리, 골드)가 초당 여러 번 바뀝니다. 모든 변경을 즉시 DB에 쓰면 DB가 버티지 못합니다. 그래서 팀은 "플레이어 데이터를 메모리에 들고 있다가 30초마다 한 번씩 DB에 저장(주기적 저장)"하기로 했습니다.

(a) 이 방식의 명백한 위험은 무엇이며, 어떤 데이터는 이 방식으로 저장하면 절대 안 되는지 설명해보세요. (b) "유료 결제로 산 다이아몬드 1000개 지급"과 "사냥으로 얻은 경험치 +50"은 같은 저장 정책으로 다뤄야 할까요? 데이터의 성격에 따라 어떻게 정책을 나눌지 본인의 기준으로 설계해보세요. (c) 주기적 저장 중 서버가 크래시하면 데이터 손실이 발생합니다. 손실 위험을 줄이기 위한 방법을 트랜잭션·로그 관점에서 한 가지 이상 제시해보세요.

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

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