이전에는 월 $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으로 나누는 보상들을 인당으로 조정