날짜 :
2012-02-23 11:31
댓글 :
32

[연재] 게임서버의 작동원리, 섭다와 렉은 왜 생길까?

배현직 기자 (Twitter: @imays)

▲ 배현직 대표

인벤에서는 국내최초로 서버엔진을 개발하고 상용화한 '넷텐션'의 배현직 대표님을 모시고 서버 관련 칼럼을 기고받게 되었습니다.

넷텐션은 '프라우드넷(ProudNet)'이라는 이름의 서버 엔진을 개발해 현재 '마비노기영웅전', '마계촌온라인' 등 60개 이상의 개발 프로젝트에서 사용 중이며 미국, 한국, 독일 중국 등 9개국 이상에서 게임 서버로 운용 중입니다.

지난번 연재에 이어 이번 시간에는 서버의 작동 원리와 게임 서버는 누가 어떻게 만드는지에 대한 주제로 이어집니다.


※ 넷텐션 공식홈페이지 바로가기






게임서버에 대해 말해주마 - 2부, 게임서버의 작동원리, 섭다와 렉은 왜 생길까?




앞 기고에 이어서 새로운 연재를 하기 전에 고민을 많이 했다. 주제 자체가 딱딱한 내용인지라 독자들에게 편하게 다가가게 만들고 싶었기 때문이다. 게다가 기술적으로 어려운 내용을 점점 풀어야 하는데 이를 어떻게 풀어가야 할지 고민했다.

결국, 필자는 그냥 써 나가기로 했다. 기다리는 독자들을 위해 말이다. 필자가 평소 유머 연습을 안 해놓은 탓이다. 독자들은 내용이 좀 딱딱하더라도 이해해주길 부탁한다. 필자도 최선을 다할 테니까.



[ ▲ 그렇다. 1편은 도입 부분에서 끝이 났다.
필자도 읽어 보면서 너무 빨리 잘랐다는 느낌이 들 정도였으니. ]





게임 서버는 어디서 어떻게 작동하나


게임 서버와 게임 클라이언트는 그 목적과 역할이 정 반대이다.

게임 클라이언트는 화려한 그래픽과 무거운 용량을 자랑한다. 게임 클라이언트는 사용자에게 극대화된 수준의 그래픽 연출을 보여주기 위해 컴퓨터 하드웨어의 성능을 극한으로 남김 없이 사용해야 한다. 그렇기 때문에, 제아무리 좋은 컴퓨터를 사용해도 쿨링팬이 굉음을 내며 돌아갈 수밖에 없다.

게임 클라이언트는 최대한 화려한 것을 사용자에게 보여줘야 한다. 하지만 게임 서버는 아무리 보여줘 봤자 '랙' 아니면 '서버 다운'뿐이다. 즉 잘 만들어진 게임 서버일수록 그 존재를 드러내지 않아야 한다. 아마도 궁극적인 경지에 오른 게임 서버는 그 자체를 아무도 느끼지 못하는 수준이 아닐까?

앞 편에서 언급했듯이, 게임 서버는 화면에 보여주는 것 없이 뇌 역할을 한다. 그러다 보니 게임 서버의 실행 모습은 클라이언트와 달리 무척 밋밋하게 생겼다. 프리 서버를 써본 독자들은 알겠지만 (웬만하면 그 프리섭이라는 것은 즉시 갖다 버리길 권장한다. 매우 위험한 물건이다.) 프리서버는 화면에 보여주는 것이 무척 밋밋한 프로그램이다.




실제 게임 서버도 마찬가지다. 화면에 보여주는 것이 밋밋하거나 아예 없기도 한다.

안정화된 게임 서버는 'Daemon'이라고 불리는 상태로 작동한다. Daemon 상태로 작동하는 게임 서버는 심지어 컴퓨터를 로그온해 놓지 않은 상태에서조차 물밑에서 작동하고 있다. 얼핏 보면 게임 서버는 그냥 켜 놓은 '멍텅구리 컴퓨터'처럼 보일 뿐이다.

