계기

요즈음 서버 개발을 하는 데에 있어 웹 프레임워크에 대한 개인적인 의존은 높아지고 있지만, 정작 해당 웹 프레임워크의 원리에 대한 이해가 충분하지 못하다고 느끼고 있었습니다. 이 때문에 go 언어를 통해 직접 웹 프레임워크를 하나 만들어보려고 작업을 하던 와중에 (https://github.com/kaestro/webframework) 그보다 앞서서 서버를 하나 만들어보는 것이 맞겠다는 결론에 도달했습니다.

만들어 볼 것이면 기왕이면 가능한 로우 레벨에서 작업해서 기본적인 원리에 대한 이해를 높이고 싶었고, 그러자니 가장 먼저 떠오른 언어는 오랜 친구 c++였습니다. 그리고 c++로 서버를 구축할 것이라면 게임 서버로 만들어보는 것이 재밌겠다는 생각이 들었습니다. 이 때문에 게임 서버 개발을 한 번 시작해볼까 합니다.

개요

전반적인 개요는 readme에서 적혀있는 것과 마찬가지로 일반적인 에코 서버를 싱글 스레드에서부터 시작해, 비동기, 멀티스레드를 순차적으로 구현합니다. 이러는 과정에서 cmake, stl 등에 대해 익숙해집니다. 이 과정을 통해 기본적인 통신과 비동기 프로그래밍 및 멀티스레딩을 경험합니다.

그 다음으로는 기초적인 통신 프로토콜을 설계하고, 이를 이용해 로그인 기능을 구현합니다. 이 과정을 통해 통신에서 메시지를 직렬화/역직렬화 하는 등의 과정을 통한 구체적인 통신 과정을 이해합니다.

마지막으로는 게임에서 필요로 할 법한 기능들을 위에서 구현한 내용들을 바탕으로 구현하는 과정을 통해 간단한 게임 서버 개발을 체험합니다. 해당 기능들에는 전투, 스테이지 관리, 퀘스트 수행, 랭킹 시스템 구현 등이 있습니다.

마무리

이런 서버를 만들어 봐야지 하는 생각은 이전부터 꾸준히 해왔습니다만, 요즘에는 부쩍 개발하는 것이 재밌다고 느껴지고, 사실 해당 개요를 쓰기 전에 이미 개발 작업이 1단계를 지났다고 싶을 시점에서 정리할 필요를 느껴 작성하기 시작하는 것을 보면 이번에는 진짜 다르다!라고 할 수 있지 않을까 싶습니다.

언제나 그렇듯 미완성으로 끝날 수도 있겠습니다만, 경험을 해 본 다는 것 자체에 의미를 두고 한 번 노력해보겠습니다.


2025-05-19
카테고리로 돌아가기 ↩