[기술컬럼] 공통 기능 뽑아내기: 게임 서버와 가상화폐 거래 서버에서 생각해보는 서버프로그래머의 능력

게임 개발을 하시는 프로그래머분들이 아닌 대다수의 게임 유저분들은 게임 서버를 미지의 블랙박스라고 생각하시는 경향이 있는 것 같다. 하지만 “마법” 이라는 것은 게임 내에서 법사가  쓰는 것이고, 세상 대부분의 일에는 마법이 없다는 것은 많은 분들이 공감하실 것이라고 생각한다. (재미있게도 영어 표현으로도 뭔가 신비한 일이 아니라는 뜻으로 “There’s nothing like magic.” 이라고 한다.) 게임 서버 역시 알고보면 그렇다.

게임 서버 프로그램은 게임 서비스를 위한 서버 프로그램이다. 이 때 프로그램이라고 말을 해서 하나의 프로그램이라고 생각하기 쉽지만, 정작은 상호 협력하는 여러 프로그램들로 구성된다. 프로그램 하나로 서비스할 수 있는 유저숫자가 제한적이기 때문이다. (물론 유저가 별로 없는 폭망 게임은 프로그램 하나로도 가능할 것이다.) 이렇게 여러 프로그램들로 구성되는 서버를 분산 서버 프로그램이라고 하는데, 게임 서버 프로그램은 게임 서비스를 위한 분산 서버 프로그램인 것이다.

참고로 이 프로그램들을 돌리는 장비 역시 “서버” 라는 용어를 쓰기 때문에 어떤 분들은 “서버”라고 하면 이런 장비를 떠 올리시기도 한다. 하지만 서버 장비는 여러분의 PC 처럼 하드웨어에 해당하고, 서버 프로그램은 스팀처럼 여러분이 실행하는 소프트웨어라고 생각하면 된다. 그리고 서버프로그래머는 이런 서버용 프로그램을 만드는 사람들이다. -_-v

게임 서버 프로그램이 분산 서버 프로그램의 일종이라는 말은 기본적으로 프로그램을 구성하는 요소들이 “분산 서버 프로그램의 기본적인 기능들” 과 “각각의 게임 서비스를 위한 기능들” 로 구분될 수 있다는 것을 의미한다. 이들의 비율은 게임 콘텐츠에 따라 다른데 대략적으로 4:6 부터 7:3 정도로 다양하다.

어쨌거나 적어도 게임 서버 프로그램의 최소 40% 정도는 게임과는 관계 없는 기반 기술에 해당한다. 서버 프로그래머들은 이런걸 만드는걸 “밑바닥 작업”이라고도 한다. 여기에는 클라이언트 프로그램과의 통신을 위한 네트워크 처리, 유저 데이터를 관리하기 위한 데이터베이스 처리, 사용자가 늘어남에 따라 서버가 늘어나게 되는데 이때 필요한 서버 프로그램들간 통신 기능, 그리고 서버가 여러대 있을 때 사용자를 여러 서버로 나눠주는 로드밸런싱 등이 포함된다. 그리고 서버 프로그램은 우리가 일반적으로 사용하는 클라이언트 프로그램과는 달리 멋진 화면이 없기 때문에 서버가 정상 동작하는지, 해킹을 당하고 있는 것은 아닌지 파악하기 힘들다. 그 때문에 이를 파악하기 위한 모니터링 기능과 해킹에 대한 대응 기능 등이 포함된다.

보통 게임 개발을 하기 위해서 이와 같은 밑바닥 작업을 하고, 그 위에 게임 콘텐츠에 따른 게임 시스템 구현이 들어간다. 그리고 이런 밑바닥 작업의 경우 게임별로 크게 다르지 않기 때문에 이를 공통 기능으로 통합하기 위한 많은 노력이 있어왔다. 대형 개발사들이 이를 표준화된 기술로 만들어서 자사가 출시하는 게임들은 다시 밑바닥 작업을 하지 않고 바로 콘텐츠 작업부터 할 수 있게 하기 위한 노력을 해왔고, 내가 일하고 있는 아이펀팩토리의 아이펀 엔진이라는 것도 이런 밑바닥 작업 없이 콘텐츠를 작성할 수 있도록 하는 솔루션이다.

이런 기능들은 게임 별로 다르지 않기도 하지만, 근본적으로는 앞서 설명한 것처럼 “분산 서버 프로그램” 이라면 공통적으로 필요한 기능들이다. 다시 말해, 이런 기능들 위에 게임 콘텐츠에 대응되는 “어떤 기능” 들을 구현하면 특정 산업의 서비스를 제공하는 서버 프로그램으로 만들 수 있다는 뜻이 된다. 많은 분들이 게임 서버 솔루션을 만들던 아이펀팩토리가 어떻게 가상화폐 거래소 솔루션 사업을 시작하게 되었는지 물어보시는데, 아마 이게 그 답이 될 수 있을 것 같다.

실제로 내가 가상 화폐 거래소 솔루션을 만든 방법은 아이펀 엔진에서 제공하는 분산 서버 기능들 위에 가상 화폐 거래를 위한 거래 방식들을 구현한 것이기 때문이다. 그 둘 사이에는 상당한 유사성이 존재하고 많은 코드가 공유된다. 예를 들어 서버 보안 문제나, 통신을 해야되는 다른 서버들을 동적으로 찾는 기능 (service discovery) 라던가, 아니면 장해 후 복구 (recovery) 같은 기능 등이 이에 해당한다.

사실 현대 사회에서 소프트웨어가 들어가지 않는 산업이 없다시피하고, 그 때문에 프로그래머 역시 다양한 영역에서 필요하게 되었다. 각 산업 영역별로 그 영역에서 필요한 전문 지식은 존재하지만, 반대로 프로그래머가 활용할 수 있는 공통 빌딩 블록이라는 것이 존재하는 것도 사실이다. 이는 다양한 형태의 건물을 짓더라도 그 안에 들어가는 건축 자재는 상당히 공통적인 것들이 쓰이는 것과 마찬가지라고 할 수 있다. 그 때문에 프로그래머들에게도 탄탄한 이론적 기반이 중요하고, 이런 빌딩 블록을 만들 수 있는 능력과 연습이 필요하다고 할 수 있겠다.

아이펀팩토리 문대경 CEO

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중