Paper(마인크래프트)
Paper(페이퍼)는 마인크래프트 서버를 위한 고성능 구동기로, Spigot을 포크하여 추가적인 성능 최적화와 기능을 제공한다. 현재 가장 인기 있는 마인크래프트 서버 구동기이며, 대규모 서버에서 널리 사용된다.
2016년 처음 출시되었으며, PaperMC 팀에 의해 개발되고 있다. 이 서버 최적화 가이드는 공식 문서에서 제공하는 정보를 확장하여 게임플레이 변경사항과 최적화로 인한 잠재적 부작용에 대한 추가적인 강조를 제공한다. Spigot의 모든 기능을 포함하면서도 더 나은 성능과 안정성을 제공한다.
주요 특징
성능 최적화
- 비동기 청크 로딩 및 저장
- 향상된 엔티티 AI 및 경로탐색
- 메모리 사용량 최적화
- 틱 최적화 및 지연 감소
- 동기화된 청크 쓰기를 비활성화하여 메인 스레드의 부담을 줄임
추가 기능
- 익스플로잇 패치
- 향상된 API
- 월드별 설정 지원
- 고급 타이밍 시스템 (Timings v2)
- 내장 안티엑스레이
설치 방법
1. papermc.io에서 최신 버전 다운로드 2. 서버 폴더에 paper-1.21.jar 저장 3. 서버 시작: java -Xms2G -Xmx4G -jar paper-1.21.jar 4. EULA 동의 후 재시작
설정 파일 구조
Paper는 config 폴더 내에 설정 파일을 저장하며, paper-world-defaults.yml의 모든 설정은 월드별로 재정의할 수 있다:
서버 폴더/ ├── config/ │ ├── paper-global.yml # 전역 설정 │ └── paper-world-defaults.yml # 월드 기본 설정 ├── world/ │ └── paper-world.yml # 월드별 설정 (선택사항) ├── bukkit.yml ├── spigot.yml └── server.properties
paper-global.yml 주요 설정
paper-global.yml은 전체 서버에 적용되는 설정을 관리한다:
# 최신 Paper 1.21 기준 권장 설정 _version: 30 # 설정 파일 버전 chunk-loading: player-max-concurrent-loads: 20.0 player-max-concurrent-sends: 5.0 chunk-system: gen-parallelism: default io-threads: -1 worker-threads: -1 collisions: enable-player-collisions: true send-full-pos-for-hard-colliding-entities: true console: enable-brigadier-highlighting: true enable-brigadier-completions: true item-validation: display-name: 8192 lore-line: 8192 messages: no-permission: '&c권한이 없습니다.' use-display-name-in-quit-message: false misc: chat-threads: chat-executor-core-size: -1 chat-executor-max-size: -1 fix-entity-position-desync: true lag-compensate-block-breaking: true load-permissions-yml-before-plugins: true max-joins-per-tick: 5 # 한 틱당 최대 접속 플레이어 수 제한 region-file-cache-size: 256 use-alternative-luck-formula: false packet-limiter: all-packets: action: KICK max-packet-rate: 5000.0 kick-message: '&c너무 많은 패킷을 전송했습니다!' player-auto-save: max-per-tick: -1 rate: -1 proxies: # BungeeCord/Velocity 설정 bungee-cord: online-mode: true proxy-protocol: false velocity: enabled: false online-mode: false secret: '' timings: enabled: true hidden-config-entries: - database - proxies.velocity.secret url: 'https://timings.aikar.co/'
paper-world-defaults.yml 핵심 최적화
엔티티는 최신 마인크래프트 버전에서 리소스를 많이 소모하므로, 최고급 CPU도 엔티티를 제어하지 않으면 성능 저하를 겪을 수 있다:
엔티티 설정
entities: # 아머스탠드 최적화 armor-stands: do-collision-entity-lookups: false tick: true # 엔티티 거동 behavior: baby-zombie-movement-modifier: 0.5 disable-chest-cat-detection: false disable-creeper-lingering-effect: false disable-player-crits: false door-breaking-difficulty: zombie: [HARD] zombie_villager: [HARD] husk: [HARD] zombified_piglin: [HARD] vindicator: [NORMAL, HARD] # 몹 스포닝 spawning: all-chunks-are-slime-chunks: false creative-arrow-despawn-rate: 180 # 크리에이티브 모드 화살 디스폰 시간 despawn-ranges: ambient: hard: 128 soft: 32 axolotls: hard: 128 soft: 32 creature: hard: 128 soft: 32 misc: hard: 128 soft: 32 monster: hard: 128 soft: 32 # 몬스터가 디스폰되기 시작하는 거리 underground_water_creature: hard: 128 soft: 32 water_ambient: hard: 64 soft: 32 water_creature: hard: 128 soft: 32 # 스폰 간격 (틱) # 값을 높이면 몹 스폰 빈도가 감소하여 성능 향상 monster-spawn-max-light-level: default per-player-mob-spawns: true spawn-limits: ambient: -1 axolotls: -1 creature: -1 monster: -1 underground_water_creature: -1 water_ambient: -1 water_creature: -1
성능 최적화 설정
# 충돌 최적화 collisions: allow-player-cramming-damage: false allow-vehicle-collisions: false fix-climbing-bypassing-cramming-rule: false max-entity-collisions: 2 # 작은 공간에서 동물 AI가 서로 피하려고 경로를 찾는 것을 제한 only-players-collide: false # 청크 설정 chunks: auto-save-interval: -1 delay-chunk-unloads-by: 10s entity-per-chunk-save-limit: # 청크당 저장할 최대 엔티티 수 arrow: 16 ender_pearl: 16 experience_orb: 16 fireball: 16 small_fireball: 16 snowball: 16 fixed-chunk-inhabited-time: -1 max-auto-save-chunks-per-tick: 6 # 월드 저장 작업 중 증분 청크 저장을 늦춤 prevent-moving-into-unloaded-chunks: false # 환경 설정 environment: disable-explosion-knockback: false disable-ice-and-snow: false disable-teleportation-suffocation-check: false disable-thunder: false frosted-ice: delay: max: 40 min: 20 enabled: true generate-flat-bedrock: false locate-structures-outside-world-border: false max-growth-height: bamboo: max: 16 min: 11 cactus: 3 reeds: 3 nether-ceiling-void-damage-height: disabled optimize-explosions: true # Paper의 효율적인 폭발 알고리즘 portal-create-radius: 16 portal-search-radius: 128 portal-search-vanilla-dimension-scaling: true treasure-maps: enabled: true find-already-discovered: loot-tables: default villager-trade: false water-over-lava-flow-speed: 5
홉퍼 최적화
hopper: cooldown-when-full: true disable-move-event: false disable-move-event-quickshop-compat: false ignore-occluding-blocks: false
틱 레이트 설정
tick-rates: behavior: villager: validatenearbypoi: -1 container-update: 1 grass-spread: 4 mob-spawner: 1 sensor: villager: secondarypoisensor: 40
안티엑스레이 설정
anticheat: anti-xray: enabled: true # Paper의 안티엑스레이는 가장 효율적임 engine-mode: 2 # 1=난독화, 2=숨김 hidden-blocks: - copper_ore - deepslate_copper_ore - diamond_ore - deepslate_diamond_ore - gold_ore - deepslate_gold_ore - iron_ore - deepslate_iron_ore - coal_ore - deepslate_coal_ore - lapis_ore - deepslate_lapis_ore - mossy_cobblestone - obsidian - chest - trapped_chest - spawner lava-obscures: false max-block-height: 64 replacement-blocks: - stone - oak_planks - deepslate update-radius: 2 use-permission: false
월드별 설정 재정의
특정 월드에 대한 값을 설정하려면 월드 폴더 내의 paper-world.yml을 편집한다:
# world/paper-world.yml 예시 _version: 30 entities: spawning: spawn-limits: monster: 30 # 이 월드에서만 몬스터 제한을 30으로 chunks: max-auto-save-chunks-per-tick: 12 # 이 월드는 더 자주 저장
권장 JVM 플래그 (2025년 기준)
마인크래프트는 대부분 단일 스레드로 동작하므로 코어 수보다 높은 클럭 속도가 중요하다:
# Aikar's Flags (8GB+ RAM) java -Xms8G -Xmx8G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar --nogui
일반적인 오류와 해결책
청크 생성
1.14 이상 버전에서 청크 생성은 매우 리소스를 많이 사용한다:
# Chunky 플러그인을 사용한 사전 생성 권장 /chunky radius 5000 /chunky start
성능 진단
# Spark 플러그인 사용 /spark profiler start # 5-10분 후 /spark profiler stop # Paper 타이밍 /timings on # 10분 후 /timings paste
피해야 할 사항
다음 항목들은 사용하지 않는 것이 권장된다:
- ClearLag와 같은 엔티티 제거 플러그인 (Paper 자체 최적화가 더 효율적)
- 실시간 플러그인 리로드/활성화/비활성화 플러그인
- "Async" 기능을 내세우는 유료 서버 jar 파일
Paper 포크
Paper를 기반으로 한 추가 최적화 구동기:
- Purpur: 더 많은 설정 옵션과 게임플레이 기능
- Pufferfish: 추가 성능 최적화
- Folia: 실험적 멀티스레딩 지원
마이그레이션 가이드
Spigot에서 Paper로 이전:
1. 전체 서버 백업 2. spigot.jar를 paper.jar로 교체 3. 서버 시작 (자동으로 설정 변환) 4. config 폴더의 새 설정 파일 확인 5. 필요에 따라 최적화 설정 조정
추가 자료
- 공식 문서: docs.papermc.io
- 커뮤니티 Discord: discord.gg/papermc[1]
각주
- ↑ Paper 설정과 최적화에 대한 실시간 도움을 받을 수 있는 공식 Discord 서버