비록 게임 서버 자체는 아무것도 보여주지 않지만, 게임 개발사들은 게임 서버의 실행 상황을 관제하는 프로그램을 자체 개발해서 사용한다. 이를 게임 서버 관리 프로그램이라고 부른다. 게임 서버 관리 프로그램은 게임 서버 컴퓨터에 원격으로 접속해서 게임 서비스 상태를 보거나 제어할 수 있다. 게임 서버와 함께 게임 서버 관리 프로그램도 1급 보안으로 다뤄진다.

게임 서버가 구동되는 환경은 일반 컴퓨터와 완전히 다르다. 정온 정습을 유지하는 밀폐된 공간에, 특수 제작된 얇고 넓은 컴퓨터들이 층층이 쌓여 있고 그 뒤에는 복잡한 케이블 뭉치가 똬리를 틀고 있다. 그리고 랙을 최소하하기 위해 게임 서버는 최소한의 인터넷 백본망이라고 불리는 매우 비싼 네트워크 환경에 장착하기도 한다.

그러다보니 게임 서버를 유지하는 데 필요한 컴퓨터, 소프트웨어, 네트워크 임대, 공간 임대에 들어가는 비용이 막대할 수밖에 없다. 소문에 의하면 월드오브워크래프트는 서버 유지비로 하루에 1억 6천만 원이 들어간다고 한다.




게임 서버 하드웨어 또한 게임 회사에서는 1급 비밀로 다룬다. 예를 들어, 게임 서버를 다른 곳으로 이전할 때 서버 이전 계획을 극소수의 사람만 아는 상태로 조용히 수행한다. 미연의 사고를 방지하기 위해 무장 경비가 호송하는 경우도 있다고 한다.

게임 서버가 구동되는 운영체제는 우리가 일반적으로 쓰고 있는 윈도(Windows)가 아니다. 윈도 서버(Windows Server)나 리눅스(Linux)라고 불리는 특수 목적의 서버 운영체제에서 게임 서버를 실행하는 경우가 일반적이다.

리눅스는 완전히 공짜이다. 그래서 서버 유지비용이 윈도 서버보다 싸다. 게다가 소스 코드가 모두 공개되어 성능 극대화를 위한 여러 가지 기회가 있다. 운영체제의 기능 중 불필요한 것들을 쉽게 뜯어낼 수 있다는 것도 리눅스의 장점이다. 리눅스가 '고성능의 게임 서버를 만들 수 있는 궁극의 선택인 이유'가 여기에 있다.



[ ▲ 리눅스 실행 화면. 전산학과를 전공한 사람들은 익숙한 화면일 것이다. ]


그러나 리눅스는 일반 윈도보다 사용법도 복잡하고 재미없게 생겼다. 특히 윈도 환경에 익숙해져 버린 게임 개발자들에게 리눅스의 첫인상은 숨 막힐 수밖에 없다. 모든 작업을 그래픽 없이 텍스트만 나오는 곳에서 마우스도 없이, 키보드로만 해야 하기 때문이다.



[ ▲ 대표적인 윈도 프로그램 개발 도구 Visual Studio ]


필자가 게임 서버를 처음 개발하기 시작한 97년에 리눅스는 아직 유명하지 않았고, 대신 유사한 운영체제인 '솔라리스(Solaris)'가 게임 서버용 운영체제의 대세였다. 그 당시에는 게임 개발자들 사이에서도 윈도 서버가 게임 서버로서의 역할을 잘할지 알려지지 않은 상황이었다.

하지만 이미 윈도 프로그램 개발에 익숙해져 버린 필자는, '익숙하지도 않은데다 가격까지 비싼 운영체제와 개발툴'을 쓰는 것이 왠지 낭비로 보였다. 더구나, 장기적으로 게임 클라이언트와 게임 서버 간의 유기적인 작동을 위해서 양쪽 모두 같은 프로그램 개발툴을 사용하는 것이 더 좋다고 판단했다.

