개발하는 설기

마인크래프트 서버의 역사 - LAN 서버에서 지금까지 본문

마인크래프트

마인크래프트 서버의 역사 - LAN 서버에서 지금까지

mastersulgi 2024. 8. 11. 10:05

마인크래프트는 원래 싱글 플레이를 기준으로 설계된 게임이라고 합니다. 실제로 전세계의 수 많은 사람들이 모드를 깔아서 싱글플레이를 하기도 하고요. 그런데 제 생각은 약간 다릅니다. 마인크래프트는 친구들과 같이 할 때 더 재미있는 것 같습니다.

이 게시글을 작성하기 하루 전, 친구들과 함께 Diversity 3 라는 이름의 맵을 플레이했습니다. 탈출맵의 성격을 띄는 맵인 것 같은데, 1.14.4 버전에서 작동하는 비교적 최신 맵이었습니다. 양털이 돌아가거나 엘리베이터를 구현하는 등 마인크래프트에서 이게 가능한가? 싶은 것들을 잔뜩 구현해놨더라고요. 친구들도 저도 그런 것들을 보면서 무척 놀랐습니다.

혼자서 하는 게임은 진득하게, 내가 하고 싶은 만큼 목표를 정해놓고 할 수 있는게 꽤나 큰 강점으로 작용합니다. 반면 매치를 돌려야하거나 누군가와 함께 하는 게임은 내가 이루고자 하는 목표를 이루지 못할 수도 있고, 생각했던 것보다 더 많은 시간을 들여야할 수도 있습니다. 대신 그러한 단점에 꿇리지 않는 가치가 있다고 한다면, '공통되게 새로운 경험을 같이 한다' 는 부분이겠죠.

이 글은 마인크래프트에서 공동된 경험을 같이 할 수 있게 해주는, 제3자 멀티플레이 서버를 여는 방식에 대한 완전한 이해를 목적으로 두고 나아가고자 합니다. 마인크래프트의 멀티플레이 역사는 꽤나 길지만, A부터 Z까지 정리해놓은 사람은 많이 없더군요.

# 가장 기본적인 마인크래프트 서버

어렸을 때 친구들과 함께 피시방에 몰려가서 마인크래프트를 켠 뒤에, LAN 서버 기능을 활성화해서 다같이 게임을 한 경험이 있으시련지 모르겠습니다. 제가 직접 그런 경험을 해본 것은 아닌데, 제가 피시방에 갔을 때 저보다 어린 학생들이 LAN 서버를 이용해서 멀티플레이를 즐기더군요. 

LAN 서버의 가장 큰 장점은 편의성입니다. 버킷이니 구동기니 복잡하게 뭔가를 다운받아서 설정을 할 필요 없이, 인 게임에서 버튼 하나만 딸깍하면 바로 서버가 돌아가게끔 할 수 있죠. 그런데 LAN 서버는 아주 치명적인 단점 2가지를 가지고 있습니다.

첫째, 자신과 같은 네트워크에 접속해있는 사람들만 접속할 수 있다는 점입니다. 피시방이나 학교에 있는 컴퓨터실 같은 곳에서는 이게 큰 문제가 되지 않습니다. 일반적으로 피시방이나 컴퓨터실 같은 곳은 하나의 서버랙을 통해서 인터넷이 흩뿌려지므로, 기본적으로는 같은 IP 대역과 인터넷을 공유하고 있습니다. 이러한 연유로 간단하게 같은 공간에 있는 사람들끼리 멀티플레이를 할 때에는 크게 문제가 되지 않지만, 각자의 집에서 멀티플레이를 즐기기에는 무리가 있습니다.

둘째, 플러그인을 적용할 수 없다는 점입니다. 마인크래프트를 플레이하는데에 있어서 게임성 그 자체에 집중하는 사람들이 대다수겠지만, 이러한 마인크래프트를 좀 더 편리하게 플레이하고 서버를 운용하는 행위 그 자체에 있어서 즐거움을 느끼는 사람들도 있습니다. 그런 사람들에게 있어서는 서버의 플러그인이나 클라이언트의 모드가 대단히 중요한 부분으로 작용할텐데, LAN 서버에서는 이러한 플러그인을 적용하는 것이 실질적으로 불가능합니다.

