Spigot
Spigot(스피곳)은 마인크래프트 서버를 위한 고성능 구동기로, Bukkit을 기반으로 성능 개선과 추가 기능을 제공한다. 2012년부터 개발되어 현재까지 가장 널리 사용되는 서버 구동기 중 하나다.
Spigot은 md_5가 주도하는 SpigotMC 팀에 의해 개발되었다. Bukkit의 성능 문제를 해결하고 더 많은 설정 옵션을 제공하기 위해 만들어졌으며, 현재는 마인크래프트 서버의 사실상 표준이 되었다.
주요 특징
성능 개선
- 청크 로딩 최적화
- 엔티티 활성화 범위 제한
- 틱 병합 및 최적화
- 메모리 사용량 감소
- 네트워크 압축 개선
추가 기능
- BungeeCord 지원
- 타이밍 리포트 시스템
- 바닐라 버그 수정
- 향상된 설정 옵션
- 엔티티 추적 개선
설치 방법
1. SpigotMC BuildTools 다운로드 2. Git Bash 또는 터미널에서 실행: java -jar BuildTools.jar --rev 1.21 3. 생성된 spigot-1.21.jar 파일 확인 4. 서버 시작: java -Xms1G -Xmx2G -jar spigot-1.21.jar
설정 파일
spigot.yml
# 주요 spigot.yml 설정 config-version: 12 settings: debug: false save-user-cache-on-stop-only: false bungeecord: false # BungeeCord 사용 시 true sample-count: 12 player-shuffle: 0 user-cache-size: 1000 moved-wrongly-threshold: 0.0625 moved-too-quickly-multiplier: 10.0 timeout-time: 60 restart-on-crash: true restart-script: ./start.sh netty-threads: 4 log-villager-deaths: true log-named-deaths: true messages: whitelist: 화이트리스트에 등록되어 있지 않습니다! unknown-command: 알 수 없는 명령어입니다. server-full: 서버가 가득 찼습니다! outdated-client: 구버전 클라이언트입니다! {0} 버전을 사용하세요. outdated-server: 구버전 서버입니다! {0} 버전을 사용하세요. restart: 서버가 재시작됩니다. world-settings: default: verbose: false merge-radius: item: 2.5 exp: 3.0 view-distance: default simulation-distance: default thunder-chance: 100000 mob-spawn-range: 8 # 엔티티 활성화 범위 entity-activation-range: animals: 32 monsters: 32 raiders: 48 misc: 16 water: 16 villagers: 32 flying-monsters: 32 # 성장 속도 growth: cactus-modifier: 100 cane-modifier: 100 melon-modifier: 100 mushroom-modifier: 100 pumpkin-modifier: 100 sapling-modifier: 100 beetroot-modifier: 100 carrot-modifier: 100 potato-modifier: 100 wheat-modifier: 100 # 엔티티 추적 entity-tracking-range: players: 48 animals: 48 monsters: 48 misc: 32 other: 64
성능 최적화 설정
# 권장 최적화 설정 world-settings: default: # 아이템 병합 merge-radius: item: 3.5 exp: 4.0 # 엔티티 활성화 범위 (성능 향상) entity-activation-range: animals: 16 monsters: 24 raiders: 32 misc: 8 # 홉퍼 최적화 hopper-transfer: 8 # 기본값: 8 hopper-check: 1 # 기본값: 1 hopper-amount: 1 # 기본값: 1 # 드롭 아이템 수명 item-despawn-rate: 4000 # 기본값: 6000 (틱) # 몹 스폰 제한 max-entity-collisions: 2 # 화살 제거 arrow-despawn-rate: 300 # 기본값: 1200
명령어
명령어 | 설명 | 권한 |
---|---|---|
/restart | 서버 재시작 | spigot.command.restart |
/tps | TPS 확인 | spigot.command.tps |
/timings | 타이밍 리포트 | spigot.command.timings |
BungeeCord 설정
# spigot.yml에서 BungeeCord 모드 활성화 settings: bungeecord: true # server.properties에서 설정 online-mode=false # BungeeCord가 인증 처리
타이밍 리포트
서버 성능 분석을 위한 타이밍 시스템:
# 타이밍 시작 /timings on # 일정 시간 후 리포트 생성 /timings paste # 생성된 URL에서 상세 분석 확인
Paper와의 차이점
기능 | Spigot | Paper |
---|---|---|
성능 최적화 | 기본적 | 고급 |
비동기 청크 로딩 | 없음 | 있음 |
추가 설정 옵션 | 보통 | 매우 많음 |
익스플로잇 패치 | 일부 | 대부분 |
업데이트 주기 | 보통 | 빠름 |
플러그인 호환성
- Bukkit 플러그인: 100% 호환
- Spigot 전용 API 사용 가능
- ProtocolLib 등 주요 라이브러리 지원
- 대부분의 플러그인이 Spigot 기준으로 개발됨
최적화 팁
월드 별 설정
world-settings: world: # 메인 월드는 정상 설정 mob-spawn-range: 8 entity-activation-range: monsters: 32 world_nether: # 네더는 더 제한적으로 mob-spawn-range: 6 entity-activation-range: monsters: 24 spawn: # 스폰 지역은 최대 제한 mob-spawn-range: 0 entity-activation-range: monsters: 16
문제 해결
일반적인 문제
- 높은 메모리 사용: JVM 플래그 조정
- 낮은 TPS: 엔티티 활성화 범위 축소
- 청크 로딩 지연: view-distance 감소
- 플러그인 충돌: 타이밍 리포트로 원인 파악
권장 JVM 플래그
java -Xms2G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -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 -jar spigot.jar
업데이트 방법
# BuildTools를 사용한 최신 버전 빌드 java -jar BuildTools.jar --rev latest # 특정 버전 빌드 java -jar BuildTools.jar --rev 1.20.4 # 개발 버전 빌드 java -jar BuildTools.jar --dev
장단점
장점
- 안정적이고 검증된 성능
- 광범위한 플러그인 지원
- 활발한 커뮤니티
- 정기적인 업데이트
단점
- ↑ 직접 jar 파일을 배포하지 않고 BuildTools를 통해 빌드해야 함