결정적으로, 리눅스나 솔라리스에서는 그토록 하고 싶던 스타크래프트가 작동을 못 했다! 당연히 필자뿐만 아니라 다른 회사의 게임 서버 개발자들은 필사적으로(!) 윈도 서버에서의 게임 서버 개발 방법을 연구하기 시작했다. 결국 윈도 서버에서도 얼마든지 고성능의 게임 서버를 개발할 방법을 개척해냈고, 지금에 이르렀다.



[ ▲ 스타크래프트가 리눅스나 솔라리스에서도 작동했으면
아마도 현업의 게임 서버의 대세는 압도적으로 리눅스가 되었을지도. (믿거나 말거나) ]


게임 서버가 하는 일은 '게임 로직 처리'라고 앞서 언급한 바 있다. 특히 게임 서버는 여러 플레이어간의 상호 작용을 중재하는 역할도 한다.

예를 들어 플레이어1과 플레이어2가 있고 두 플레이어가 대결(PVP)를 한다고 가정하자. 플레이어1이 플레이어2를 때렸을 때 이를 클라이언트에서 때렸다고 판정하지 않는다. 클라이언트는 서버에게 “때렸음을 요청함”만을 보낼 뿐이다.

서버는 “플레이어1이 플레이어2를 때렸음을 요청”받고 이것에 대한 처리 판정을 한다. 즉 플레이어1은 어그로를 먹거나 보라돌이가 되고 플레이어2는 HP가 깎는다. 이 일을 서버가 한다. 그리고 게임 서버는 플레이어1에게 “너 어그로 먹었다”라고, 그리고 플레이어 2에게는 “너 HP 깎였다”라고 알려준다.




패키지 게임과 달리 온라인 게임에서는 게임 로직 처리 말고도 하는 일이 더 있다. 가령 여러 사람의 전투 판정을 중재해주는 역할이나, 누가 게임을 하는지 식별하기 위해 인증(로그인) 처리 한다거나, 사용자가 먹은 아이템들을 저장하고 있다가 다음에 다시 접속할 때 그것을 다시 보여주거나, 랭킹을 보여주기 위해 사용자들의 정보를 정렬하는 역할 등을 해야 한다. 게다가 해킹 시도를 하는 불량 사용자를 찾아서 축출하는 일도 해야 한다. 운영자, 즉 GM을 불러 도움을 받기 위한 일도 하며, 뺏긴 아이템을 누가 가졌는지 추적하기 위한 기록 누적(로그라고 부른다) 역할도 한다.

과거에는 게임 서버 한 대가 이 모든 일을 했다. 하지만 이러한 방식은 다수의 동시접속자를 처리하기 때문에, 서버 랙 혹은 서버 다운이 쉽게 발생한다는 문제가 있다. 우리가 흔히 말하는 ‘서버 다운’ 혹은 ‘섭다’라고 부르는 것은 게임 서버가 오작동해서 정지해 버리는 현상을 말한다. ‘서버 랙’이라고 불리는 것은, 서버가 과부하 걸려서 작동이 심각하게 느려질 때 발생하기도 한다. 서버 다운이나 서버 랙이 생기는 원인 중 하나는 동시접속자가 많을 때이다.

이를 해결하기 위해서, 그리고 게임 서버가 처리할 수 있는 동시접속자를 늘리기 위해서 게임 서버를 여러 대의 머신으로 분산하기도 한다. 지금 온라인 게임 개발에서 게임 서버의 역할 분산은 거의 필수가 되었다.

게임 서버의 역할 분산 구성은 게임의 장르나 특성에 따라 다양하지만, 기본적으로 비슷한 패턴이 있다. MMORPG 게임 서버는 다음과 같이 분산하기도 한다.


[ MMORPG 게임 서버의 역할 분산 예시 ]