# LAN 서버에서 조금 더 진화된 마인크래프트 서버

앞서 나열한 단점들을 극복하기 위해서 사람들은 마인크래프트 서버의 확장성을 도모할 수 있는 방법을 원했습니다. 그 결과로 마인크래프트 개발사인 모장은 마인크래프트의 버전 별 서버파일을 제공하기 시작했습니다.

설치되어 있는 버전에서 수정을 누르고, 중앙에 있는 서버 다운로드 버튼을 누르면 server.jar 라는 파일이 다운로드 됩니다. 이 파일을 실행하고 생기는 서버 폴더를 통해 서버에 플러그인을 적용할 수 있게는 되었지만, 아직도 외부에서 연결을 하는 것에는 고도의 작업이 필요했고 모드도 사용할 수 없었습니다.

# 하마치의 등장

그러던 중 LogMein 이라고 하는 소프트웨어 회사에서 아주 획기적인 프로그램을 내놓게 되는데, 아마 대부분의 사람들이 알고 있는 '하마치' 라는 프로그램입니다. 이 프로그램은 흔히 우리가 VPN 이라고 부르는 가상 사설망을 사용자의 필요에 의해 직접 만들 수 있게끔 하고, 각각의 사용자에게 고유한 가상IP 를 제공하게끔 했습니다. 누군가가 자신만의 가상 사설망을 만들면 그 가상 사설망에 합류하고, 서버를 여는 사람의 가상IP 를 통해 멀티플레이를 할 수 있었던 겁니다.

사람들은 이 프로그램에 열광했습니다. 복잡한 네트워크 설정을 하지 않아도 누구든지 쉽게 멀티플레이 서버를 만드는게 가능해졌고, 필요한 프로그램은 무료이며, 마인크래프트에서 제공하는 서버 전용 파일을 통해 더 고품질의 멀티플레이 서버를 만드는게 가능해졌기 때문입니다. 

하마치는 쉽게 이야기해서, 가상의 LAN 서버를 열 수 있게 도와주는 도구였습니다. 최초의 마인크래프트 서버는 같은 네트워크 안에 있어야 작동된다고 말씀드렸는데, 하마치는 프로그램을 통해 각각의 사용자들이 가상의 같은 네트워크 안에 있도록 묶어주었고 그 결과 LAN 서버와 동일하게 작동할 수 있었던거죠.

완벽해보였던 하마치에도 흠은 있었습니다. 가상의 엔진을 이용하여 사설망을 만들기 때문에 간혹 오작동으로 인해 서비스가 정상적으로 시작되지 않는다거나, 강제로 서비스를 재시작하면 기존에 저장되어 있던 자신의 사설망이나 가상의 IP가 초기화되곤 했습니다. 이는 호스트가 열심히 일궈놓고 인지도를 쌓은 자신의 가상IP를 한 순간에 잃어버릴 수도 있는, 굉장히 중대한 문제였습니다.

게다가 이러한 하마치의 성공을 본 LogMein 사는, 하마치를 통해 유입된 고객들을 유지하고 결과적으로 다른 서비스의 홍보 수단으로 삼기 위해서 하마치를 사용할 때에 반드시 회원가입을 거치게끔 했고, 로그인을 하지 않으면 하마치 서비스가 구동되지 않도록 업데이트 했습니다. 하마치의 고질적인 문제에 엎친데 덮친격으로 이런 정책 업데이트가 발생하자, 대다수의 플레이어들은 하마치에서 이탈했습니다.

# 노 하마치 서버의 등장

사람들은 하마치를 이용하여 간편하게 서버를 여는 방식에 열광했지만, 하마치의 고질적인 문제는 결국 해결되지 않아 사람들은 하마치가 없어도 접속할 수 있는 No Hamachi 서버, 즉 지금에 이르러 가장 폭넓게 쓰이는 포트포워딩 방식을 쓸 방법을 찾았습니다.

그때까지만 하더라도 포트포워딩을 하는 건 컴퓨터를 좀 잘하는 사람들도 어렵게 어렵게 자료를 찾아가면서 삽질을 해야 겨우 성공할 수 있는, 생각보다 고 난이도의 작업이었습니다. 지금에 이르러서야 정보의 홍수라는 말로 빗댈 정도로 사용자가 원한다면 얼마든지 정보를 수급하는게 가능하지만, 하마치를 탈피할 방식을 찾고자 했던 그 당시의 사람들에게는 성공의 사례가 실패의 사례보다 압도적으로 적었기 때문에 인터넷을 뒤지는게 능사는 아니었습니다.

