게임서버 언어

조회수 1260회

안녕하세요.

웹개발쪽만 공부하다가 갑자기 게임서버는 무슨언어로 만드나 궁금해져 질문남깁니다. 구글링을 게임서버 언어로 먼저 해봤지만 최근에 쓰인 글이 안보이는군요. c#, c++가 대부분이며 node.js가 새롭게 떠오르고 있는 것같은데 해시코드에 계시는 고수분들은 어떻게 생각하시는지 듣고싶습니다.

감사합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 언어가 문제가 되지는 않습니다.

    게임서버라는 많은 사용자가 접속하는 특성상 이벤트 기반의 비동기 호출을 사용해야 합니다.

    예를들어 많은 사용자를 커버하려면 멀티쓰레드 방식으로는 c10k 문제를 해결하기 힘듭니다.

    윈도우에서 쓰레드를 하나 생성하면 기본적으로 1메가의 스택공간을 만들어야 합니다. 10000개의 쓰레드라면...단순히 계산해도 10기가 필요하다는 결론이 됩니다.

    그러나 32비트 os는 최대 4기가의 메모리를 사용할 수 있고 그중 1~2기가는 커널영역이 차지 합니다. 즉 멀티쓰레드 방식으로는 c10k 를 해결하기 어렵습니다.

    사용할 수 있는 비동기 이벤트 방식의 솔루션으로는 윈도우쪽에 iocp 와 리눅스쪽의 epoll 등이 있습니다.

    한동안은 윈도우와 iocp 로 많이 만들었고 지금도 성능이나 가용성측면에서 가장 낫다고 합니다.

    그러나 이벤트 기반의 비동기 호출이라는 관점에서 보면 epoll이나 iocp나 비슷하지 않을까 싶습니다. (인터넷에서 벤치마크 자료가 제법 있을 겁니다)

    즉 윈도우서버라면 iocp, 리눅스라면 epoll 을 많이 사용하여 개발합니다.

    그러면 질문자가 궁금해하는 언어 문제로 가서 생각해봅시다.

    사실 icop, epoll 모두 c api로 제공됩니다. 가장 성능좋은 결과물을 만들수 있는 언어가 c/c++라는 뜻입니다. 실제로도 c/c++을 서버 개발 언어로 채택할 겁니다.

    그런데 c/c++은 생산성에 단점이 있으므로 모든곳에 c/c++을 사용하진 않습니다. 닷넷으로도 iocp 를 다룰 수 있고 자바로도 jni를 통해 epoll 을 사용할 수 있고 자바 표준 라이브러리 수준 (nio)에서 epoll이 제공됩니다.

    지금의 모던한 언어들의 큰 주제중에 하나가 async, await 입니다. 비동기라는 것이죠. Go 언어는 goroutine 이라는 코루틴 기능을 언어에 내장했고 node.js는 기본적인 아키텍쳐가 비동기적인 처리를 합니다.

    예전에는 iocp, epoll 이라는 운영체제의 기능을 불편하게 활용했다면 지금은 언어적으로 제공해주는 시대가 된 듯 합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)