추억의 게임, 메이플스토리
다들 메이플스토리라는 게임은 들어보셨을 겁니다. 아마도 이 글을 읽고 계실 코드 부원님들과 나이가 비슷할 정도로 오래된 게임입니다. 게임치고 나이를 먹었지만 지금도 매니아층을 비롯하여 준수한 인기를 누리고 있습니다. 나이가 많다는 것은 살아남았다는 것! 이는 훌륭한 개발진들의 공이 크겠죠. 메이플 개발자들은 어떤 일을 하고 어떤 시스템으로 운영하고 있을까요? 저는 이번 5분 스피치 활동을 계기로, 흥미로운 메이플 개발진들의 이야기가 담긴 'Maple Us'를 살펴보았습니다. 일반 메이플 유저를 대상의 블로그이기 때문에, 복잡한 개발일지 형식은 아니며 누구나 쉽게 접근할 수 있는 분위기입니다.
다양한 이야기
Maple Us에서는 'People', 'Culture', 'Tech'총 세가지 종류의 게시물을 업로드하고 있습니다. 'People'에서는 개발자 인터뷰나 게임소식에 관한 컨텐츠를 주로 업로드 하고, 'Culure'에서는 개발자들의 사내 문화, 일상들을 보여줍니다. 'Tech'는 메이플스토리를 운영하는 데에 기술을 간단히 설명해줍니다.
Maple DBA소개
'Tech' 글 중 눈에 띄는 글이 하나 있었습니다. 바로 DBA(Data Base Administrator)관련 글이었는데요. 복잡한 설명 없이 12년차 베테랑 DBA 의 인터뷰를 기반으로 작성된 글이었습니다. 간단히 DBA가 하는 일과, 그 몇가지 간단한 예시를 들어주었습니다.
메이플스토리라는 대규모 게임을 운영하다보면 통계자료나 데이터를 다룰 일이 많습니다. 모니터링 시스템 구축, 혹은 주요 업데이트를 하는 등 게임을 개선하는 근거가 되기 때문입니다. 위 그림은 DBA가 일을 처리하는 구조를 그림으로 나타내어 본 것입니다. 통계자료나 데이터 수정을 요청받으면, DBA가 그 세부내용을 파악한 뒤 업무 개요를 생각합니다. 쿼리 작성, 데이터 가공 등의 업무영역을 나눈 뒤, 필요인력 등을 계산하여 이를 할당합니다. 이는 절대 쉬운 일이 아닙니다. 위 글을 작성한 12년차 메이플 DBA 최승희님의 말씀을 인용하자면, "데이터가 많아도 너무 많다"라고 했습니다. 간단히 상상해보아도 그 규모가 짐작이 갈 것입니다. 게임 내에는 수많은 오브젝트들이 존재하고, 유저의 플레이로 생긴 변수들이 얽히며 데이터의 양은 지금도 기하급수적으로 축적되고 있습니다. 이에 최승희님은 메이플 DBA가 갖추어야 할 중요한 역량으로 꼼꼼함과 프로그래밍능력을 비롯하여 '메이플을 좋아하는 마음'을 꼽으셨습니다.
메이플 모니터링 시스템
게임테크분야 내에서 DBA는 거의 모든 곳의 핵심이 됩니다. 통계작업은 물론 각종 시스템 구축에 기여합니다. 그 시스템 중에서 대표적으로 '모니터링 시스템'이 있습니다. 왜 모니터링 시스템이 필요할까요? '핵'과 같은 비인가 프로그램 사용이나 기타 비정상행위를 효과적으로 타개하기 위해서는, 행위와 제재 사이의 시간간격이 매우 중요하기 때문입니다. 즉각적인 제재 행위가 유저들에게 경각심을 심어줄 수 있고, 추가 피해를 막기 위함입니다.
위 그림은 모니터링 시스템의 과정을 나타낸 것입니다. 총 세 단계로 구분됩니다. 첫째, 로그작업에서 게임 내 현상을 로그화하여 DB에 저장합니다. 둘째, 분석작업에서 이 로그들을 가공하여 분석틀로 특정 알고리즘을 거쳐 유의미한 정보를 추출합니다. 셋째, 이 정보들을 관리자나 경보 웹페이지에 효과적으로 알릴 수 있도록 사용자 친화적인 인터페이스를 구축하는 일입니다.
(1) 로그 작업
메이플스토리에서 사용되는 메소를 관리하는 로그 시스템을 예로 들어 설명 해보겠습니다. 메소가 부적절하게 사용되는 것을 감지하기 위해서는 메소가 어떠한 경로로 유입되고 유출되는지 파악하는 것이 핵심입니다. 이를 위해, 로그에는 사용자의 정보, 발생 경로, 그리고 메소의 양 등이 기록됩니다. 하지만 모든 거래에 대해 로그를 남기면 서버에 과부하가 걸릴 수 있으므로, 서버는 데이터를 일정 기간 동안 모아 캐싱(Cashing)한 후에 로그를 남기는 방식으로 설계되었습니다.
메소의 변동이 있을 때마다 로그를 남기지 않고, 메소의 증가나 감소를 처리하는 단일 함수를 사용하여 로그를 기록함으로써, 새로운 거래 경로가 생겼을 때 로그의 누락을 방지합니다. 이 함수는 메소의 경로 정보를 필수 인자로 받으며, 로그 모니터링 시 사용되지 않는 기본값 인자를 감지하면 관리자에게 경보를 보내도록 설정하여 경로 정보가 항상 기록되도록 합니다.
로깅 시스템에서 중요한 또 다른 점은 로그의 신뢰도을 지속적으로 확인하는 것입니다. 만약 로그가 누락되어 분석 결과가 헛되게 된다면 문제가 생길 수 있기 때문에, 로그에 나타난 변화량과 데이터베이스(DB)에 실제로 기록된 변화량을 상시로 대조하여 오류를 체크합니다. 이렇게 함으로써, 메소 거래의 감시를 위한 로그의 신뢰도를 보장할 수 있습니다.
(2) 분석 작업
로그 데이터에 오류가 없을 경우 분석 작업을 진행할 수 있습니다. 이때 중요한 것은 데이터 처리의 속도인데, 이는 가공된 데이터를 신속하게 검색하고 활용할 수 있게 만드는 것을 의미합니다. 실시간 서비스 중인 시스템의 로그를 처리할 때는 시스템에 부담을 주지 않는 것이 중요합니다. 이를 위해 로그를 설계할 때부터 데이터 가공을 염두에 두어야 하며, 적절한 인덱싱과 데이터 캐싱 등을 통해 테이블의 행(row) 수를 간소화해야 합니다.
가공된 데이터는 분석 후 별도의 데이터베이스에 저장되며, 이는 관리자가 조건에 맞게 빠르게 정보를 검색할 수 있도록 해줍니다. 모니터링 중에는 한 번이 아닌, 다양한 조건으로 여러 번에 걸쳐 데이터를 조회해야 하기 때문에, 조회 속도가 느리면 관리자의 작업 효율성이 크게 떨어집니다. 만약 한 번 조회할 때마다 1초 이상의 시간이 걸린다면, 관리자가 기다리다 지치는 일이 생길 수 있습니다. 따라서 속도가 매우 중요합니다.
(3) UI 작업
데이터 분석을 완료했다면, 이제 가공된 데이터와 비정상 데이터에 대해 관리자에게 알리는 기능을 개발해야 합니다. 메이플스토리의 경우 1) 메일 발송과 2) 이상 감지 웹페이지를 통한 조회, 두 가지 방식으로 관리자에게 노티를 하고 있습니다. 그래프와 표 등을 이용하여 UI를 구성하고 있으며, 그래프의 경우 전체적인 흐름 추적을 위해서 사용하고, 표의 경우에는 세부적인 수치 정보나 이상 유저 또는 특이 유저 노티를 위해 사용합니다.
그래서 뭘 잡아냈는가 ?
메소 모니터링 시스템을 통해 운영진 측에서 포착한 특정 사례를 소개하겠습니다. 예를 들어, NPC 상점을 통한 메소 획득량이 급증한 사례가 있었습니다. 이벤트나 다른 콘텐츠로 인한 상승이 아니었기에, 관련 유저들의 아이템 입수 로그를 면밀히 조사하였고 덕분에 비정상적인 프로그램의 사용을 확인하였습니다. 이를 통해 해당 유저들이 아이템을 대량으로 획득하고 이를 NPC 상점에 판매해 메소를 취득하는 패턴을 파악하고, 즉각적인 조치를 취할 수 있었습니다.
또 다른 사례로는 서버 모니터링을 통해 메모리 누수를 발견한 경우가 있습니다. VM과 메모리 지표가 지속적으로 증가하는 현상을 포착하고, 이에 대한 조사를 통해 Object Counter 지표를 활용하여 특정 NPC Object의 문제를 식별했습니다. 해당 NPC가 퀘스트 수행마다 새로운 메모리 할당을 생성하고 해제하지 않는 문제를 발견하고 이를 신속하게 해결할 수 있었습니다.
그렇다고 모든 사례가 긍정적인 결과인 것은 아닙니다. 예를 들어, 2021년 1월에, 루나 크리스탈이라는 특정 아이템을 사용했을 때 특정 펫이 나오지 않는 이슈가 있었습니다. 이는 중요한 확률 아이템에 대한 모니터링 시스템이 있었음에도 불구하고, 하루치 데이터를 기반으로 한 검증 과정에서 인지가 늦어진 경우였습니다. 이후 개발자 측에서는 패치나 출시일에 더 짧은 주기로 데이터를 검증하도록 모니터링 시스템을 보완하여 더욱 신속히 이슈를 포착하려 노력하고 있습니다.
방대한 모니터링의 세계
앞서 메소를 활용한 예시를 들어 시스템 모니터링의 개념을 설명드렸지만, 실제로는 이보다 훨씬 다양한 시스템에서 비슷한 모니터링 작업이 이뤄지고 있습니다. 예를들어 서버 성능 모니터링 측면에서는 렉을 초래할 수 있는 다양한 요소들을 지속적으로 감시하고 있습니다. 이는 기본적인 서버 장비의 CPU 사용량이나 가상 메모리 수치 등을 포함하여, 메이플스토리 서버 운영에 필수적인 서버 지표들을 종합적으로 모니터링하는 것을 말합니다. 실제로 모니터링하는 정보는 이 글에서 소개된 몇 가지에 그치지 않고 훨씬 더 많습니다.
마치며
비록 얕은 내용이고 수준높은 지식을 쌓지는 않았지만, 운영진들이 얼마나 최선을 다하고 있는지 알아보는 시간을 가질 수 있어 꽤나 뜻깊은 시간이었던 것 같습니다. 초등학생 때 해킹이나 버그 등 메이플에 문제가 생기면 무작정 운영진을 탓하기 바빴습니다. 하지만 다시 생각해보면 게임이 말썽일 때 더 마음 아픈 쪽은 개발자분들과 운영진이었을 것입니다. 어느 게임이나 어느 기업이나 어느 사람이나 마찬가지입니다. 10년이 지나서 그 마음을 조금이나마 이해한 듯 합니다.
힘써주시는 개발자분들 존경합니다!!
긴 글 읽어주셔서 감사합니다.
'Study > 개발자 블로그' 카테고리의 다른 글
[개발자 블로그 탐독] Factorization Machine 모델로 아이템 추천하기! (2) | 2023.12.21 |
---|---|
[개발자 블로그 탐독] 배달의 민족 - MLOps를 활용한 AI서비스 (0) | 2023.12.06 |
[개발자 블로그 탐독] 뷰티 필터를 개발하며 얻은 새로운 경험 (1) | 2023.12.05 |
[개발자 블로그 탐독] 리멤버 앱의 AI 명함 촬영 인식 기능 - 리오(RIO) (1) | 2023.12.05 |
카카오 AI추천 : 토픽 모델링과 MAB를 이용한 카카오 개인화 추천 (2) | 2023.12.05 |