본 문은 본격적으로 서버를 만들어 운영하려는 사람에게 몇 가지 정보를 알려드리기 위해 제작되었습니다.
대부분의 마인크래프트 서버 전문가 분들에게는 필요없을 정보임을 밝힙니다.
목차
1] 서버에 대한 기본 지식
2] 서버 구현체(버킷)
3] 서버(서버컴퓨터)
3-1] 호스팅
4] 접속 ip 주소 및 도메인
5] 디도스 및 방어
6] 팁 및 마무리
1] 서버에 대한 기본 지식
서버는 기본적으로
- 물리적인 서버
- 플레이어들이 접속하는 서버를 구현하는 구현체
- 해당 서버에서 다양한 기능 등을 구현하는 플러그인(스크립트 및 데이터팩 포함)
- 플레이어들이 접속하는 주소이자 물리적인 서버의 위치를 나타내는 ip주소(도메인)
등으로 구성되어 있습니다.
위 구성 요소에서 하나라도 차질이 있는 경우 자신이 기획 및 운영하는 서버에 문제가 생깁니다.
2] 서버 구현체(버킷)
서버 구현체란 마인크래프트의 멀티 서버를 구현할 때 구현체 마다 조금씩은 다른 목적을 가지고 서버를 구현하는 파일입니다.
보통 구현체는 .jar 파일로 구성되어 있으며 대표적인 구현체는 spigot, paper, folia, fabric, sponge, forge 등이 있습니다.
구현체를 구분할 때는 보통 바닐라 구현체, 모드 구현체, 통합 구현체 등으로 분리되며 특징은 다음과 같습니다.
바닐라 구현체 - 모드를 사용하지 않고 서버의 플러그인만을 이용하여 플레이의 '기능'적인 부분을 변경한 구현체입니다.
해당 구현체에는 spigot, paper, folia 등이 유명하며 일반 랜서버와의 차이점이라면 일반적으로 플러그인의 지원, 구현체 자체의 최적화 등이 있습니다.
모드 구현체 - 플러그인을 사용하지 않고 모드를 사용한 서버인 일명 '모드서버'를 제작 할 때 사용되는 기본적인 구현체입니다.
보통 해당하는 모드로더에서 지원하는 경우가 많으며 일반적인 경우 랜서버의 구현방식을 거의 그대로 사용하는 경우가 많아 최적화 적인 면에서 특이사항이 크게 존재하지 않습니다. ( 이러한 이유로 서버 최적화 모드를 혼용하는 경우가 많습니다. )
통합 구현체 - 특수한 목적으로써 플러그인과 모드를 동시에 지원하기 위하여 사용됩니다.
해당 구현체에는 sponge-forge, arclight, mohist, catserver 등이 있거나 있었으며 플러그인과 모드가 동시에 사용가능하지만 구현 방식등으로 인하여 일반적으로 호환성이 떨어지는 편입니다.
3] 서버(서버컴퓨터)
마인크래프트를 포함한 대부분의 게임 서버는 당연히 멀티플레이의 지원 및 게임 시스템의 구현을 위해 물리적인 컴퓨터가 존재합니다.
일상용으로 사용하는 컴퓨터도 서버 목적으로 사용이 가능하나 일반적인 게임 서버들은 구현하는 서버의 성능 및 유지비용 절감, 서버 내구성 향상 등의 목적으로 '저전력 다코어' cpu를 사용하는 서버가 대다수 입니다.
다만 자바 마인크래프트 서버의 구현 방식의 특징 상 단순 코어의 갯수보다는 코어 하나 하나의 성능이 중요한 경우가 많아(folia 제외) 보통 일정 이상 규모의 서버에서는 2가지 선택을 합니다.
첫번째는 cpu의 클럭이 높은 고클럭 고성능 서버를 사용하는 경우, 나머지 하나는 서버 구현체를 folia 등을 사용하여 다코어 성능을 사용하는 서버 구현체로 변경하여 성능을 챙기는 선택입니다.
그리고 서버는 cpu도 중요하지만 메모리 또한 중요합니다. cpu는 계산만을 처리하는 경우가 대부분이며,서버 내 플레이어의 현재 위치, 소유아이템 목록, 플레이어가 하는 모든 채팅 및 행위의 일시 저장을 위해 메모리(RAM)을 사용합니다.
그리하여 평균적으로 플레이어 1명당 적게는 128mb 많게는 1gb 가깝게 메모리를 차지하며 보통 해당 부분은 플레이어 청크반경에 영향을 받는 경우가 많습니다.
일반적인 서버는 위 CPU와 RAM의 성능 지표에 따라 성능 및 가격이 달라지며 접속 플레이어의 수, 들어간 플러그인 및 모드에 따라 달라지기도 합니다.
3-1] 호스팅
서버를 호스팅 받는 다는 것은 일반적으로 물리적인 서버컴퓨터를 빌려 해당 서버에 자신의 서버 구현체 및 구성 요소를 넣어 가동하는 것을 의미하며 일반적으로는 서버 성능이 올라감에 따라 자연스럽게 가격이 오르게 되어 있습니다.
서버를 구매하지 않고 호스팅 받는 사유는 여러 사유가 있지만 대표적으로 3가지 사유가 있습니다.
1. 물리적인 서버의 관리 - 서버는 '컴퓨터' 이며 발열관리 및 서버 오류등의 문제를 막기 위해 꾸준한 관리가 필요합니다. 호스팅 받는 경우 호스팅 업체에서 해당 부분을 관리함으로 관리등에 소요되는 노력 및 인력을 감축 할 수 있습니다.
2. 서버의 가격 문제 - 상용 개인 cpu가 아닌 '서버용 CPU'는 기본적으로 개인이 사용하는 것이 아닌 '기업 혹은 사업체'가 사용하는 것을 전제로 만들어져 개인이 사용하기에는 과도한 성능 및 가격을 가지는 경우가 대부분입니다. 작성일 기준 최근에 서버등에 사용하는 AMD EPYC 시리즈 중 최저가의 제품이 84만원 정도 하며 해당 부품을 제외한 메인보드, 메모리 등 다른 부품의 가격 까지 합산하는 경우 가격이 약 200+정도 됩니다. 연령이 적은 사람이 접근하기에는 큰 금액이며 해당 부품으로 조립된 '서버'는 일반적으로 게임을 하기에는 적합하지 않기에 구매하기에는 꺼려지는 가격입니다.
3. 유지비용의 문제 - 일반적으로 서버 하나를 구동하기 위하여 사용되는 유지비용 중 가장 큰 부분을 차지하는 것이 '전기세' 입니다. 호스팅 업체등에서 사용하는 전기와 여러분이 가정집에서 사용하는 전기는 전기요금이 달라 유지비용 자체가 다르며 일반적으로 플레이어 50명 규모의 서버를 24시간 구동 할 때 가정용 전기 기준 한달 4 - 10만원 가량의 전기가 필요한 것으로 산정됩니다. 업체 기준으로는 2-6만원 정도로 해결되는 부분이고요. 그렇기에 여러분이 '사업체'를 구성하여 대량의 서버를 구동하고 세금을 납부하는 등의 업무까지 처리하며 '기업용 전기'를 사용하는게 아닌 이상 호스팅을 받는 쪽이 유리한 경우가 많습니다.
물론 해당의 경우는 24시간 구동, 50~100+ 규모의 서버 기준이므로 소규모 서버를 구동하는 경우는 개인 컴퓨터를 이용하여도 무관하다 생각하셔도 좋습니다.
4] 접속 ip 및 도메인
모든 통신망에 접속된 기기는 ip 주소라는 일종의 집주소같은 개념의 주소를 발급받습니다. 해당 주소는 해당 기기의 위치, 연결된 통신망 등에 따라 달라지며 호스팅을 받는 경우 공인ip 혹은 외부ip 등으로 표현되어 발급받게 됩니다.
서버에 접속하려는 모든 기기 및 플레이어는 우리가 집주소를 기반으로 찾아가듯 해당 주소가 있어야 서버에 접속이 가능하며 해당 주소를 일일히 기억하기 어려워 현실의 집주소 검색기 개념의 도메인서버에 등록하여 도메인(사실상의 별명) 을 발급받아 사용합니다.
일반적으로 도메인은 결국 ip 주소의 별명에 가까운 존재이기에 도메인을 발급받더라도 일반적으로 ip 주소를 노출한 것과 다른것이 없으며 보통 '편리함'을 위해 사용됩니다.
하지만 해당하는 이유로 인해 모든 공개 서버는 '디도스' 공격의 위협에 노출되어 있다는 점을 염두하시길 바랍니다.
5] 디도스 및 방어
디도스란 간단히 설명하면 '노쇼예약' 행위를 반복하여 서버와 서버에 연결된 통신망에 과부하를 주는 행위입니다. 모든 서버는 기본적으로 허용된 루트로의 모든 접속시도가 '올바른' 접속시도인지 '디도스공격'을 위한 접속시도인지 구분하는 능력이 없습니다. 사유는 모든 접속 행위에 대해 구분하는 경우 해당 기능만으로도 사용되는 성능이 해당 서버가 수행하는 기능으로써 사용되는 성능보다 많아지는 경우가 많아 보안이 중요한 은행, 정부 등의 서버를 제외하고는 구현이 잘 되지 않는 편입니다.
마인크래프트 서버의 관점에서 디도스를 막는 방법은 보통 2가지 입니다.
1. 부하분산
보통 마인크래프트 서버를 향한 디도스 공격은 서버 자체를 노리는 경우는 잘 없습니다. 서버 자체를 다운시키려면 서버에 공격하는 모든 트래픽에 대하여 마인크래프트 계정 등이 필요하며( 정품 온라인 서버 기준 ) 공격행위로 인한 득보다 실이 더 큰 경우가 많기 때문입니다.
그리하여 보통 마인크래프트 서버를 향한 디도스 공격은 서버가 아닌 라우터(서버 연결 통로)를 향한 공격이며 부하분산은 서버 하나에 여러 라우터를 두고 과한 트래픽이 몰려오는 경우 트래픽을 여러 라우터로 분산하여 라우터가 먹통이 되는 것을 막는 방식입니다.
2. 프록시 서버 사용
이 방식은 서버 앞에 '프록시' 서버를 두어 서버 본체에 대한 ip주소를 획득하지 못하게 하여 공격을 막는 방식입니다. 일반적으로 프록시 서버는 성능을 크게 먹지 않고 본서버에 대한 공격을 막을 수 있어 '가성비' 적으로는 매우 훌륭한 방식이지만 결국 서버를 경유하여 접근하기에 플레이어들의 평균적인 핑(응답속도)가 증가하는 문제가 있습니다.
해당 방식의 구현방식은 디도스 방어 프록시 서버 업체( tcpshield )를 이용하거나
디도스 방어가 잘 되어있는 개별서버에 프록시 서버 구현체( velocity )를 이용하여 직접 구성하는 방식이 있습니다.
6] 팁 및 마무리
해당 목차에서는 제가 서버를 여럿 구성하며 얻은 팁 등을 알려드리겠습니다.
호스팅를 사용하는 경우 서버 업체의 디도스 방어를 구매하여 사용하여도 좋지만 소규모인 경우 tcpshield의 무료플랜을 사용해 보는 것도 방법임을 알려드립니다. 일반적인 방송 시청자 참여 서버에서는 비용절감으로 사용 할 수 있으니 참고하시면 좋습니다.
만약 fabric 모드서버의 경우에는 velocity(tcpshield 적용) - fabric velocity 지원 모드가 있으니 참고하시면 좋습니다.
tcpshield의 무료플랜으로 접속이 안되는 플레이어가 생기거나 유료플랜 전환이 고려될 정도의 접속량이라면 개인 프록시 서버를 사용하는 쪽이 더 가성비나 성능면에서 더 좋을 수 있습니다.
일반적으로 추천드리는 방법은 저성능 velocity 전용 디도스 방어서버에 velocity를 사용하여 구현하는 방법인데 aws(아마존), gcp(구글), ncp(네이버)에 무료 테스트 기간을 주니 해당 기능을 사용하여 확인 후 성능과 가격적인 부분에서 가장 마음에 드는 쪽을 사용하시면 됩니다.
서버 구현체의 경우 사실상 100+ 서버에서는 folia를 쓰는 쪽이 성능과 가격 면에서 확실히 도움이 되긴 합니다. 다만 folia가 아직까지는 호환성 부분이 미흡하니 자신이 구현하려는 서버 기능이 구현 가능한지 확인 후 사용하시면 좋을 것 같습니다.
folia 사용 시 물리 서버 구매 비용이 100+까지 내려갈 수 있습니다.
마무리로 해당 모든 정보는 개인적인 경험과 지식으로 작성되어 오류나 틀린 부분이 있을 수 있으며 만약 자신이 아는 것과 다르거나 틀리다고 생각이 드신다면 댓글로 남겨 다른 분들에게 공유해주시면 감사하겠습니다.
장문의 글 읽어주셔서 감사하고 수고하셨습니다.

댓글이 없습니다.
새로운 댓글을 등록해 주세요!