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