상단영역

본문영역

서버 프로그래머에게 필요한 기반지식들

기고자: 아이펀팩토리 문대경 대표

  • 정리=변동휘 기자 ngr@khplus.kr
  • 입력 2020.03.27 10:46
  • 글씨크기
이 기사를 공유합니다

[지령 773호 기사]
 

▲ 아이펀팩토리 문대경 대표
▲ 아이펀팩토리 문대경 대표

“프로그래머 기근”. 많은 게임 개발사에서 공감하는 내용이 아닐까 싶다. 이제 컴퓨터 소프트웨어가 필요하지 않은 산업이 없다 보니 게임 업계 역시 수요에 비해 프로그래머의 공급이 달리는 것이 사실이다. 그래서 개발사에서 원하는 “숙련된 프로그래머”를 구하는 것은 요즘 하늘의 별 따기에 가깝다. 이런 상황에서는 수퍼 개발자들을 채용해서 프로젝트를 완성시킬 수 있다는 기대보다는 기존 개발 인력의 역량을 키워 프로젝트와 함께 동반 성장시킨다는 접근 방법이 더 합리적이다.

그렇다면 서버 프로그래머는 어떤 지식을 갖춰 나가야 될까? 대개 서버 프로그래밍에 입문할 때는 기본적인 1:1 TCP/UDP 소켓 프로그래밍에 대한 지식을 습득한다. 그 뒤에 여러 클라이언트를 동시에 다루기 위해서 여러 소켓을 묶어서 처리하는 기법인 I/O 멀티플렉싱(I/O multiplexing)을 익히게 된다. 그리고 이를 좀 더 효율적으로 처리하기 위해서 멀티쓰레딩 (multi-threading)에 대한 교육을 받는다. 여기까지 익혔다면 이제 서버의 가장 기본적인 부분이면서 핵심적인 부분인 클라이언트-서버간 통신을 구현할 수 있게 된다. 초보 서버 프로그래머 티를 벗어나는 것이다.

그러나 이 것만으로 게임 서버 프로그램이 완성되지는 않는다. 2000년대 초중반과 달리 요즘은 게임뿐만 아니라 거의 모든 인터넷 서비스들이 외부 시스템들과 연동을 한다. 단순한 예로는 외부 플랫폼으로부터 인증 요청을 주고받을 수 있어야 하고, 별도의 모니터링 툴이나 분석 툴과 통신할 수 있어야 한다. 다시 말해 서버-서버 통신에 대한 이해가 필요하다.

서버 간에 통신을 하는 방법에는 문자열을 그대로 주고받는 방식과 정해진 이진 규격대로 주고받는 방식 두 가지가 있다. 전자 중 최근 가장 광범위하게 사용되는 것은 HTTP 프로토콜 위에 일정한 규약의 문자열로 통신을 하는 REST API 라는 방식이다. 만약 프로그래머가 Google, Facebook, Twitter, Steam 같은 시스템과 서버간 통신을 해야 된다면 거의 반드시 이들 서비스가 제공하는 REST API를 호출하고 응답을 처리하는 형태로 게임서버-외부서버간 통신이 구현될 것이다. 여기까지 구현할 수 있게 되면 이제 작은 규모지만 하나의 완성된 서비스를 구현할 수 있게 된다.

외부 서버와의 통신이 주로 문자열 기반으로 이루어지는 반면, 게임 서비스를 구성하는 다른 여러 게임 서버와의 통신은 Protobuffer 와 같은 이진 기반의 통신을 하게 된다. 이렇게 내부 서버간 통신에 이진 기반의 통신을 하는 이유는 효율성 때문이다. 아무래도 게임 서버가 외부 서비스와 주고받는 내용 보다는 게임서버들끼리 주고받는 데이터의 양이 더 많고 이를 효율적으로 다루기 위해서는 문자열 기반보다는 이진 기반이 유리하다. 게임서버간 통신 기법을 익히면 좀 더 규모가 큰 게임까지 만들 수 있게 된다.

정리하자면 서버 프로그래머는 먼저 클라이언트-서버 통신을 효율적으로 다룰 수 있는 기법을 익혀야 한다. 그 다음에는 서버간 통신에 대해서 익혀야 하는데 게임서버-외부 시스템 간의 통신은 REST API 라는 문자열 기반의 통신을 하고, 게임서버-게임서버의 내부 통신은 이진 기반의 통신을 한다. 끝으로 이런 기반 지식 위에 프로그래밍을 많이 해보는 “경험” 이야말로 서버 프로그래머를 더욱 단단하게 하는 마지막 단계라는 것을 잊지 말아야 한다.

 

[경향게임스=변동휘 기자]

저작권자 © 경향게임스 무단전재 및 재배포 금지

개의 댓글

0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400

내 댓글 모음