= 사용자 인증만을 담당하는 인증 서버
= 사용자가 먹은 아이템이나 키운 캐릭터 정보를 저장하는 데이터베이스 서버
= 랭킹을 보여주기 위한 통계 서버
= 해킹 차단을 하기 위한 미들웨어 서버와 방화벽 머신
= 인던이나 방 만들기를 담당하는 로비 서버
= 게임을 플레이하면서 사람들과 같이 활동하는 것을 중재하는 Zone 서버
= 몹들을 움직여주는 NPC 서버
= 사용자 간 채팅과 욕설 필터링을 담당하는 채팅 서버
= 사용자 간 일대일 대화를 위한 메신저 서버
= GM과의 소통과 기록을 위한 운영 서버
= 모든 서버들의 상태를 관리하고 지휘하는 중앙 서버 관리자
= 게임 서버에서 일어나는 모든 일들을 기록으로 남기는 로그 서버
= 부분 유료화 아이템(캐시템) 구매와 사용을 처리해주는 아이템 현금 구매 서버


게임 서버를 이렇게 역할 분산 구성하면 게임 서버 개발이 훨씬 복잡해지고 까다로워 진다. 그 대가로 많은 동시접속자를 원활하게 처리할 수 있다. 물론, 랙과 서버 다운도 그만큼 줄어들게 되고, 서버 유지비용도 절약된다. 고성능 컴퓨터를 적게 유지하는 것보다 중저성능 컴퓨터를 많이 유지하는 것이 더 저렴하기 때문이다.



