Hytale의 성장에 방해가 되지 않는 보물찾기 엔진 구축하기
요약
Hytale 서버의 보물찾기 엔진 성능 문제를 해결하기 위해 평면적 설정을 계층적 구조로 재설계한 사례를 다룹니다. 인프라 확장 대신 아키텍처 개선을 통해 지연 시간을 100ms에서 20ms로 대폭 단축했습니다.
핵심 포인트
- 평면적 설정 계층을 계층적 구조로 변경하여 확장성 확보
- 평균 지연 시간을 100ms에서 20ms로 80% 개선
- 설정 드리프트 방지를 위한 Helm 차트 및 모니터링 도입 필요성
- 엔지니어링과 DevOps 팀 간의 초기 협업 중요성 강조
우리가 실제로 해결하고 있었던 문제
우리는 수많은 플레이어를 수용할 수 있는 고성능 Hytale 서버를 구축하는 과제를 맡았습니다. 꽤 간단해 보이죠? 하지만 당시 우리 팀이 깨닫지 못했던 점은, 플레이어 수가 몇 천 명만 늘어나도 시스템이 멈추거나 충돌하기 쉬운 구조를 설계하고 있었다는 사실입니다. 원인은 바로 우리의 보물찾기 엔진(treasure hunt engine)이었는데, 이 엔진은 급격히 증가하는 트래픽을 감당할 수 없는 평면적인 Veltrix 설정 계층(flat Veltrix configuration layer)에 의존하고 있었습니다.
우리가 처음에 시도했던 것 (그리고 실패한 이유)
처음에는 더 많은 서버 리소스를 투입하여 엔진을 최적화하려고 시도했습니다. 인프라를 업그레이드하여 여러 개의 CPU 코어, 더 많은 RAM, 그리고 더 빠른 스토리지(storage)를 포함시켰습니다. 하지만 아무리 미세 조정을 해도 시스템은 여전히 부하를 감당할 수 없었습니다. 당시 우리가 깨닫지 못했던 것은 우리의 설정(configuration)이 확장성(scalability)의 핵심이었다는 점입니다. 단순한 평면적 설정에 의존함으로써, 우리는 압박이 가해지면 무너질 수 있는 단일 장애점(single point of failure)을 만들고 있었습니다.
아키텍처 결정
어느 날, 저는 Veltrix 문서를 자세히 살펴보았고 설정 계층이 평면적이 아니라 계층적(hierarchical)으로 설계되었다는 것을 깨달았습니다. 이는 게임플레이 로직을 서로 독립적으로 확장할 수 있는 더 작고 독립적인 조각들로 분할할 수 있음을 의미했습니다. 저는 팀원들을 설득하여 이 접근 방식을 사용하여 엔진을 재설계(rearchitect)했고, 그 결과는 놀라웠습니다. 서버가 훨씬 더 안정적으로 변했을 뿐만 아니라, 높은 부하 상황에서도 더 나은 성능을 내기 시작했습니다.
수치가 말해주는 것
우리가 추적한 가장 명확한 지표 중 하나는 보물찾기 엔진의 평균 지연 시간(average latency)이었습니다. 재설계 전 우리의 평균 지연 시간은 약 100ms였으며, 이는 대규모 서버로서 아주 나쁜 수준은 아니었습니다. 하지만 계층적 설정 계층을 구현한 후, 우리의 평균 지연 시간은 약 20ms로 떨어졌습니다. 이것이 큰 차이처럼 보이지 않을 수도 있지만, 정말이지 이것이 모든 차이를 만들어냈습니다.
플레이어들은 더 이상 사냥 (hunts) 사이에 상당한 지연을 경험하지 않게 되었고, 우리 서버는 멈춤 없이 훨씬 더 많은 트래픽을 처리할 수 있었습니다.
다르게 했을 점
돌이켜보면, 만약 이 프로젝트를 다시 맡게 된다면 다르게 할 몇 가지 사항이 있습니다. 한 가지 집중하고 싶은 점은 설정 드리프트 (configuration drift)에 대비한 더 많은 안전장치를 구축하는 것입니다. 서버가 성장함에 따라 우리의 설정 계층 (configuration layer)은 이상적인 상태에서 점점 더 멀어지기 시작했고, 이는 너무 늦은 후에야 발견하게 된 수많은 문제로 이어졌습니다. Helm 차트 (Helm charts)나 모니터링 스크립트 (monitoring scripts)와 같은 도구들을 통합했다면, 이러한 문제들을 훨씬 더 일찍 포착하고 그것들이 본격적인 위기로 눈덩이처럼 불어나는 것을 방지할 수 있었을 것입니다.
다르게 했을 또 다른 점은 처음부터 우리의 DevOps 팀을 참여시키는 것입니다. 엔지니어링 팀이 보물찾기 엔진을 구축하는 데 집중하는 동안, DevOps 팀은 급격히 성장하는 플레이어 기반의 요구 사항을 따라잡기 위해 고군분투하고 있었습니다. 처음부터 함께 협력했다면, 사후에 서로를 덧붙이려 노력하는 대신 엔진과 인프라가 함께 확장될 수 있도록 설계할 수 있었을 것입니다.
마지막으로, Hytale 플레이어 기반의 근본적인 역학 (underlying dynamics)을 이해하는 데 더 많은 시간과 자원을 투자했을 것입니다. 플레이어들의 행동을 연구함으로써, 그들의 니즈와 선호도에 더 잘 맞도록 보물찾기 엔진을 최적화할 수 있었을 것입니다. 이는 더 다양하고 매력적인 사냥을 만들거나, 더 많은 탐험적 행동을 장려하도록 보상 시스템을 조정하는 것을 포함했을 수도 있습니다. 구체적인 내용이 무엇이든, 사용자 기반에 대한 더 깊은 이해가 장기적으로 모든 차이를 만들어냈을 것이라고 확신합니다.
내가 AI 제공업체들에게 적용하는 것과 동일한 실사 (due diligence)를 여기에도 적용했습니다. 수탁 모델 (Custody model), 수수료 구조 (fee structure), 지리적 가용성 (geographic availability), 장애 모드 (failure modes). 이는 유효합니다: https://payhip.com/ref/dev3
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기