내일배움캠프 Node.js 사전캠프 2일차
Just because something doesn't do what you planned it to do doesn't mean it's useless. - Thomas A. Edison
1. ZEP에서 이루어진 팀단위 아티클 스터디
(1) 아티클의 주제
게임의 역사에서 서버는 어떤 역할을 수행하기 위해 탄생하였는가. 또, 게임의 트렌드가 바뀜에 따라 어떤 형식으로 발전하게 되었는가.
- 초창기 게임의 형태는 매장에서 직접 구매하는 패키지 형식이었다. 컴퓨터의 디스크 드라이브나 CD-ROM 드라이브에 넣어 실행하는 방식이었다.
- 당시 패키지 게임들은 열악한 속도 때문에 컴퓨터 네트워크를 사용하지 않았다. 사용하더라도 상대방과 일대일로 플레이하는 정도였다. 그러나 인터넷이 보급되자 세 명 이상이 플레이하는 패키지 게임이 등장하기 시작했다. 그리하여 다중 플레이어의 상태를 저장하는 곳, 서버의 필요성이 두각을 드러냈다.
- 이때 게임 서버가 맡은 컴퓨터가 수행하는 일은 세션을 처리하는 일이었다. 게임을 시작할 때 컴퓨터 중 하나가 서버가 되어 세션을 처리했던 것이다. 또 일부 게임에서는 온전히 세션 처리만 하는 프로그램이 따로 들어있기도 했다. 이를 데디케이티드 서버라고 불렀다.
- 이후 온라인 게임이 등장하였고, 게임 서버가 본격적으로 활용되기 시작되었다. 컴퓨터 네트워크 어딘가에 서버 프로그램이 실행되면 여러 사람들이 그 서버에 접속해 플레이 했다. 또 어떤 게임은 게임 사업자가 독점적으로 게임 서버 프로그램을 실행하기도 했다. 현재 온라인 게임의 형태는 후자의 방식이다.
(2) 인사이트 공유하기
이제껏 멀티플레이가 가능한 게임을 즐기면서, 막연히 게임의 서버가 제작사 측에 있을 것이라고 생각해왔다. 그래서 문제가 생기면 함께 게임을 즐기던 사람들과 “게임이 잘못 만들어졌다.”고 푸념하기도 했다.
그러나 이번 아티클을 읽어보면서 상당히 잘못된 생각이었음을 깨달았다. 게임 서버에 대한 개념을 살펴본 뒤 추가적인 검색을 해본 결과, 내가 겪은 불편함엔 합당한 이유가 있었기 때문이다.
당시 내가 즐겼던 패키지 게임은 ‘Terraria테라리아’. 해당 게임에서는 플레이어들이 설치한 모드들이 서로 충돌하기도 했고, 게임 내 판정이 이상하게 적용되는 일이 빈번했다. 이 게임의 멀티 플레이 방식은 클라이언트가 직접 호스트가 되어 포트 포워딩을 해주는 것. 즉, 호스트 역할을 맡은 클라이언트가 서버의 역할을 해주는 P2P 방식이었다는 뜻이다. 그때는 포트 포워딩 방식이 낯설고 복잡하다고 의아해 했을 뿐, 플레이어의 컴퓨터가 게임 서버의 역할을 해준다는 것도 상상하지 못했다.
그렇게 오해를 가진 채 수년이 지났고, 어느덧 스팀에서는 해당 게임의 멀티를 ‘스팀 친구를 초대’하는 방식으로 지원해주기 시작했다. 멀티 준비 과정이 편리해졌다고 좋아했던 기억이 있는데, 지금 돌이켜보면 해당 게임의 네트워킹 방식이 완전히 바뀐 순간이었다. 기존의 P2P 방식이 아닌, 스팀 엔진 자체에서 멀티플레이 기능을 제공하기 시작한 것이다.
결국 오늘날 게임의 멀티플레이가 보다 안정적으로 바뀌게 된 건 스팀의 서버 지원 덕분인 셈이다.(게임 서버 제공은 아닌 듯하다, 추가 공부 필요) 과거 내가 느꼈던 게임 내의 문제는 P2P 방식의 부작용이었고 말이다. 인디 개발사의 패키지 게임이었던 만큼 서버를 구비할 만큼의 여유는 없었을 터. 그 동안 GOG 계정을 가진 친구와는 왜 멀티를 즐길 수 없는지 짜증을 느꼈었는데 이제는 그 이유를 납득하게 되었다.
이제 아티클의 내용을 나의 경험과 함께 다음과 같이 정리해 보겠다.
“게임 서버는 게이머들에게 안정적인 서비스를 제공하기 위해 발전했으며, 그 과정에서 유저들에게 아주 크리티컬한 게임 경험을 남기기도 했다.”
게이머로서 과거에 불편함을 겪었기 때문에, 이런 경험이 어떤 네트워킹 구조로 인해 야기되었는지 새롭게 조명해보는 계기가 되었다. 제작사, 플랫폼, 그리고 유저의 입장에서 게임 서버를 바라본다면 같은 시스템일지라도 다른 감상을 느끼게 되지 않을까.
아무쪼록 직접 게임을 경험하면서도 원리를 몰랐던 주제를 향해 한걸음 다가간 기분이다. Node.js를 본격적으로 배우기 앞서 뜻깊은 첫 단추가 된 것 같다.
(3) 인사이트 디벨롭
플레이어가 호스트를 맡는 방식을 P2P라고 생각하고 있었으나 팀원들과의 피드백을 통해 오개념이라는 것을 확인했다. 자료조사를 해본 결과, 상기에 해당하는 서버 방식은 '호스트 방식'이라고 한다.
또 스팀에서 제공하는 것이 게임 서버가 아닐 것이란 의견 또한 있었다.
Steamworks의 공식 문서를 통해 확인해본 결과, 스팀이 입점한 게임사들을 위해 네트워크 API를 제공하고 있음을 알게 되었다. (API에 대한 학습은 다른 글에서 추가로 진행하겠다.)
멀티플레이어(Steamworks 문서) (steamgames.com)
테라리아 게임사에서 멀티플레이를 통해 사용한 API는 STEAM P2P 네트워크일 것이다.
다만, IP 주소의 보안이 취약해지는 기존의 P2P 방식과는 다르게 VALVE 서버를 통한다는 점이 차별점이라고 한다.
내 인사이트가 빗나갔다는 점은 다소 아쉬웠으나, 이미 존재하던 서버 방식(P2P)이 개선을 통해 새롭게 적용되는 걸 보니 오히려 더 흥미롭게 느껴졌다. 게임 서버 분야가 시시각각으로 변화하고 발전하는 중이라는 게 생생하게 느껴지는 부분이었다.
2. 팀 노션으로 회의록 발행
(1) 무엇을 새롭게 배웠는가
다양한 유형의 서버에 대해 알게 되었다.
게임의 종류나 규모에 따라 각기 다른 방식의 서버를 구현하고 있다는 점을 알게 되었다.
가장 흥미로운 의견은 하나의 게임이더라도 기능에 따라 여러 종류의 서버 방식이 채택됐을 수 있다는 것이었다.
(2) 무엇이 새롭게 궁금해졌을까.
API라는 게 정확히 무엇일까?
플랫폼이 네트워크를 제공하는 방식에 대해 더 알고 싶어졌다.
게임 서버에 대한 고민은 게임사 뿐만이 아니라 플랫폼 또한 하고 있을 수 있다는 가능성을 떠올리게 된다.
3. 하루를 되돌아 보며
글의 처음으로 되돌아가 미리 적어둔 격언에 대해 말해볼까 한다.
Just because something doesn't do what you planned it to do doesn't mean it's useless.
무언가가 내가 바라는 방식으로 작동하지 않는다고 해서 그것이 쓸모 없다는 뜻은 아니다.
마치 내가 겪은 하루를 되짚어주는 문장 같다.
비록 지식이 부족해서 오개념을 작성하게 되었지만 이를 보충하는 과정에서 더 흥미롭고 유익한 정보들을 취득하게 되었다. 또 앞으로 더 알고 싶은 키워드(API) 또한 생겼기에 보람찬 스터디가 되었다고 생각한다.
댓글