그 때 당시의 사람들이 많이 사용하던 공유기를 꼽자면 단연 iptime 의 공유기였는데, iptime 공유기가 포트포워딩을 하기가 쉽고 유저 친화적인 인터페이스를 가지고 있다는 평가가 나돌면서 마인크래프트를 하는 사람들 사이에서는 iptime 공유기를 사용하는게 거의 불문율이 될 정도였습니다.

우리나라의 주요 강에는 댐이 설치되어 있는데, 이 댐에는 수문이라고 하여 물의 흐름을 차단하거나 흐르게하는 장치가 있습니다. 평소에는 비가 오지 않을 것을 대비하여 물을 비축하기 위해 수문을 닫아놓지만, 비가 많이 와서 홍수가 예상될 때에는 수문을 열어 물을 방류합니다. 이 때 특정한 수문 몇 개만 열 수도 있고, 모든 수문을 다 열 수도 있습니다.

포트포워딩이라고 하는 서비스의 개념은 간단합니다. 방화벽이라고 하는 댐이 있고, 포트라는 수문이 있습니다. 사용자는 사용자의 필요에 의해 수문을 개방할 수 있는데, 이러한 행위 전체를 포트포워딩으로 통칭한다고 보면 됩니다.

당시에는 공유기 설정의 포트포워딩만 해주면 모든게 완료된다고 생각하는 사람들이 많았지만, 성공하는 사람은 많지 않았습니다. 대부분의 사용자들은 Windows 를 이용하여 서버를 열었는데, Windows 의 경우 미리 설정해둔 포트가 아니면 네트워크 간의 통신을 할 수 없게 방화벽으로 막혀있기 때문입니다. 이러한 사실을 모르는 사람들은 포트포워딩에 실패했다고 생각하고 그대로 포기해버리기도 하고, 일부 블로그에서는 방화벽의 사용을 완전히 해제해야 마인크래프트 서버를 열 수 있다고 포스팅하는 등 잘못된 정보의 끊임없는 재생산으로 인해 하마치를 이용하지 않는 서버의 대중화는 훨씬 더 늦어졌습니다.

# Bukkit API 의 공개, 그리고 몰락

하마치와 노 하마치 사이에서 유저들이 갈팡질팡하고 있을 무렵, 마인크래프트 서버 계의 혁신이라고 볼 수 있는 Bukkit API 가 공개되었습니다. 멀티플레이를 해보신 분들 중 craftbukkit.jar 라는 파일을 보신 분들이 굉장히 많을 텐데, craftbukkit 이 이 Bukkit API 를 활용한 서버 구동 파일입니다.

최초에 공개되었던 Bukkit API 는 그 라이센스가 완전히 공개되어 있는, 누구나 사용할 수 있고 누구나 수정할 수 있는 오픈 소스의 형태였습니다. 게다가 그 기능도 상당히 강력했는데, 플러그인과 맵의 적용, 서버의 최적화 등 모든 부문에서 기존 마인크래프트 서버 파일을 크게 앞섰습니다.

그러다보니 플러그인 개발자들은 앞다투어 Bukkit API 를 활용한 플러그인을 개발하기 시작했고, 플레이어들도 기존 마인크래프트 서버 파일을 Bukkit API 가 사용된 서버로 대체하기 시작했습니다. Bukkit API 의 성공적인 런칭을 게임 개발사인 모장도 의식하듯, 2011년 최초로 개최되었던 마인콘에서 Bukkit API의 개발자 4명을 모장의 개발자로 특채합니다. 그러나 Bukkit API 를 주도적으로 개발했던 EvilSeph 는 2013년 10월을 기점으로 모장에서 퇴사합니다.

Bukkit API 는 마인크래프트 서버 역사에 한 획을 그었다고 과언이 아닐 정도로, 공개되기 전과 후의 차이가 굉장했습니다. 매일 수백 수천 명의 플레이어가 Bukkit API 를 사용한 서버에 새로 유입되고, 그러한 현상이 몇 년씩이나 계속되었으니까요. 

