<제목>
자체적인 마인크래프트 서버 애플리케이션 개발에 함께할 팀원을 모집합니다.
<모집분야>
백엔드개발
<소개>
안녕하세요. 자체적인 마인크래프트 서버 애플리케이션 개발에 함께할 팀원을 모집합니다. 자체적인 서버 애플리케이션 개발이란 기존의 마인크래프트 서버 애플리케이션인 Craftbukkit, Spigot 등과 같은 상용 제품을 직접 개발하는 것입니다.
대략 1년 넘게 서버 애플리케이션을 개발하기 위해 달려왔습니다. 대부분의 시간은 학문적인 공부에 위해서 투자를 하였고 여러번의 살집과 이미 2번의 실패가 있었습니다. 지금의 개발은 1달 가까이 이어지고 있는데 성공적으로 프로토타입까지 마무리할 수 있을 것 같아서 이곳에 글을 올립니다.
<동기>
예전부터 상용 제품을 만들어 시장에 선보이고 싶은 마음이 있었습니다. 작품을 사람들에게 선보일 방법은 다양하지만, 저는 게임을 선택하였고 서버를 만드는 중입니다. 게임 개발은 클라이언트와 서버 개발로 나뉘며, 모두 높은 난이도를 자랑합니다. 둘 다 손수 만들기에는 자신이 없어 기존의 마인크래프트 클라이언트를 활용하여 서버를 개발하고 있습니다. 이미 마인크래프트는 커스터마이징을 통해 다양한 게임을 즐길 수 있는 문화가 형성되어 있고 많은 사람들이 즐길 수 있는 게임 중 하나입니다. 적지않은 예시를 보고 마인크래프트라는 게임을 통해 퀼리티 좋은 게임을 만들 수 있을 것이라 생각합니다.
게임 서버를 손수 만드는 것은 흥미로운 프로젝트입니다. 대부분의 게임은 이미 잘 만들어진 게임엔진을 사용하여 개발할 것입니다. 왜냐하면 쉽고 빠르게 개발할 수 있습니다. 저의 개발에서는 다른 제품의 도움없이 성능, 최적화, 물리, 네트워크, 동기화 문제, 쓰레딩 등등의 다양한 문제를 해결해야 합니다. 이유는 지금 당장의 금전적인 성공보다는 남들이 해보지 못한 새로운 도전이라고 생각합니다. 사실 게임의 상업적 성공은 기술력과는 무관하다고 생각하기도 합니다. 마인크래프트 개발이라고 재미없고 지루하다고 생각하실 수 있지만 마인크래프트 게임의 클라이언트는 그래픽적으로 단순하게 만들어져 있기 때문에 만드는 것도 그리 먼 길이 아닐 수 있습니다. 하지만 서버 개발은 여타 다른 게임들과 같이 기술력 높게 완성하고 싶습니다.
<본문>
현재는 기본적인 멀티플레이어, 스킬적인 요소, 물리 등의 기능이 구현된 프로토타입까지 만드는 것이 1차 목표입니다. 다음으로는 AI가 지원되는 엔티티를 추가하고 더 풍부한 게임적 요소를 만들 계획입니다. 이미 멀티플레이어, 청크로드, 엔티티 렌더링, 인벤토리 등의 구현을 완성했습니다. 위의 영상들은 몇 달간 개발하면서 기능이 추가될 때마다 남긴 영상들입니다.
왜 기존의 상용 제품을 사용하지 않고 새로 만드는 이유가 궁금하실 수도 있습니다. 저도 잘 만들어진 소프트웨어를 내가 더 잘 만들 수 있다는 착각을 하지 않기 위해서 자만하지 않고 공부하고 있습니다. 왜 새로운 서버를 굳이 만들려고 하는지 기술적으로 설명드리겠습니다
첫째, 기존의 상용 제품에 플러그인이나 모드를 통해 원하는 기능을 구현하는 것은 한계가 명확합니다. 어쩔 수 없이 기존 제품에서 제공해주는 API로만 개발을 해야 되는 한계가 있습니다. 그리고 플러그인 개발의 대부분이 이벤트 기반으로 새로운 기능을 추가하기 때문에 아쉬운 부분이 있습니다. 예를 들어, 유저의 게임 접속이 끊기면 덩달아 플레이어도 월드에서 사라집니다. 다른 게임과 같이 플레이어가 월드에 남아있게하는 시스템을 플러그인으로 구현하기엔 어렵고 가능하더라도 원래의 구현에 기능을 덮어씌우는 방법으로 가능할 것 같습니다. 또한, 서버의 소스코드를 고쳐서 시스템을 바꿀 수도 있겠지만 이미 상용 제품의 소스코드는 많이 구현되어 있어서 뒤엎기에는 직접 개발하는 것보다 많은 시간이 예상됩니다.
둘째, 기존의 서버는 싱글쓰레드와 제한된 프레임으로 구현되어 있는 성능적인 구현을 개선하고 싶습니다. 마인크래프트는 50ms로 20FPS 정도인 제한된 프레임을 가지고 있습니다. CPU에는 정해진 쓰레드 개수가 있고 그 개수만큼의 쓰레드로만 운영하는 것이 물리적으로 가장 빠릅니다. 예를 들어, 16개의 쓰레드가 가장 빠른 CPU에서 쓰레드가 1개만 더 많아져도 느려집니다. 물론 인간이 이 변화를 캐치하는 것은 불가능하고 실제로는 먼지만큼 느려졌을 겁니다. 물리적으로는 명확히 느려진 게 확실하고 정말 1%의 주스까지 성능으로 사용하고 싶다면 컴퓨터의 정해진 자원에서 모두 다 사용하는 것이 바람직합니다. 극단적으로 말하자면 기존의 서버는 CPU 코어가 32개라면 1개 빼고는 모두 사용안하는 자원이 되버립니다. 그래서 마인크래프트 서버를 구성할 때 싱글코어가 가장 빠른 CPU로 맞추는 것이 최선이지만 그 속도에는 물리적인 한계가 있습니다. 그러면 플러그인에서 쓰레드를 만들어서 멀티쓰레딩을 실현하면 해결되지 않을까라고 생각하실 수도 있습니다. 이미 모든 엔티티의 물리를 담당하고 멀티플레이어 기능과 같이 근본적인 시스템을 관장하는 서버 자체가 싱글쓰레드이기 때문에 의미가 없습니다. 무작정 멀티쓰레딩을 한다면 동기화 문제를 해결하느라 더 비용을 지불해야 되는 상황이 무조건 올 겁니다.
마지막, 자바 언어와 자바 프로그램의 효율성과 성능적인 면이 아쉽습니다. 현재는 .NET으로 개발하고 있습니다. .NET을 사용하는 이유는 Visual Studio에서 지원하는 개발 툴이 압도적으로 좋습니다. 선택적으로 성능을 위해서 C/C++로 기능을 구현하여 불러와 사용할 수도 있습니다. 언어도 잘 만들어져서 개발하기 빠르고 쉽다고 판단하였습니다. 무엇보다 컴파일 언어라서 Maven 같이 클라우드 형태의 패키지를 다운받는 방식이나 애플리케이션을 실행하는데 불필요한 단계가 없기 때문에 성능이나 효율성도 더 낫다고 생각합니다.
만약 서버 개발에 관심이 있으신 분들은 아래의 연락처를 통해 메세지주시면 됩니다.
감사합니다.
<연락처>
Discord: welcomehyunseo
Email: welcomehyunseo@gmail.com