Paper(마인크래프트) 문서 원본 보기 ← Paper(마인크래프트) 문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. '''Paper'''(페이퍼)는 [[마인크래프트]] 서버를 위한 고성능 구동기로, Spigot을 포크하여 추가적인 성능 최적화와 기능을 제공한다. 현재 가장 인기 있는 마인크래프트 서버 구동기이며, 대규모 서버에서 널리 사용된다. 2016년 처음 출시되었으며, PaperMC 팀에 의해 개발되고 있다. 이 서버 최적화 가이드는 공식 문서에서 제공하는 정보를 확장하여 게임플레이 변경사항과 최적화로 인한 잠재적 부작용에 대한 추가적인 강조를 제공한다. [[Spigot]]의 모든 기능을 포함하면서도 더 나은 성능과 안정성을 제공한다. == 주요 특징 == === 성능 최적화 === * 비동기 청크 로딩 및 저장 * 향상된 엔티티 AI 및 경로탐색 * 메모리 사용량 최적화 * 틱 최적화 및 지연 감소 * 동기화된 청크 쓰기를 비활성화하여 메인 스레드의 부담을 줄임 === 추가 기능 === * 익스플로잇 패치 * 향상된 API * 월드별 설정 지원 * 고급 타이밍 시스템 (Timings v2) * 내장 안티엑스레이 == 설치 방법 == <pre> 1. papermc.io에서 최신 버전 다운로드 2. 서버 폴더에 paper-1.21.jar 저장 3. 서버 시작: java -Xms2G -Xmx4G -jar paper-1.21.jar 4. EULA 동의 후 재시작 </pre> == 설정 파일 구조 == Paper는 config 폴더 내에 설정 파일을 저장하며, paper-world-defaults.yml의 모든 설정은 월드별로 재정의할 수 있다: <pre> 서버 폴더/ ├── config/ │ ├── paper-global.yml # 전역 설정 │ └── paper-world-defaults.yml # 월드 기본 설정 ├── world/ │ └── paper-world.yml # 월드별 설정 (선택사항) ├── bukkit.yml ├── spigot.yml └── server.properties </pre> == paper-global.yml 주요 설정 == paper-global.yml은 전체 서버에 적용되는 설정을 관리한다: <pre> # 최신 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/' </pre> == paper-world-defaults.yml 핵심 최적화 == 엔티티는 최신 마인크래프트 버전에서 리소스를 많이 소모하므로, 최고급 CPU도 엔티티를 제어하지 않으면 성능 저하를 겪을 수 있다: === 엔티티 설정 === <pre> 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 </pre> === 성능 최적화 설정 === <pre> # 충돌 최적화 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 </pre> === 홉퍼 최적화 === <pre> hopper: cooldown-when-full: true disable-move-event: false disable-move-event-quickshop-compat: false ignore-occluding-blocks: false </pre> === 틱 레이트 설정 === <pre> tick-rates: behavior: villager: validatenearbypoi: -1 container-update: 1 grass-spread: 4 mob-spawner: 1 sensor: villager: secondarypoisensor: 40 </pre> === 안티엑스레이 설정 === <pre> 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 </pre> == 월드별 설정 재정의 == 특정 월드에 대한 값을 설정하려면 월드 폴더 내의 paper-world.yml을 편집한다: <pre> # world/paper-world.yml 예시 _version: 30 entities: spawning: spawn-limits: monster: 30 # 이 월드에서만 몬스터 제한을 30으로 chunks: max-auto-save-chunks-per-tick: 12 # 이 월드는 더 자주 저장 </pre> == 권장 JVM 플래그 (2025년 기준) == 마인크래프트는 대부분 단일 스레드로 동작하므로 코어 수보다 높은 클럭 속도가 중요하다: <pre> # 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 </pre> == 일반적인 오류와 해결책 == === 청크 생성 === 1.14 이상 버전에서 청크 생성은 매우 리소스를 많이 사용한다: <pre> # Chunky 플러그인을 사용한 사전 생성 권장 /chunky radius 5000 /chunky start </pre> === 성능 진단 === <pre> # Spark 플러그인 사용 /spark profiler start # 5-10분 후 /spark profiler stop # Paper 타이밍 /timings on # 10분 후 /timings paste </pre> == 피해야 할 사항 == 다음 항목들은 사용하지 않는 것이 권장된다: * [[ClearLag]]와 같은 엔티티 제거 플러그인 (Paper 자체 최적화가 더 효율적) * 실시간 플러그인 리로드/활성화/비활성화 플러그인 * "Async" 기능을 내세우는 유료 서버 jar 파일 == Paper 포크 == Paper를 기반으로 한 추가 최적화 구동기: * '''Purpur''': 더 많은 설정 옵션과 게임플레이 기능 * '''Pufferfish''': 추가 성능 최적화 * '''Folia''': 실험적 멀티스레딩 지원 == 마이그레이션 가이드 == Spigot에서 Paper로 이전: <pre> 1. 전체 서버 백업 2. spigot.jar를 paper.jar로 교체 3. 서버 시작 (자동으로 설정 변환) 4. config 폴더의 새 설정 파일 확인 5. 필요에 따라 최적화 설정 조정 </pre> == 추가 자료 == * 공식 문서: docs.papermc.io * 커뮤니티 Discord: discord.gg/papermc<ref>Paper 설정과 최적화에 대한 실시간 도움을 받을 수 있는 공식 Discord 서버</ref> == 각주 == <references/> [[분류:마인크래프트]] Paper(마인크래프트) 문서로 돌아갑니다. 분류