[ ▲ 게임 서버 구성의 예(자료출처 : http://www.slideshare.net/gueste9d250/ss-4089997) ]


게임 서버를 분산 구성할 때 얻는 또 다른 효과는 서버 다운으로 생기는 피해를 더 줄일 수 있다는 데 있다. 만약 게임 서버 한 대가 모든 것을 담당하면 아주 사소한 오류로 게임 서버가 죽으면 게임을 하던 사람들이 예외 없이 모두 게임에서 쫓겨나게 된다. 그렇지만 게임 서버가 여러 컴퓨터로 분산 구성되어 있으면, 서버의 일부 기능만이 작동을 멈춘다. 물론 게임 하는 것이 불편하겠지만 아주 쫓겨나는 것보다는 훨씬 낫다.

예를 들어 메신저 서버가 다운되더라도 메신저만 못 쓸 뿐 게임은 계속 돌아간다. NPC 서버가 죽으면 아무리 월드를 뛰어다녀도 몹 한 마리 없는 적막한 상태가 된다. (그래도 플레이어 대 플레이어 전투는 된다.) 로비 서버가 죽으면 필드에서 몹 사냥은 되지만 정작 인던에 들어가지는 못한다. 게임 서버의 역할 분산은 이렇게 피해 파장을 줄여주는 효과가 있다.

잘 죽지 않는 게임 서버의 핵심에는 이러한 분산 서버 개발의 노고가 담겨 있다.





게임 서버는 누가 만드나



앞서 소개했듯이, 게임 서버는 게임 플레이어의 정보, 보안, 관리 등을 담당한다. 그리고 동시접속자가 많을수록 신속하게 대량의 연산량을 감당해야 한다. 그러다 보니 게임 서버는 그에 특화된 기술을 가진 프로그래머가 개발하는 경우가 일반적이다.



[ ▲ 게임 서버 개발자 채용 공고.
게임 클라이언트 개발자 채용 공고와 요구 사항이 차이가 있다. ]


게임 서버 개발자라고 해서 게임 프로그래밍 일반에 대해서 몰라도 되는 것은 아니다. 게임 서버 또한 엄연히 게임 로직 처리를 하기 때문에 게임 프로그래밍 일반에 대해서도 잘할 수 있어야 한다. 특히, 멀티플레이에 관련된 부분이나 보안이 민감한 부분에 대해서는 게임 서버 프로그래머가 주도적으로 개발 업무를 해야 한다. 즉, 게임 기획서에 대해서 깊은 이해를 하고 있어야 하는 것이다.

클라이언트 프로그래머는 게임 연출이나 그래픽 프로그래밍 관련해서 게임 기획에 집중하는 동안, 게임 서버 프로그래머는 게임 플레이 규칙, 커뮤니티, 밸런스 등에 대해서 기획자와 협업(사실상 싸움)을 한다.

클라이언트 프로그래머가 법사의 힐 스킬을 만들기 위해 그래픽 디자이너와 같이 버프 이펙트 연출 방법과 시전 절차 등을 같이 고민하면서 일 하는 동안, 서버 프로그래머는 법사의 힐 스킬이 다른 플레이어에게 영향을 주어 체력이 회복되는 과정에 대해 기획자와 고민하면서 일하게 된다. 즉, 눈에 보이는 부분은 클라이언트 프로그래머가 작업하고, 눈에 안 보이는 부분은 서버 프로그래머가 한다.

클라이언트와 서버를 항상 서로 다른 사람이 분담하는 것은 아니다. 어떤 게임 회사는 게임 서버와 클라이언트를 같은 사람이 담당하되, 업무량을 분산할 뿐이다. 예를 들어 힐 스킬을 만드는 사람은 힐 스킬과 관련된 서버와 클라이언트 작업을 모두 담당하고, 길드 시스템을 만드는 사람은 역시 그것과 관련된 서버와 클라이언트 작업을 모두 담당한다. 이렇게 분산하면 어떤 문제가 발생했을 때 그것이 서버에서 원인인 것인지 아니면 클라이언트인지 금방 파악할 수 있다는 장점이 있다. 물론, 업무 분담을 하더라도 서버의 핵심 기술을 담당하는 개발자가 따로 있다. 클라이언트 쪽에서도 마찬가지다.

게임 서버는 화면에 화려한 그래픽을 보여주는 일이 없다. 그렇지만 온라인 게임의 뇌에 해당하는 부분을 담당하기 때문에 눈에 보이지 않는 것을 한 치의 오차도 없이 작동하도록 세심하게 작업해야 한다. 그러다 보니 화려한 그래픽보다는 건조한 글자 뭉치들 사이에서 일한다. 게임 서버가 작동하는 동안 내부에서 발생하는 것들을 로그(게임 서버가 작동하면서 남기는 기록들. 한 시간에 수천 줄을 남긴다)들을 다루는 일이 많다.




게임 클라이언트는 화려한 그래픽 연출 기법과 처리 성능을 매우 중시한다. 복잡한 수학을 다루는 것은 예사이고, 전산학의 다양한 지식을 동원한다. 게임 프로그래머 자리에 '수학 정석' 책이 괜히 꽂혀있는 것이 아니다. 최신 컴퓨터 하드웨어의 성능을 총동원해서 사용하는 것도 GPU 프로그래밍 등 고도의 기술을 요구한다. 게다가 게임 클라이언트는 프로그램의 복잡도와 개발해야 하는 양 자체도 많다.

한편, 서버 쪽에서는 안정성을 더 중요하게 여긴다. 복잡한 수학 공식이나 알고리즘을 다루는 일은 적지만 분산 서버를 구성하다보면 프로그램이 자연스럽게 복잡해지게 된다. ‘동기화’라는 것을 자주 다루며, 동시에 여러 가지 작업이 서버들 사이에서 실행되게 하면서도 다루는 정보의 순서가 뒤틀리거나 망가지지 않게 하는 것이 그들의 몫이다. 이것을 조금이라도 잘못하게 되면 서버 불안정이나 랙으로 이어지게 되며, 심지어 이러한 결함들을 이용한 아이템 복제나 해킹 등이 일어날 수 있다. 서버 프로그래머가 만드는 게임 서버에 대해서 많은 검토를 반복하는 것도 이러한 문제를 막기 위해서다.

여러분들은 온라인 게임을 하다가 불편 사항이 있으면 운영자(GM)에게 쪽지나 게시판 글을 보낸다. 그러나, 게임 서버 개발자를 포함하여 게임 개발에 참여하는 어떠한 사람도 운영자가 아니다. 개발자와 운영자는 역할이 분명하게 나뉘어 있다. 운영자는 개발자와 게임 유저들 사이에서 창구 역할을 하는 사람들이다.

그들은 게임의 점검이나 패치, 업데이트에 관련해서 어떠한 작업도 주체적으로 할 수 없다. 한편, 개발자는 운영자의 일에 끼어들 수 없다. 가령, 리니지 서버 프로그래머한테 가서 3백만 아데나좀 채워달라는 요청 해봤자 절대 들어줄 수 없다.



※ 본 기획기사는 3부 '게임 서버 개발자가 게임 회사 안에서 겪게 되는 일'을 주제로 이어집니다.
SNS 공유

코멘트

새로고침
새로고침

인벤 최신 핫뉴스

[뉴스] "꾸준하게 콘텐츠 보강, 개선하겠다" 하반기 로드맵 공.. [32] 오재국 (Lucks@inven.co.kr) 08-18
[뉴스] 운고로의 화산을 터뜨리는 방법은? '박사 붐의 하스 연.. [13] 박광석 (Robiin@inven.co.kr) 08-18
[뉴스] '스팀TV' 유출... 트위치 넘는 스트리밍 나오나 [41] 강승진 (Looa@inven.co.kr) 08-18
[뉴스] 미국 법원, GTA5 핵 개발자에 '철퇴' [9] 이두현 (Biit@inven.co.kr) 08-18
[뉴스] '심리학'으로 보는 게임, 그리고 게이머 [1] 정재훈,원동현 (desk@inven.co.kr) 08-17
[뉴스] 조성민 박사 "게임 중독, '선택 모델'을 중심으로 판단.. [2] 정재훈,원동현 (desk@inven.co.kr) 08-17
[뉴스] 게임산업 근로환경 처절, "혁신 필요하다" [12] 원동현,정재훈 (desk@inven.co.kr) 08-17
[뉴스] 포트나이트는 '소작농'이 되지 않는다 [21] 이두현 (Biit@inven.co.kr) 08-17
[뉴스] "왜 게임에 블록체인을 도입해야 하는가?" [12] 윤홍만,허재민 (desk@inven.co.kr) 08-17
[인터뷰] "게임 개발, 어떻게 하고 계세요?" 인디개발자들의 대.. [1] 윤서호 (Ruudi@inven.co.kr) 08-17
[인터뷰] 1인 개발팀 PDDS, "기술은 잘 몰라도, 내 생각을 전하.. [5] 윤서호 (Ruudi@inven.co.kr) 08-17
[인터뷰] 소리로만 적을 파악하는 좀비 VS 랜턴빛으로 적을 찾는.. [3] 윤서호 (Ruudi@inven.co.kr) 08-17
[동영상] 배틀로얄 맵 공개? '배틀필드V' 게임스컴 트레일러 [13] 정필권 (Pekke@inven.co.kr) 08-17
[뉴스] 모바일 데바데 '제5인격', X.D.글로벌이 국내 퍼블리싱 [8] 김규만 (Frann@inven.co.kr) 08-17
[뉴스] 구르고 구르는 기구한 운명의 그들 [4] 허재민 (Litte@inven.co.kr) 08-17
인벤 방송국 편성표

인벤 게임 순위

명칭: 주식회사 인벤 | 등록번호: 경기 아51514 | 등록연월일: 2009. 12. 14 | 제호: 인벤(INVEN)
발행인: 서형준 | 편집인: 이동원 | 발행소: 경기 성남시 분당구 성남대로 331번길 8, 17층
발행연월일: 2004 11. 11 | 전화번호: 02 - 6393 - 7700 | E-mail: help@inven.co.kr

인벤의 콘텐츠 및 기사는 저작권법의 보호를 받으므로, 무단 전재, 복사, 배포 등을 금합니다.
Copyrightⓒ Inven. All rights reserved.