yuchi's Development Home
글 수 201
4월 10일 사내에서 175명의 직원들을 상대로 개발중인 게임을 공개했다.
동영상이나 pt자료는 공개한 적이 있었지만, 플레이 가능한 바이너리를 공개하긴 처음이었다.
여지껏 MMORPG에서 TPS(혹은 FPS)스타일의 전투를 도입한 사례는 없었다.
주변의 우려와 스스로의 불안감에도 불구하고 TPS전투 MMORPG를 표방하며 2007년 8월에 프로젝트를 시작했다.
사실 지금껏 한 순간도 우려하지 않았던 적은 없었다. 계산상으로는 가능해보였다. 허나 돌려보기 전에는 모르는 일.
이번 테스트는 그 돌려보기 전에는 모르는 일의 첫 관문이다.
다수의 인원이 접속했을때 TPS스타일의 전투가 가능할지를 검증해보는 테스트였다.
이 프로젝트를 시작하면서 가장 우려했던 기술적 리스크는 다음과 같다.
1.서버에서의 3D 충돌체크, 기준 시간(대략 10ms) 안에 서버가 1000명도분의 충돌처리를 할 수 있을것인가?
2.마우스를 흔들고 키보드를 마구 눌러대는 입력을 모두 처리해주면서 패킷량을 일정 수준 이하로 유지할 수 있을 것인가?
실제 이 게임을 플레이할 사람들, 지금 당장은 사내 테스트에 함여해줄 같은 회사 직원들의 반응이 전혀 궁금하지 않았던 것은 아니다. 그래픽이나 재미요소에 대한 반응도 약간은 궁금했다.
그렇지만 정말정말 가장 우려했고 스트레스를 받았던 건은 위의 기술적 이슈였다.
이 프로젝트를 시작하고 몇 개월이 지난 시점, 대략 지금으로부터 1년쯤부터 매주 목요일에 주간 빌드를 만들어내고 팀 내 테스트를 실시했다.
1년간 두어번이나 빠졌을까. 5명 정도의 팀일때부터 지금의 12명 팀이 될때까지 정말 안빠지고 테스트는 꼬박꼬박 했다.
덕택에 현재까지 만들어진 기능에 대해서는 버그가 많지 않았고, CPU자원의 활용, 메모리 소모량에 대해서도 어느 정도 만족할만큼의 결과를 얻어냈다.
그럼에도 불구하고 미쳐 감지하지 못한 문제가 있었으니 네트웍 부하였다.
그 전까진 내부망에 서버와 클라이언트를 모두 물려놓고 테스트했으므로 패킷량이 많긴 해도 직접 문제가 되는걸 느끼지는 못했다.
사내 테스트를 일주일 앞둔 시점에 서버와 클라이언트를 각각 다른 회선으로 분리했을때, 패킷량이 감당이 안됨을 깨달았다.
사실 패킷하나 하나의 크기가 큰건 아니었다. 너무 자주 전송을 시도하는 탓에 tcp헤더가 덕지덕지 붙는게 문제였다.
nagle알고리즘만 켜도 간단히 양을 줄일 수 있었지만, 게임 특성상 200ms나 딜레이가 생기면 도저히 플레이 할 수 없었다.
밤잠을 설치며 고민한 끝에 체감하지 못할 정도의 딜레이를 허용하면서도 최대한 패킷을 모아보내는 코드를 집어넣었다.
화요일에 클라이언트에 적용하고 12명이 접속한 상태로 테스트용 오토프로그램을 돌렸다.
전날 테스트에 비해 패킷량이 1/8 정도로 줄어들었다.
당일 밤까지 미친듯이 코드를 짜고 테스트 해서 서버에도 모두 적용시켰다.
수,목요일 양일 동안 패킷량을 점검하면서 종일 테스트를 했다.
내부 테스트 결과나 계산 예측치로는 문제가 없어보였다.
내가 할 수 있는건 다 했다. 나머지는 신의 뜻이다...
금요일 아침에 출근하자마자 퍼포먼스 로그를 남기는 코드를 활성화시키고 IDC에 세팅한 게임 서버 어플리케이션을 실행시켰다.
클라이언트 프로그램을 usb메모리에 넣어서 5개 건물에 분산되어있는 이야인터랙티브 전 팀들을 다 순회했다.
팀 홈페이지에 클라이언트를 올려놓고 다운로드시켜도 되지만, 아무래도 얼굴을 직접 보고 테스트를 부탁하는게 참여율을 높일 수 있을것 같았다.
서버 오픈 시간은 오후1시고, 공식 테스트 시간은 2시였지만, 클라이언트를 배포한 후 조금씩 접속자가 생겨났다.
오후 3시쯤 최대 동접 94명을 기록했다.
175명중에 연차다 뭐다 해서 빠진 사람 제외하면 160명 정도가 접속 가능했을테니 동접 120명 정도는 나와주지 않을까 기대했었다.
아쉽게도 최대 동접 94명을 기점으로 동접이 조금씩 줄어들었다.
94명의 동접을 기록하고 있는 상태에서 cpu점유율과 네트웍 사용량을 보니 최초의 테스트때의 예상치보다 많이 낮은 수치였다.
최근 몇 일간 뜯어고친 코드가 크게 효과가 있었다.
오후 4시 감사의 말과 함께 테스트 종료를 공지했다.
4시 5분 서버 프로그램을 종료했다.
서버 프로그램의 콘솔에서 esc버튼을 누르자 마지막 남은 30여명의 접속자가 깔끔하게 disconnect되고 1바이트의 리소스 누수도 없이 서버는 깔끔하게 종료했다.
대략 6시간 동안 테스트 중에 서버는 한번도 크래시 하지 않았다.
최대동접은 94명, 개별 접속자 수는 142명이었다. 클라이언트는 몇번인가 크래시해서 덤프가 서버로 날라오긴 했지만, 클라이언트를 실행한 142명 모두 게임에 접속 성공한 것으로 확인됐다.
큰 문제 없이 게임은 돌아갔다.
팀원들에게 사내 테스트 종료를 알렸다.
살짝 눈물이 날뻔했다.
내가 만든 엔진과 네트웍 솔루션으로 게임이 출시된 적은 여러번 있었지만, 직접 프로젝트 팀을 끌고 100명 정도의 사람들이 접속하는 테스트까지 와보기는 처음이었다.
사운드 라이브러리 하나 빼고 몽땅 우리 자체 기술이었다.
4명 팀으로 시작해서 1년 반동안 12명의 팀으로 늘려왔지만 여전히 작은 팀이다.
최근 많이 힘들었지만 약간의 자신감을 회복했다.
팀원들의 사기도 올라간것 같다.
이제 첫 관문을 통과했다. 아직 갈 길이 멀지만...
꾸준히 움직이다보면 목적지에 도착할 수 있겠지.
특히 PvP는 생각했던 것보다 훨씬 자연스러웠고, 판정도 좋아서 막판에 서버 종료 될때까지는 PvP만 했지 말입니다. ㅎㅎ