개요
한 해가 점점 끝으로 다가가는 시점에서, 게임 개발자로서의 여정을 회고하고자 이 글을 쓰게 되었습니다. 이 회고록은 뛰어난 기술적 성장을 작성한 글을 아니며, 해왔던 일, 하고자 했던 일들을 정리하는 글입니다. 한 해 동안 수행한 프로젝트 업무를 되돌아보며, 나의 성장과 발전에 대한 소중한 기억을 기록하고자 합니다.
프로젝트와 목표
제가 진행해 온 프로젝트는 SLG 기반의 게임 프로젝트였습니다.
SLG 기반의 게임 프로젝트에서 서버팀의 목표는 다음과 같았습니다. 우선, 게임의 특성상 다수의 플레이어들이 실시간으로 상호작용하는 멀티 플레이 기능을 원활하게 구현하는 것이었습니다. 이를 위해 강력한 서버 아키텍처와 효율적인 데이터베이스를 설계하고 개발하여 플레이어들 간의 신속하고 원활한 통신을 지원하는 것을 목표로 하였습니다. 또한, 프로젝트의 글로벌 서비스를 목표로 하기 때문에, 모든 유저들이 다른 리전서버에 접속한다 하더라도 서로 만나서 플레이하도록 지원하는 것이 중요했습니다. 이는 다양한 지역과 시간대에 걸친 다양한 플레이어들이 서버에 접속하고 플레이하는 것을 의미합니다.
진행 작업
프로젝트 목표인 멀티 플레이 기능 구현과 글로벌 서비스 지원을 위해 스케일 아웃 가능한 DB, Server 구조를 구축하는 작업을 진행했습니다. 그리고 또한 가상 머신 인스턴스를 활용해 동적으로 서버를 추가 제거하는 자동 스케일링기능을 구현하여 부하 분산을 진행할 수 있었습니다. 하지만 MatchServer의 경우 하나의 리전에 구축하여 다양한 리전의 플레이어들이 매칭을 될 수 있도록 지원하였기 때문에, 리전 간의 거리와 레이턴시에 따라 매칭 지연 시간이 발생할 것으로 예상하였습니다. 이러한 구조로 인해 플레이어들의 매칭 경험에 약간의 지연이 발생할 수 있으며, 이는 글로벌 서비스의 특성을 감안할 때 어느 정도 예상되는 사항이었습니다. 이러한 예상 지연 시간을 최소화하기 위해 최적화된 리전 구성과 네트워크 설정을 적용하기 위한 여러 테스트를 진행하였습니다. 또한, 여러 캐싱전략을 사용하여 지연을 최소화시키기 위한 작업을 진행했습니다.
성과 결과
윗 프로젝트의 성과에 대해서 아직 명확한 평가는 어렵다고 할 수 있습니다. 이는 현재 제가 해당 회사에 근무하고 있지 않기 때문입니다. 작은 규모의 투자로 운영되는 IT 회사의 고질적인 문제로 인해 월급이 지연되는 상황이 발행하여, 최종 결과를 직접 확인하지 못했습니다.
하지만 주변 지인들로부터 들리는 소문에 따르면, 프로젝트는 잘 서비스되고 있으며 큰 문제없이 원활하게 운영되고 있다고 합니다. 이는 서버팀 내에서의 프로젝트 목표는 어느 정도 달성했다고 보입니다.
기술과 도구
프로젝트에서 사용한 주요 기술은 Web 기반의 기술을 사용했습니다.
사용 기술 도구 목록은 아래와 같습니다.
- Java
- Spring
- Netty
- MyBatis
- MongoDB
- Mssql
- Redis
- Aws
- Docker
개인 성장 발전
새로운 기술에 대한 공부
이전에 C++ 기반의 MMORPG 게임 서버를 개발하던 저에게, 웹서버 프로그래밍은 처음 도전해 보는 프로젝트였습니다. 입사 당시에는 문서가 거의 없었고, 빌드 설정부터 배포 방법까지 모든 것이 미정이었습니다. 더구나 프로그래밍 지식을 전수해 줄 동료도 없었습니다. 처음에는 도망칠까도 생각했지만, 한 달의 여유 기간을 회사에 부탁하여 웹서버에서 사용하는 기술에 관련된 강의를 모두 구매해 내 것으로 만드는 작업을 진행하였습니다. 2주 정도 지식을 강제로 채워 넣으며, 회사에서 사용하는 언어와 프레임워크가 조금씩 이해되기 시작했습니다.
언어 이슈가 줄어드니 이제 회사의 자동화, 배포 파이프라인, 형상 관리 등 여러 이슈들도 문제점으로 보이기 시작했습니다. 이전 회사의 경험을 바탕으로 개선을 시도한 부분도 있었고, 추가로 Docker, Jenkins 등 처음 사용해 보는 여러 지식을 공부하여 회사의 개발 프로세스 개선하였습니다.
또한, 서버 아키텍처, 프레임워크 선택은 제가 직접 해야 했습니다. 기존의 레거시 프로젝트를 조금이라도 더 개선해야 했기 때문에 프레임워크, 아키텍처와, 코드 컨벤션 등을 공부하며 매일매일 더 나은 방법을 고민했습니다. 이러한 경험들을 통해 현재는 분명히 이전보다 성장한 모습을 느끼고 있습니다.
협업 능력
처음으로 입사했던 회사는 저에게 많은 것을 배워가는 회사였지만, 몇 가지 성장하지 못한 부분이 있는데, 그중 하나가 다른 팀원분들과의 협업 능력이었습니다. 분기별로 아트팀, 기획팀을 반절씩 정리해고 할 만큼 회사 사정이 좋지 않아 콘텐츠를 만들 여력이 되지 않았기 때문입니다. 그렇기 때문에, 게임자체의 큰 업데이트는 없었으며, 게임을 플레이하는 유저수도 적어 크리티컬 한 이슈가 발생하지 않았었습니다. 그리고 제가 맡은 콘텐츠들은 기존에 있던 것들을 개선하는 작업을 위주로 했기 때문에, 새로운 컨텐츠 개발 업무가 아니라 타 파트원 팀원분들과 협업을 할 기회가 많지 않았었습니다.
하지만 이번 회사에 오면서, 프로젝트의 메인 콘텐츠를 대부분을 제가 진행했고, 또한 프로젝트의 서버팀을 리드하는 입장이었기 때문에, 개발적 측면 외에도 타 파트원과 많은 교류를 할 수 있었습니다. 단순 기획팀뿐 아니라, 운영, 사업 등 여러 부서와 협업을 진행하면서 한층 더 성장한 것을 느끼게 되었습니다.
결론
윗글을 요약하면 아래와 같이 요약이 가능합니다.
- 안정적인 서버 구조 디자인 및 프로젝트 서비스 목표를 달성하였습니다.
- 이용 가능한 언어의 범위가 확장되었습니다.
- 개발 프로세스의 개선 방안에 대해 고민하고 생각해 볼 수 있었습니다.
- 프레임워크 및 서버 아키텍처 설계에 대해 많은 공부가 되었습니다.
- 협업 능력이 크게 향상되었습니다.
- 게임 개발부터 배포 및 서비스( CBT )까지 다양한 경험을 쌓을 수 있었습니다.
한 해를 마무리하면서 글을 처음 작성해 봅니다. 글을 작성하다 보니, 아직도 많은 부분이 부족하다고 느껴지네요. 다음 한 해는 좀 더 의미 있는 결과로 글을 작성할 수 있었으면 좋겠습니다.