플레이어들은 제3자 멀티플레이 서버의 재화나 아이템을 구매하기 위해 서버 운영자 및 개발자에게 기꺼이 현금을 지불했고, 그러한 현상은 상당히 오랜 시간 동안 지속되었습니다. 서버 운영자에게 들어오는 돈이 있으니 서버의 개발자, 플러그인 개발자 등도 당연히 성황을 이루었고요.

이러한 상황을 부정적으로 보고 있었던 모장은 2014년 EULA 개정을 통해 제3자 멀티플레이 서버 인 게임에서 유리한 재화를 현금으로 판매할 수 없도록 하는 규정을 신설하는 한편, 서버를 실행할 때 반드시 이 EULA 에 동의하게끔 강제하여 동의하지 않는 경우 서버를 구동하는 것이 불가능하게 만들었습니다. 이러한 규정이 신설되자 제3자 멀티플레이 서버의 플레이어도, 운영자도, 개발자도 모두 패닉에 빠졌죠. 한 순간에 일어난 일이었거든요.

한편 모장에서 퇴사했던 EvilSeph 가 공개한 내용에 따르면, 자기도 모르는 사이의 Bukkit API 의 소유권이 마인크래프트의 개발사인 모장으로 넘어가 있었다고 합니다. Bukkit API 는 오픈 소스를 표방하고 있었는데, 이 API 를 만드는데에 있어서 마인크래프트의 코드를 리버스 엔지니어링을 통해 취득한 사실이 있으므로 이는 모장에게 소유권이 있다는 논리였습니다. 모장에 입사한 후 퇴사하지 않았던 전 동료 3명도 말을 보탰습니다.

이에 분노한 EvilSeph 는 DMCA Takedown, 즉 저작권법 위반 혐의로 자신이 기여한 모든 코드가 올라가있는 모든 포럼과 웹사이트에 게재 중지를 요청하며, 이 요청이 받아들여짐으로써 전세계에 분포되어 있던 Bukkit API 를 사용하는 커뮤니티가 동시 다발적으로 궤멸되었습니다.

이러한 일이 있고 한동안 Bukkit API 를 업데이트할 수 없었기 때문에 이를 활용하는 플러그인도 업데이트가 불가능했고, 한참 뒤에야 Bukkit API 를 계승하는 Spigot API 가 업데이트되면서 대부분의 서버 및 메이저 플러그인 개발자들은 Spigot API 를 기반으로 두도록 패러다임의 전환이 있었습니다.

# Spigot API 의 업데이트

사실 Spigot API 는 Bukkit API 의 포크된 버전으로, 쉽게 얘기하면 Bukkit API 의 복사판이라고 할 수 있습니다. 그렇기에 DMCA Takedown 사태가 발생하였을 때 Bukkit API 와 같은 수준의 피해를 입었습니다.

그럼에도 불구하고 Spigot API 는 어떻게든 유실된 코드들을 복구하고 업데이트를 지속하기 위해 최선을 다했고, 그 결과 Bukkit API 기반의 프로젝트 중에서는 거의 유일하게 살아남았다고 보는 시각이 지배적이었으나, DMCA Takedown 이 끝내 철회되지 않으면서 이제는 공식적으로 다운로드를 지원하지 않게 되었습니다.

# 그 이후

마인크래프트 서버의 기초가 되었던 Bukkit API 를 사용하는게 사실 상 거의 불가능해지고 난 뒤에는, 각 개발자들이 독자적인 API 를 구축하기 위해서 최선을 다했고, 그 결과 현재의 업계 표준은 Paper API 와 Fabric API, CatServer 정도로 꽤 세분화 되었습니다.

이 글을 써야겠다고 마음 먹었을 때는 분명 서버를 여는 법에 대한 자세한 정리를 하려고 했었는데.. 어쩌다보니 마인크래프트 서버 역사에 대한 이야기가 되었네요.

다음 글은 반드시 마인크래프트 서버를 여는 방법을 처음부터 끝까지 아주 상세하게 설명하는 것을 목표로 삼고 써보도록 하겠습니다.

글에 잘못된 부분이 있거나 궁금하신 점이 있으시다면 언제든 댓글 남겨주세요!

확인하는대로 답변 드리도록 하겠습니다.