← 목록으로

혼자 만든 웹 MMORPG에 사람이 10배 몰리자 벌어진 일

요약
  • 웹 MMORPG 개발자가 예상보다 많은 동시 접속자가 몰리자 서버 부하 문제를 해결하기 위해 기술적 최적화를 진행했습니다.
  • 버프 및 채팅 번역 처리 방식을 개선하고 네트워크 전송량을 줄였으며, 게임 콘텐츠를 조정하여 원활한 플레이 환경을 구축했습니다.

이전에는 월 $6 VPS 한 대로 MMORPG 동접 1,000명에 도전해봤습니다라는 글에서 봇 부하 테스트를 진행했습니다.

당시 부하테스트용 봇은 주기적으로 타깃을 잡고 스킬을 사용하고 전리품을 얻었습니다. 하지만 채팅은 하지 않았고, 유저가 성장하며 사용하는 고레벨 스킬도 충분히 재현하지 못했습니다.

실제 동시접속자는 평소 20~30명에서 최대 239명까지 늘었을 때 당시 봇 테스트에서는 보이지 않던 부하가 드러났습니다.

실제 유저가 늘며 생긴 부하

봇 테스트 이후에 추가된 몇가지 내용들이 문제로 판단되었습니다
고레벨 스킬들이 아래와 같은 불필요한 부하를 생성하고 있었습니다

  • 왕 직업의 광역 버프는 필드의 플레이어를 살펴 범위 안 아군에게 효과를 적용합니다.
  • 전투 깃발 효과: 공격 속도 20%, 이동 속도 10% 증가
  • 깃발 범위가 겹치면 같은 버프를 반복 확인하고 능력치를 다시 계산
  • 개선: 버프 효과를 틱 단위로 모아 처리하고, 이미 적용된 버프는 재계산하지 않도록 변경

채팅 번역도 봇 테스트가 놓친 부하였습니다.

  • 한국어·영어·일본어 채팅을 매 채팅 입력마다 LLM에 번역 요청
  • 변경 후: 원문은 즉시 표시하고, 번역은 5초마다 최대 10문장씩 묶어 요청

전투 이벤트와 네트워크 최적화

위 대응으로 약간 개선은 되었지만 렉은 계속해서 발생하였습니다.
분석하던 중 네트워크 송수신용 메모리의 할당과 회수가 반복되며 스왑 입출력이 늘어나는 문제를 확인했습니다.

vCPU 추가 할당과 CPU 부하를 늘리더라도 아래와 같은 추가 처리를 하여 네트워크 비용을 줄였습니다

  • 기존에 모아서 보내는 타격, 스킬 이벤트를 묶고 최대한 공통 메세지는 한번에 직렬화 하여 여러 접속자에게 재사용
  • 과감하게 일부 디테일 필드를 줄이고 압축을 적용하여 네트워크 전송량을 줄임

개선전 / 개선 후 100명이 전투 이벤트를 받는 로컬 테스트 결과입니다.

  • 단건 전송: 29.80MB/s, CPU 기준값 100
  • 이벤트 묶음: 28.23MB/s, CPU 22.5
  • 필드 제거·묶음·압축: 2.69MB/s, CPU 54.7

증설 후에도 남은 지연

vCPU 증설과 긴급 코드 배포 후 CPU 사용률은 낮아졌지만, 50ms 주기의 게임 틱이 1초 넘게 걸리는 현상은 남았습니다.

CPU steal이 30~66%까지 올라가는 것을 확인했습니다. 그날 밤 업체에 연락해서 물리 호스트를 옮긴 뒤에야 지연이 사라졌습니다.

게임 콘텐츠 조정

서버가 버티는 것만으로는 충분하지 않았습니다. 플레이어가 늘어난 규모에 맞춰 게임 콘텐츠도 조정했습니다.

  • 몬스터 스폰 수를 늘리고 사냥터 배치를 분산
  • 허무하게 죽는 레이드 보스 체력을 40%이상 대폭 상향
  • 보스 경험치나 골드 등 N으로 나누는 보상들을 인당으로 조정
그냥 목록으로
원문 보기 ↗