마인크래프트에서 서버를 만드는 방법
자신만의 서버는 세계와 게임 규칙에 대한 완전한 제어권을 제공합니다. 매달 구독료를 내지 않고도 친구들과 함께 플레이하고, 원하는 모든 수정 사항을 설치하며, 미니게임이나 기술 모음을 만들 수 있는 기회입니다. 서버는 컴퓨터에서 별도의 프로그램으로…
자신만의 서버는 세계와 게임 규칙에 대한 완전한 제어권을 제공합니다. 매달 구독료를 내지 않고도 친구들과 함께 플레이하고, 원하는 모든 수정 사항을 설치하며, 미니게임이나 기술 모음을 만들 수 있는 기회입니다. 서버는 컴퓨터에서 별도의 프로그램으로 실행됩니다. 서버가 게임 로직을 처리하고, 플레이어들의 클라이언트가 거기에 연결됩니다. 생성 과정은 코어 선택, 기본 설정 파일 구성, 네트워크 접근 개방으로 이루어집니다.
서버 코어 선택
코어 유형은 서버의 기능을 결정합니다. Forge 모드를 Paper에 설치하거나 플러그인을 Vanilla에 설치하는 것은 불가능합니다.
코어 유형 | 지원 | 어디에 적합한가 |
Vanilla | 데이터팩만 | 순수 생존, 스피드런. 최악의 최적화. |
Paper | 플러그인 (Bukkit/Spigot/Paper) | 공개 서버, 친구들과의 생존, 미니게임. 뛰어난 최적화. |
Purpur | 플러그인 (Paper) + 자체 설정 | Paper와 비슷하지만 메커니즘을 세밀하게 설정할 수 있습니다(예: 벌을 타는 것을 허용). |
Fabric | 모드 (Fabric) | 기술 서버(Carpet mod), 바닐라+ 모음, 최적화(Lithium). |
NeoForge / Forge | 모드 (Forge/NeoForge) | 새로운 차원, 메커니즘, 마법이 포함된 무거운 모드팩. |
대규모 글로벌 모드가 없는 비공개 서버의 90%에게 Paper은(는) 최적의 선택입니다. 플레이어의 클라이언트에 모드를 설치할 필요가 없으며(모든 것이 바닐라 클라이언트에서 작동), 영역 보호 플러그인을 지원하고 공식 코어보다 빠르게 작동합니다.
⚠️ 중요: 모드와 플러그인을 동시에 지원하는 하이브리드 코어(Arclight, Mohist)는 종종 모드의 메커니즘을 망가뜨리고 불안정성을 유발합니다. 플러그인이나 모드 중 한 가지만 선택하세요.
시스템 요구 사항 및 준비
서버는 메모리(RAM)와 프로세서 리소스를 소비합니다. 서버에서는 그래픽 카드가 중요하지 않습니다. 세계 생성은 전적으로 CPU에서 이루어집니다.
2~5명의 플레이어용 (Paper):
RAM: 2~3GB의 할당된 메모리.
CPU: 4코어 이상의 모든 최신 프로세서.
10명 이상의 플레이어 또는 무거운 모드팩용 (NeoForge):
RAM: 6~8GB의 할당된 메모리.
CPU: 코어당 높은 성능.
Java 설치
Minecraft 1.21+는 Java 21 을(를) 요구합니다(26.1+ 버전에는 Java 26이(가) 필요합니다). 서버는 클라이언트에 내장된 Java를 사용하지 않으므로 시스템에 별도로 설치해야 합니다.
Oracle 공식 사이트에서 JDK 21(또는 JDK 26)을 다운로드하세요.
설치하되, 설치 프로그램에서 “Add to PATH” 옵션을 반드시 활성화하세요.
터미널에서 확인하세요: java -version. 버전 21.0.x를 출력해야 합니다.
기본 설치 및 실행
Paper 코어의 설치 예시:
1단계. 코어 다운로드
공식 사이트로 이동하세요 papermc.io, 게임 버전(예: 26.1)을 선택하고 파일을 다운로드하세요. 서버용 빈 폴더를 만들고 파일을 그곳으로 옮기세요. 편의를 위해 이름을 server.jar로 변경하세요.
2단계. 실행 파일 생성
서버는 더블 클릭으로 실행되지 않습니다. 스크립트를 통해 메모리를 할당해야 합니다.
서버 폴더에 start.txt 텍스트 문서를 만드세요,
그것을 열고 코드를 붙여넣으세요:
DOS
java -Xmx4G -Xms4G -jar server.jar nogui
pause
-Xmx4G 매개변수는 최대 메모리 한도(4GB)를 설정합니다. -Xms4G는 시작 용량입니다. 파일을 저장하고 확장자를 .txt에서 .bat으로 변경하세요(Windows용).
Linux/macOS에서는 start.sh을(를) 만들고 #!/bin/bash을(를) 첫 번째 줄로 추가하세요.
3단계. EULA 동의
start.bat을 실행하세요. 콘솔이 몇 초 동안 열렸다가 닫힙니다. 새 파일 eula.txt를 여세요. eula=false 줄을 eula=true로 변경하세요. 이것은 개발자의 라이선스 계약에 대한 공식 동의입니다.
4단계. 완전한 실행
start.bat을 다시 실행하세요. 서버가 세계와 설정 파일을 생성합니다. 콘솔에 Done! 메시지가 나타납니다. 서버는 반드시 콘솔의 stop 명령으로만 종료하세요. 그렇지 않으면 세계가 손상될 수 있습니다.
설정 server.properties
파일 server.properties은(는) 서버의 주요 설정을 포함합니다. 이를 열려면 파일을 마우스 오른쪽 버튼으로 클릭하고 “연결 프로그램…”을 선택한 다음 “메모장” 또는 다른 텍스트 편집기를 선택하세요.\
아래는 기본 설정 표입니다 server.properties 및 각 매개변수에 대한 설명:
매개변수 | 값 | 설명 |
accepts-transfers | FALSE | 이 서버가 다른 서버로부터의 플레이어 리디렉션(전송)을 받아들일지 여부를 결정합니다. |
allow-flight | FALSE | 생존 모드에서 서버 내 비행을 허용하거나 금지합니다(플레이어가 타사 수정 사항을 사용하는 경우). false일 때 서버는 그러한 플레이어를 추방합니다. |
broadcast-console-to-ops | TRUE | 활성화되면 콘솔 명령 실행 결과가 서버의 모든 운영자(관리자)에게 채팅으로 전송됩니다. |
broadcast-rcon-to-ops | TRUE | 이전 항목과 동일하지만 원격 접근(RCON)을 통해 전송된 명령에 적용됩니다. |
bug-report-link | (비어 있음) | 오류나 충돌로 인해 서버에서 연결이 끊길 때 플레이어에게 화면에 표시될 링크입니다. |
debug | FALSE | 확장된 오류 로깅을 위한 디버그 모드(debug mode)를 활성화합니다. |
difficulty | easy | 서버의 난이도 수준(peaceful — 평화, easy — 쉬움, normal — 보통, hard — 어려움). |
enable-code-of-conduct | FALSE | 접속 시 플레이어에게 Microsoft 행동 강령(Code of Conduct) 동의를 요구할지 여부. |
enable-jmx-monitoring | FALSE | 서버 성능 모니터링을 위해 JMX(Java Management Extensions) 사용을 허용합니다. |
enable-query | FALSE | 타사 모니터링 사이트가 서버에 대한 정보(접속자, 플러그인)를 얻을 수 있도록 하는 GameSpy4(Query) 프로토콜을 활성화합니다. |
enable-rcon | FALSE | 머신 터미널에 직접 접근하지 않고 관리할 수 있도록 서버 콘솔에 대한 원격 접근(RCON)을 활성화합니다. |
enable-status | TRUE | 서버가 게임 클라이언트의 서버 목록에 «온라인»으로 표시되도록 합니다. |
enforce-secure-profile | TRUE | 플레이어가 서명된 Mojang 프로필 공개 키를 갖도록 요구합니다(채팅 메시지 위조 방지). |
enforce-whitelist | FALSE | true이면 이 목록이 활성화될 때 서버는 «화이트리스트»(whitelist)에 없는 플레이어를 강제로 추방합니다. |
entity-broadcast-range-percentage | 100 | 서버가 클라이언트에 엔티티(몹, 다른 플레이어, 아이템)에 대한 데이터를 전송하는 거리(백분율)를 제어합니다. |
force-gamemode | FALSE | 플레이어가 서버에 접속할 때마다 기본 게임 모드를 강제로 설정합니다. |
function-permission-level | 2 | 데이터팩(datapacks)을 통해 실행되는 함수에 대한 접근 권한 수준(1에서 4까지). |
gamemode | survival | 기본 게임 모드(survival, creative, adventure, spectator). |
generate-structures | TRUE | 세계에 구조물(마을, 던전, 사원 등)이 생성될지 여부를 결정합니다. |
generator-settings | {} | 세계 생성기에 대한 특별 설정(일반적으로 커스텀 세계에 사용됨). |
hardcore | FALSE | «하드코어» 모드. true이면 사망 후 플레이어는 영구적으로 관전자 모드로 전환됩니다. |
hide-online-players | FALSE | true이면 멀티플레이어 게임 메뉴에서 활성 플레이어의 닉네임 목록을 숨깁니다. |
initial-disabled-packs | (비어 있음) | 새 세계를 만들 때 비활성화될 데이터팩 목록입니다. |
initial-enabled-packs | vanilla | 기본적으로 활성화된 데이터팩 목록(기본 게임 «vanilla»). |
level-name | world | 세계의 파일이 저장되는 폴더의 이름입니다. |
level-seed | (비어 있음) | 세계 생성을 위한 시드(숫자 씨앗). 비어 있으면 무작위로 생성됩니다. |
level-type | minecraft\:normal | 세계 생성 유형(normal — 일반, flat — 평지, large_biomes — 큰 생물군계, amplified — 산악). |
log-ips | TRUE | 플레이어의 IP 주소가 서버 로그 파일에 기록될지 여부를 결정합니다. |
management-server-* | (다양함) | 외부 서버 관리 도구를 위한 매개변수 그룹(포트, 키, 설정)(드물게 사용됨). |
max-chained-neighbor-updates | 1000000 | 서버 멈춤을 방지하기 위한 연쇄 블록 업데이트 한도(예: TNT 폭발이나 복잡한 레드스톤 회로 시). |
max-players | 20 | 서버에 동시에 접속할 수 있는 최대 플레이어 수입니다. |
max-tick-time | 60000 | 한 «틱»의 최대 실행 시간(밀리초). 서버가 이 시간보다 오래 «생각»하면 자동으로 종료됩니다(«죽은» 멈춤 방지). |
max-world-size | 29999984 | 세계 경계의 최대 반경(블록 단위). |
motd | A Minecraft Server | Message Of The Day. 플레이어가 서버 목록에서 보는 서버의 설명/이름입니다. |
network-compression-threshold | 256 | 서버가 인터넷 트래픽을 절약하기 위해 압축을 시작하는 최소 패킷 크기(바이트)입니다. |
online-mode | TRUE | 매우 중요한 매개변수입니다. true이면 — 정품 게임을 가진 플레이어만 허용합니다. false이면 — «불법 복제» 런처를 사용하는 플레이어의 접속을 허용합니다. |
op-permission-level | 4 | 운영자의 기본 권한 수준(1-4, 여기서 4는 stop을 포함한 모든 명령에 대한 접근을 제공). |
pause-when-empty-seconds | -1 | 플레이어가 없을 때 서버가 세계를 «일시 정지»시키는 유휴 시간(초)(-1은 비활성화를 의미). |
player-idle-timeout | 0 | 비활성(AFK) 플레이어가 자동으로 추방되는 시간(분). 0 — 비활성화. |
prevent-proxy-connections | FALSE | VPN이나 프록시를 사용하는 플레이어의 연결을 금지합니다(Mojang 인증 시스템과 연동하여 작동). |
query.port | 25565 | Query 프로토콜용 포트(enable-query 매개변수로 활성화된 경우). |
rate-limit | 0 | 클라이언트에서 서버로의 최대 패킷 수입니다. 패킷 스팸 방지를 위해 사용됩니다(0 — 비활성화). |
rcon.password | (비어 있음) | 서버 콘솔에 대한 원격 접근 비밀번호(enable-rcon=true인 경우 입력해야 함). |
rcon.port | 25575 | RCON 연결용 포트입니다. |
region-file-compression | deflate | 세계 파일(지역)의 압축 알고리즘입니다. deflate가 표준이며 가장 널리 사용됩니다. |
require-resource-pack | FALSE | true이면 플레이어가 서버 리소스 팩 다운로드에 동의할 때까지 서버에 접속할 수 없습니다. |
resource-pack | (비어 있음) | 플레이어에게 제공될 서버 리소스 팩의 .zip 아카이브에 대한 직접 링크(URL)입니다. |
resource-pack-id | (비어 있음) | 리소스 팩의 고유 식별자(UUID)입니다. |
resource-pack-prompt | (비어 있음) | 리소스 팩 다운로드를 제안받을 때 플레이어가 보게 될 메시지입니다(예: «더 나은 게임 환경을 위해 팩을 다운로드해 주세요»). |
resource-pack-sha1 | (비어 있음) | 리소스 팩 아카이브의 SHA-1 해시입니다. 팩이 변경되지 않은 경우 클라이언트가 팩을 다시 다운로드하지 않도록 하는 데 필요합니다. |
server-ip | (비어 있음) | 서버를 «바인딩»하기 위한 IP 주소입니다. 일반적으로 서버가 머신의 모든 네트워크 인터페이스에서 작동하도록 비워 둡니다. |
server-port | 25565 | 플레이어가 연결할 서버의 기본 포트입니다. |
simulation-distance | 10 | 플레이어 주변에서 세계가 시뮬레이션되는 반경(청크 단위)입니다(식물이 자라고, 몹이 움직이며, 메커니즘이 작동). |
spawn-protection | 16 | 스폰 구역의 보호 반경(블록 단위)입니다. 이 구역에서는 일반 플레이어가 블록을 부수거나 설치할 수 없습니다. |
status-heartbeat-interval | 0 | 서버 상태에 대한 확장 데이터 전송 간격입니다(일반적으로 사용되지 않음). |
sync-chunk-writes | TRUE | 청크를 디스크에 저장하는 것을 동기식으로 만듭니다(충돌 시 세계 데이터 손실을 방지하는 데 더 안정적이지만 서버를 약간 느리게 할 수 있음). |
text-filtering-config | (비어 있음) | 채팅에서 비속어를 필터링하는 타사 시스템의 설정입니다. |
text-filtering-version | 0 | 텍스트 필터링 시스템의 API 버전입니다. |
use-native-transport | TRUE | 서버가 시스템의 최적화된 네트워크 라이브러리(예: Linux용 epoll)를 사용할 수 있게 하여 네트워크 성능을 향상시킵니다. |
view-distance | 10 | 서버가 클라이언트에 전송하는 렌더링 거리(청크 단위)입니다(플레이어의 시야 거리가 이에 기반함). |
white-list | FALSE | «화이트리스트» 활성화. true이면 닉네임이 이 목록에 추가된 플레이어만 서버에 접속할 수 있습니다(/whitelist add <닉네임> 명령으로). |
⚠️ 중요: online-mode=false로 설정하면 어떤 플레이어든 관리자의 닉네임으로 접속할 수 있습니다. 보호를 위해 반드시 인증 플러그인(예: AuthMe Reloaded)을 설치하세요.
플러그인 설치 방법
플러그인은 플레이어가 모드를 설치할 필요 없이 서버의 기능을 확장합니다. Paper, Purpur, Spigot에서만 작동합니다.
플러그인을 .jar 형식으로 다운로드하세요.
파일을 서버 내부의 plugins 폴더에 넣으세요.
서버를 재시작하세요(stop -> start.bat).
plugins 폴더에 플러그인 설정이 들어 있는 폴더가 나타나며, 거기서 설정을 편집합니다(일반적으로 config.yml 파일에서).
모드 설치 방법
모드로 플레이하려면 Fabric 또는 NeoForge 코어가 필요합니다. 모든 플레이어는 자신의 클라이언트에 동일한 모드 세트를 가지고 있어야 합니다.
Fabric의 경우:
설치 프로그램을 다운로드하세요 fabricmc.net.
실행하고 «Server» 탭을 선택한 다음 게임 버전과 빈 폴더를 지정하세요. «Install»을 누르세요.
다운로드한 fabric-server-launch.jar를 start.bat을 통해 실행하세요.
모드를 생성된 mods 폴더에 넣으세요. Fabric의 경우 Fabric API 모드가 반드시 필요합니다.
NeoForge의 경우:
설치 프로그램을 다운로드하세요 neoforged.net.
실행하고 «Install server»를 선택한 다음 폴더를 지정하세요.
설치 후 run.bat 파일을 실행하세요(설치 프로그램이 직접 생성함).
서버 모드를 mods 폴더에 배치하세요.
클라이언트 모드(미니맵, 셰이더, Sodium 같은 표시 최적화)를 서버에 설치하는 것은 금지되어 있습니다. 실행 시 코어 충돌을 일으킵니다.
플레이어를 서버에 들이는 방법
방법 1: Port Forwarding
핑이 가장 낮은 최고의 방법입니다. 라우터에 대한 접근이 필요합니다.
라우터 설정 패널에 들어가세요(브라우저에서 192.168.1.1).
«Port Forwarding» 또는 «NAT» 섹션을 찾으세요.
규칙을 만드세요: 포트 25565, 프로토콜 TCP/UDP, 로컬 IP — 당신의 컴퓨터 주소(ipconfig로 확인).
플레이어는 당신의 외부 IP 주소로 연결합니다(사이트 2ip.ua).
방법 2: 터널 (Playit.gg)
제공업체가 포트를 차단하는 경우.
프로그램을 다운로드하세요 playit.gg.
서버와 함께 실행하세요. 브라우저에서 페이지를 엽니다.
가입하면 서비스가 공개 주소를 제공합니다(예: auto-bridge.playit.gg).
플레이어는 이 주소를 게임에 입력합니다.
방법 3: Radmin VPN
모든 컴퓨터에 Radmin VPN을 설치하세요.
네트워크를 만들고 친구들에게 이름을 알려주세요.
그들이 네트워크에 참여합니다.
플레이어는 Radmin VPN에 표시된 당신의 PC IP 주소로 연결합니다.
기술적 세부 사항 / 내부 작동 방식
Minecraft 서버는 단일 스레드 애플리케이션입니다. 몹의 움직임, 물리, 메커니즘을 처리하는 주 게임 루프(tick loop)는 전적으로 프로세서의 한 코어에서 실행됩니다.
게임은 초당 20틱(TPS — Ticks Per Second)을 실행하려고 합니다. 한 틱에는 50밀리초가 할당됩니다. 계산에 더 많은 시간이 걸리면 TPS가 떨어지고 플레이어는 지연을 느낍니다. 바로 그렇기 때문에 서버에서는 단일 코어의 클럭 속도가 전체 코어 수보다 더 중요합니다.
Paper 같은 코어에서의 멀티스레딩은 디스크에서 청크를 비동기적으로 로드하고 네트워크를 처리하는 데에만 사용되며, 게임 로직 자체는 단일 스레드에 남아 있습니다.
기본 관리자 명령
서버 콘솔에 입력합니다(/ 없이).
동작 | 명령 |
운영자 권한 부여 | op [닉네임] |
권한 회수 | deop [닉네임] |
화이트리스트 활성화 | whitelist on |
화이트리스트에 추가 | whitelist add [닉네임] |
플레이어 추방 | kick [닉네임] [사유] |
플레이어 차단 | ban [닉네임] [사유] |
세계 수동 저장 | save-all |
대안으로서의 호스팅
가정용 컴퓨터가 약하다면 서버를 임대할 수 있습니다.
유형 | 대표 업체 | 장점 | 제한 사항 |
무료 | Aternos, FalixNodes | 비용을 지불할 필요 없음 | 시작 대기열, 부하 시 랙, 플레이어가 없으면 서버가 종료됨. |
저렴한 유료 | PebbleHost, Bloom.host | GB당 1$부터, 24/7 운영 | 매달 비용을 지불해야 함. |
VDS/VPS | Hetzner, Oracle | 머신에 대한 완전한 제어 | Linux 관리 기술이 필요함. |
흔한 오류와 이를 방지하는 방법
오류 1: FAILED TO BIND TO PORT. 포트 25565가 이미 사용 중이기 때문에 서버가 시작되지 않습니다. 두 개의 start.bat을 실행할 때 자주 발생합니다. 작업 관리자를 열고 모든 Java(TM) Platform SE binary 프로세스를 종료하세요.
오류 2: UnsupportedClassVersionError. Java 버전이 오래되었습니다. 1.20.5+에는 Java 21이, 1.16.5에는 — Java 11이 필요합니다.
오류 3: 빠른 비행 시 랙. 서버가 새로운 청크를 생성하는 데 따라가지 못합니다. Chunky 플러그인을 설치하고 반경 5000블록 내에서 세계를 미리 생성하세요.
오류 4: 실행 시 Fabric/Forge 서버 충돌. mods 폴더에 클라이언트 모드(미니맵, Sodium)가 들어갔습니다. 서버에는 그래픽 인터페이스가 없으며 이를 로드하려고 할 때 충돌합니다.
오류 5: 연결 시 Invalid session 오류. 플레이어가 online-mode=true가 활성화된 상태에서 불법 복제 런처를 사용합니다. server.properties에서 값을 false로 변경하세요.
결론
Paper 기반의 자체 서버는 친구들과의 비공개 생존에 최적의 선택입니다. 뛰어난 성능을 제공하고 게임 클라이언트를 변경하지 않고도 플러그인을 추가할 수 있기 때문입니다. 새로운 메커니즘이 있는 대규모 모음의 경우 서버와 플레이어 간 모드 동기화가 필요한 Fabric 또는 NeoForge를 사용해야 합니다. 가정용 서버 설정의 가장 큰 과제는 포트를 올바르게 개방하는 것이지만, Playit.gg 같은 서비스를 사용하면 제공업체가 차단한 포트 문제를 해결할 수 있습니다. 가정용 PC의 성능이 부족하다면 저렴한 유료 호스팅으로 전환하면 24/7 안정적인 접속이 보장됩니다.
아직 댓글이 없어요. 가장 먼저 의견을 남겨 보세요.