← 문제로

10. 질문 — 대규모 MMO/실시간 게임 아키텍처 (종합)

난이도 최상
내 답안
모범답안

모범답안 — 대규모 MMO/실시간 게임 아키텍처 (종합)

난이도: 최상

핵심 답변

대규모 MMO는 보통 **게이트웨이(접속/인증/라우팅) → 게임 로직(존/룸, 상태 보유) → 데이터(DB/캐시) → 지원 서비스(매치메이킹/채팅/랭킹/결제)**의 계층으로 나눈다. 무상태 계층(게이트웨이·지원)은 수평 확장이 쉽고, 상태가 무거운 게임 로직 계층은 존/샤딩/인스턴싱으로 분할한다. 핫스팟은 채널 복제·인스턴스 던전·AoI로 분산하고, 무중단은 **상태 스냅샷+재접속 복구, 롤링/블루-그린 배포, 데이터 이중화(복제·페일오버)**로 달성한다. 그리고 이 모든 걸 모니터링·메트릭·부하 테스트 없이는 운영할 수 없다.

깊이 있는 설명

계층 구조와 확장

  • 게이트웨이: TCP/UDP 종단, 인증, 세션→게임서버 라우팅, 패킷 검증·레이트리밋. 무상태에 가까워 LB로 수평 확장.
  • 게임 로직(존/룸): 시뮬레이션·상태 보유(stateful). "한 룸/존은 한 스레드/프로세스"로 shared-nothing. 확장은 존을 더 많은 서버로 분산(샤딩). 무거운 단일 공간은 채널/인스턴스로 복제.
  • 데이터: 권위 DB(샤딩) + 캐시(Redis, 읽기·세션·랭킹). 쓰기는 비동기 영속화·아웃박스, 캐시 일관성 관리.
  • 지원 서비스: 매치메이킹, 채팅, 랭킹, 우편, 결제 — 독립 서비스로 분리해 개별 확장·장애 격리.

핫스팟 분산

  • 증상: 한 존/보스에 인원 폭주 → 그 서버 CPU/대역폭/락 경합 폭발, 한 코어·한 룸 한계에 묶임.
  • 해법: 채널(같은 공간을 N개 사본으로, 인원 분산), 인스턴스 던전(파티별 독립 인스턴스), AoI/관심영역으로 동기화 대상 축소, 동적 부하에 따라 인스턴스 오토스케일.

무중단 운영

  • 장애복구: 게임서버가 죽으면 그 안의 룸/세션 상태 유실 → 주기적 스냅샷 + 재접속 복구 토큰, 또는 핫스탠바이/상태 외부화. 멱등 처리로 재처리 안전.
  • 무중단 배포: 롤링(서버를 조금씩 교체, 드레이닝으로 기존 세션 보호), 블루-그린(신버전 풀을 띄우고 트래픽 전환). 프로토콜 버전 호환(expand/contract)으로 클라-서버 버전 불일치 흡수.
  • 이중화: DB 동기/비동기 복제 + 자동 페일오버(리더 선출), 멀티 AZ 배치.

운영 필수 요소

  • 메트릭: CCU, 틱 시간, 지연 분포(p50/p99), 큐 길이, GC/메모리, 에러율 → 이상 조기 감지.
  • 로깅/추적: 구조화 로그 + 분산 추적(요청 흐름), 사기·버그 분석을 위한 이벤트 로그.
  • 알림/대시보드: SLO 기반 경보.
  • 부하 테스트: 출시 전 목표 CCU의 봇 부하로 병목·한계 파악(출시 후 발견은 너무 늦다).

응용/실무 연결

  • 로비/매치메이킹: 무상태 → 컨테이너 오토스케일.
  • 필드/존: 샤딩 + 채널, 존 경계 이동은 핸드오프 프로토콜(split-brain 방지 펜싱).
  • 글로벌 서비스: 리전별 배치 + 지연 기반 라우팅.

흔한 오답·함정

  • "수평 확장하면 다 해결" — 상태성·존 경계 통신·데이터 일관성 비용이 새로 생긴다.
  • 단일 거대 월드 서버 → 핫스팟에 무방비. 처음부터 분할 가능하게 설계.
  • 모니터링·부하 테스트를 출시 후로 미룸 → 장애를 유저가 먼저 발견.
  • 배포 시 프로토콜 호환 무시 → 롤링 중 구·신 버전이 공존하며 깨짐.

꼬리질문 대비

  • Q. 존 경계를 넘는 이동(핸드오프)에서 가장 위험한 건? split-brain — 두 서버가 같은 플레이어를 동시에 활성화. 펜싱 토큰/단일 권위로 막는다.
  • Q. 채널과 인스턴스의 차이? 채널은 같은 영속 공간의 병렬 사본(인원 분산), 인스턴스는 파티 전용 일회성 공간.
  • Q. p99 지연이 왜 중요? 평균이 좋아도 1%가 끔찍하면 그 유저들이 이탈. 꼬리 지연이 체감 품질을 좌우.