๐ฎ 2024๋ ๋ง์ธํฌ๋ํํธ Paper ์๋ฒ ๊ตฌ์ถ์ ๋ชจ๋ ๊ฒ: 1.21.3 ์๋ฒฝ ๊ฐ์ด๋ (์ด๋ณด์์ฉ)
๋ชฉ์ฐจ
- ์๊ฐ
- Paper ์๋ฒ๋?
- ์์คํ ์๊ตฌ์ฌํญ
- ์๋ฒ ์ค์น ์ค๋น
- Paper ์๋ฒ ์ค์น
- ์๋ฒ ์ต์ ํ
- ํ์ ํ๋ฌ๊ทธ์ธ
- ๊ณ ๊ธ ์ค์
- ๋ฌธ์ ํด๊ฒฐ
- ๋ณด์ ์ค์
- ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
- ๋ฐฑ์ ์์คํ
- ๊ฒฐ๋ก
์๊ฐ
์๋ ํ์ธ์! ์ค๋์ ๋ง์ธํฌ๋ํํธ 1.21.3 ๋ฒ์ ์ฉ Paper ์๋ฒ๋ฅผ ์ค์นํ๊ณ ์ด์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ฐ์ด๋๋ฅผ ๋ฐ๋ผํ์๋ฉด, ์ด๋ณด์๋ ์์ ์ ์ธ ๋ง์ธํฌ๋ํํธ ์๋ฒ๋ฅผ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ํนํ Paper ์๋ฒ๋ ๋ฐ์ด๋ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ์ ๊ณตํ๋ฏ๋ก, ๋ง์ ํ๋ ์ด์ด๋ค์๊ฒ ์ธ๊ธฐ ์๋ ์ ํ์ ๋๋ค.
Paper ์๋ฒ๋?
Paper ์๋ฒ๋ Spigot์ ๊ธฐ๋ฐ์ผ๋ก ํ ๊ณ ์ฑ๋ฅ ๋ง์ธํฌ๋ํํธ ์๋ฒ ์ํํธ์จ์ด์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ๋ค์ด ์์ต๋๋ค:
- ๋ฐ์ด๋ ์ฑ๋ฅ ์ต์ ํ
- ๊ด๋ฒ์ํ ํ๋ฌ๊ทธ์ธ ์ง์
- ๋น ๋ฅธ ๋ณด์ ์ ๋ฐ์ดํธ
- ํ์ฑํ๋ ์ปค๋ฎค๋ํฐ ์ง์
- ์์ธํ ์๋ฒ ์ค์ ์ต์
์์คํ ์๊ตฌ์ฌํญ
์์ ์ ์ธ Paper ์๋ฒ ์ด์์ ์ํ ์ต์ ์์คํ ์๊ตฌ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
์ต์ ์ฌ์
- CPU: ์ต์ ๋์ผ ์ฝ์ด ํ๋ก์ธ์ (3.0GHz ์ด์)
- RAM: 4GB (์๋ฒ ์ ์ฉ)
- ์ ์ฅ๊ณต๊ฐ: 10GB ์ด์์ SSD
- ๋คํธ์ํฌ: ์ ๋ก๋ ์๋ 5Mbps ์ด์
- ์ด์์ฒด์ : 64๋นํธ Windows/Linux/macOS
๊ถ์ฅ ์ฌ์
- CPU: ์ต์ ์ฟผ๋ ์ฝ์ด ํ๋ก์ธ์ (3.5GHz ์ด์)
- RAM: 8GB ์ด์ (์๋ฒ ์ ์ฉ)
- ์ ์ฅ๊ณต๊ฐ: 20GB ์ด์์ NVMe SSD
- ๋คํธ์ํฌ: ์ ๋ก๋ ์๋ 10Mbps ์ด์
- ์ด์์ฒด์ : Ubuntu 22.04 LTS ๋๋ Windows Server 2022
์๋ฒ ์ค์น ์ค๋น
Java ์ค์น
๋จผ์ ์ต์ ๋ฒ์ ์ Java๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
Windows์ ๊ฒฝ์ฐ:
- Adoptium ์น์ฌ์ดํธ ๋ฐฉ๋ฌธ
- Java 17 ๋๋ ๊ทธ ์ด์ ๋ฒ์ ๋ค์ด๋ก๋
- ์ค์น ํ์ผ ์คํ ๋ฐ ์ค์น ์๋ฃ
- ์์คํ ํ๊ฒฝ ๋ณ์ ํ์ธ
Linux์ ๊ฒฝ์ฐ:
sudo apt update
sudo apt install openjdk-17-jdk
์์ ๋๋ ํ ๋ฆฌ ์์ฑ
์๋ฒ ํ์ผ์ ์ ์ฅํ ์ ์ฉ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
Windows:
mkdir C:\minecraft-server
cd C:\minecraft-server
Linux:
mkdir ~/minecraft-server
cd ~/minecraft-server
Paper ์๋ฒ ์ค์น
Paper ๋ค์ด๋ก๋
์ต์ Paper ์๋ฒ๋ ๋ค์ ๋งํฌ์์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค:
- ๊ณต์ ์น์ฌ์ดํธ: https://papermc.io/downloads
- ์ง์ ๋ค์ด๋ก๋ ๋งํฌ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฒ์์ด ์ถ์ฒ: "papermc 1.21.3 download github"
์์ ์คํฌ๋ฆฝํธ ์์ฑ
Windows (start.bat)
@echo off
java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar nogui
pause
Linux (start.sh)
#!/bin/bash
java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar nogui
์ด๊ธฐ ์ค์
์๋ฒ๋ฅผ ์ฒ์ ์คํํ๋ฉด ๋ค์ ํ์ผ๋ค์ด ์์ฑ๋ฉ๋๋ค:
- server.properties
- bukkit.yml
- spigot.yml
- paper.yml
- eula.txt
eula.txt ํ์ผ์ ์ด์ด eula=false
๋ฅผ eula=true
๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
์๋ฒ ์ต์ ํ
server.properties ์ต์ ํ
view-distance=8
simulation-distance=6
network-compression-threshold=256
max-players=20
entity-broadcast-range-percentage=100
spawn-protection=16
max-world-size=29999984
paper.yml ์ต์ ํ
max-auto-save-chunks-per-tick: 6
max-entity-collisions: 2
grass-spread: 3
container-update: 1
hopper:
disable-move-event: true
max-tick-time:
tile: 1000
entity: 1000
chunk-system:
min-load-radius: 2
gen-queue-size: 8
bukkit.yml ์ต์ ํ
chunk-gc:
period-in-ticks: 400
spawn-limits:
monsters: 50
animals: 10
water-animals: 5
water-ambient: 20
water-underground-creature: 5
ambient: 5
ticks-per:
animal-spawns: 400
monster-spawns: 100
water-spawns: 400
water-ambient-spawns: 400
water-underground-creature-spawns: 400
ambient-spawns: 400
ํ์ ํ๋ฌ๊ทธ์ธ
์์ ์ ์ธ ์๋ฒ ์ด์์ ์ํ ํ์ ํ๋ฌ๊ทธ์ธ๋ค์ ๋๋ค:
1. EssentialsX
- ๊ธฐ๋ณธ์ ์ธ ์๋ฒ ๋ช ๋ น์ด ์ ๊ณต
- ๋ค์ด๋ก๋: SpigotMC
- ์ฃผ์ ์ค์ :
# config.yml chat: format: '<{DISPLAYNAME}> {MESSAGE}' radius: 0 commands: kit: delay: 3600 home: delay: 5
2. CoreProtect
- ๋ธ๋ก ๋ณ๊ฒฝ ๋ก๊น ๋ฐ ๋กค๋ฐฑ
- ๋ค์ด๋ก๋: SpigotMC
- ์ฃผ์ ์ค์ :
# config.yml check-updates: true database: use-mysql: false max-records: 1000000
3. LuckPerms
- ๊ถํ ๊ด๋ฆฌ ์์คํ
- ๋ค์ด๋ก๋: LuckPerms
- ๊ธฐ๋ณธ ์ค์ :
# config.yml server: broadcast-to-admins: true auto-op: false storage-method: H2
4. WorldGuard
- ์ง์ญ ๋ณดํธ ๋ฐ ๊ด๋ฆฌ
- ๋ค์ด๋ก๋: SpigotMC
5. WorldEdit
- ์๋ ํธ์ง ๋๊ตฌ
- ๋ค์ด๋ก๋: SpigotMC
๊ณ ๊ธ ์ค์
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ๊ณ ์ต์ ํํ๋ ๋ฐฉ๋ฒ:
ํ ํฌ๊ธฐ ์ค์
-Xms4G -Xmx4G # 4GB ๋ฉ๋ชจ๋ฆฌ ํ ๋น
GC ๋ก๊น ํ์ฑํ
-Xlog:gc*:file=gc.log:time,uptimemillis:filecount=5,filesize=10M
๋คํธ์ํฌ ์ต์ ํ
ํฌํธํฌ์๋ฉ ์ค์
- ๊ธฐ๋ณธ ํฌํธ: 25565
- UDP/TCP ๋ชจ๋ ๊ฐ๋ฐฉ
server.properties ๋คํธ์ํฌ ์ค์
network-compression-threshold=256 prevent-proxy-connections=false
๋ฌธ์ ํด๊ฒฐ
์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ํด๊ฒฐ๋ฐฉ๋ฒ
์๋ฒ๊ฐ ๋๋ฆด ๋
- ํ์๋ฉ ํ์ธ:
/timings report
- ์ฒญํฌ ์์ฑ ์ ํ
- ์ํฐํฐ ์ ์ ํ
- ํ์๋ฉ ํ์ธ:
๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ
- GC ๋ก๊ทธ ํ์ธ
- ๋ถํ์ํ ํ๋ฌ๊ทธ์ธ ์ ๊ฑฐ
- ์๋ ํ๋ฆฌ๋ก๋ ์ค์
์ฐ๊ฒฐ ๋ฌธ์
- ๋ฐฉํ๋ฒฝ ์ค์ ํ์ธ
- ํฌํธํฌ์๋ฉ ํ์ธ
- DNS ์ค์ ํ์ธ
๋ก๊ทธ ๋ถ์
server.log ํ์ผ์์ ์ฃผ์ํด์ผ ํ ๊ฒฝ๊ณ :
[Warning] Can't keep up! Is the server overloaded?
[Warning] Entity in wrong chunk!
[Warning] Moved wrongly!
๋ณด์ ์ค์
๊ธฐ๋ณธ ๋ณด์ ์ค์
ํ์ดํธ๋ฆฌ์คํธ ํ์ฑํ
# server.properties white-list=true enforce-whitelist=true
๊ด๋ฆฌ์ ๊ถํ ์ค์
# ops.json [ { "uuid": "player-uuid", "name": "AdminName", "level": 4, "bypassesPlayerLimit": false } ]
ํ๋ฌ๊ทธ์ธ ๋ณด์
AuthMe ์ค์
# config.yml security: passwordHash: ARGON2 minPasswordLength: 8
์ํฐ์นํธ ์ค์
- NCP (NoCheatPlus) ์ค์น
- Matrix ์ค์น
์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
์ฑ๋ฅ ์ธก์ ๋๊ตฌ
Spark ํ๋ฌ๊ทธ์ธ
- CPU ์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ถ์
- ํ๋ฌ๊ทธ์ธ ์ฑ๋ฅ ๋ถ์
Plan ํ๋ฌ๊ทธ์ธ
- ์๋ฒ ํต๊ณ ์์ง
- ํ๋ ์ด์ด ํ๋ ๋ถ์
- ๋ฆฌ์์ค ์ฌ์ฉ๋ ์ถ์
๋ชจ๋ํฐ๋ง ๋ช ๋ น์ด
/tps # ์๋ฒ TPS ํ์ธ
/gc # ๊ฐ๋น์ง ์ปฌ๋ ์
์ํ
/timings # ์๋ฒ ์ฑ๋ฅ ๋ถ์
๋ฐฑ์ ์์คํ
์๋ ๋ฐฑ์ ์คํฌ๋ฆฝํธ
Windows (backup.bat)
@echo off
set BACKUP_DIR=backups
set SERVER_DIR=server
set DATE=%date:~-4,4%%date:~-10,2%%date:~-7,2%
mkdir "%BACKUP_DIR%\%DATE%"
xcopy /E /I "%SERVER_DIR%" "%BACKUP_DIR%\%DATE%"
Linux (backup.sh)
#!/bin/bash
BACKUP_DIR="backups"
SERVER_DIR="server"
DATE=$(date +%Y%m%d)
mkdir -p "$BACKUP_DIR/$DATE"
cp -r "$SERVER_DIR/" "$BACKUP_DIR/$DATE/"
๋ฐฑ์ ์ ์ฑ
์ผ์ผ ๋ฐฑ์
- ๋งค์ผ ์๋ฒฝ 4์ ์๋ ๋ฐฑ์
- 7์ผ๊ฐ ๋ณด๊ด
์ฃผ๊ฐ ๋ฐฑ์
- ๋งค์ฃผ ์ผ์์ผ ์ ์ฒด ๋ฐฑ์
- 4์ฃผ๊ฐ ๋ณด๊ด
์๊ฐ ๋ฐฑ์
- ๋งค์ 1์ผ ์ ์ฒด ๋ฐฑ์
- 6๊ฐ์๊ฐ ๋ณด๊ด
๊ฒฐ๋ก
์ด์ ์ฌ๋ฌ๋ถ์ ์์ ์ ์ธ Paper 1.21.3 ๋ง์ธํฌ๋ํํธ ์๋ฒ๋ฅผ ์ค์ ํ๊ณ ์ด์ํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ๊ฒ ๋์์ต๋๋ค. ์ด ๊ฐ์ด๋๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ๋ฐฐ์ ์ต๋๋ค:
- Paper ์๋ฒ์ ์ค์น์ ๊ธฐ๋ณธ ์ค์
- ์๋ฒ ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ๋ฒ
- ํ์ ํ๋ฌ๊ทธ์ธ ์ค์น์ ์ค์
- ๋ณด์ ์ค์ ๊ณผ ๋ฐฑ์ ์์คํ ๊ตฌ์ถ
- ๋ฌธ์ ํด๊ฒฐ๊ณผ ๋ชจ๋ํฐ๋ง ๋ฐฉ๋ฒ
์ ์ฉํ ๊ด๋ จ ๋งํฌ
- Paper ๊ณต์ ๋ค์ด๋ก๋: https://papermc.io/downloads
- Paper ๋ฌธ์: https://docs.papermc.io/
- Spigot ํ๋ฌ๊ทธ์ธ: https://www.spigotmc.org/resources/
- ๋ง์ธํฌ๋ํํธ ์ํค: https://minecraft.fandom.com/
์๋ฒ ์ด์ ํ
์ ๊ธฐ์ ์ธ ์ ์ง๋ณด์
- ์ฃผ๊ธฐ์ ์ผ๋ก ์๋ฒ ๋ฐฑ์ ์คํ
- ํ๋ฌ๊ทธ์ธ ์ ๋ฐ์ดํธ ํ์ธ
- ๋ก๊ทธ ํ์ผ ์ ๋ฆฌ
์ปค๋ฎค๋ํฐ ๊ด๋ฆฌ
- ๋ช ํํ ์๋ฒ ๊ท์น ์ค์
- ๊ด๋ฆฌ์ ๊ฐ์ด๋๋ผ์ธ ์์ฑ
- ํ๋ ์ด์ด ํผ๋๋ฐฑ ์๋ ด
์ฑ๋ฅ ๊ด๋ฆฌ
- ์ ๊ธฐ์ ์ธ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง
- ๋ถํ์ํ ์ฒญํฌ ์ธ๋ก๋
- ์ํฐํฐ ์ ์ ํ ์ค์
์ถ๊ฐ ํ์ต ์๋ฃ
๋ง์ธํฌ๋ํํธ ์๋ฒ ๊ด๋ฆฌ์ ๋ํด ๋ ๊น์ด ์๊ฒ ๊ณต๋ถํ๊ณ ์ถ๋ค๋ฉด ๋ค์ ์ฃผ์ ๋ค์ ์ดํด๋ณด์ธ์:
- Java ๊ฐ์ ๋จธ์ ํ๋
- MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋
- Docker ์ปจํ ์ด๋ํ
- ํ๋ก์ ์๋ฒ ๊ตฌ์ถ (BungeeCord/Velocity)
- ์ปค์คํ ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฐ
๋ ์ ์ฐธ์ฌ ์ง๋ฌธ
์๋ ์ง๋ฌธ๋ค์ ๋ํด ์๊ฐํด๋ณด๊ณ ๋๊ธ๋ก ๊ณต์ ํด์ฃผ์ธ์:
์ฌ๋ฌ๋ถ์ ์๋ฒ์์ ๊ฐ์ฅ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๋ ํ๋ฌ๊ทธ์ธ์ ๋ฌด์์ธ๊ฐ์?
์๋ฒ ์ด์ ์ค ๊ฒช์๋ ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ๋ฌด์์ด์๊ณ , ์ด๋ป๊ฒ ํด๊ฒฐํ์ จ๋์?
Paper ์๋ฒ์ ์ด๋ค ๊ธฐ๋ฅ์ด ๊ฐ์ฅ ๋ง์์ ๋์๋์?
์ฒ์ ์๋ฒ๋ฅผ ์์ํ ๋ ์ด ๊ธ์์ ์ค๋ช ํ ๋ด์ฉ ์ค ์ด๋ค ๋ถ๋ถ์ด ๊ฐ์ฅ ๋์์ด ๋ ๊ฒ ๊ฐ๋์?
์ฌ๋ฌ๋ถ๋ง์ ํน๋ณํ ์๋ฒ ์ต์ ํ ํ์ด ์๋ค๋ฉด ๋ฌด์์ธ๊ฐ์?
๋ง์น๋ฉฐ
์๋ฒ ๊ตฌ์ถ์ ์ฒ์์๋ ๋ณต์กํด ๋ณด์ผ ์ ์์ง๋ง, ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐ๋ผํ๋ค ๋ณด๋ฉด ๋๊ตฌ๋ ํ ์ ์์ต๋๋ค. ๋ฌธ์ ๊ฐ ์๊ธฐ๋๋ผ๋ ์์ ๋ฌธ์ ํด๊ฒฐ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ๋ฉด์ ํ๋์ฉ ํด๊ฒฐํด ๋๊ฐ์๋ฉด ๋ฉ๋๋ค.
์ด ๊ธ์ด ์ฌ๋ฌ๋ถ์ ๋ง์ธํฌ๋ํํธ ์๋ฒ ๊ตฌ์ถ์ ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ถ๊ฐ ์ง๋ฌธ์ด๋ ์๊ฒฌ์ด ์์ผ์๋ค๋ฉด ์ธ์ ๋ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์. ์ฆ๊ฑฐ์ด ์๋ฒ ์ด์ ๋์๊ธฐ ๋ฐ๋๋๋ค! ๐ฎโจ