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

장단점

장점

  • 안정적이고 검증된 성능
  • 광범위한 플러그인 지원
  • 활발한 커뮤니티
  • 정기적인 업데이트

단점

  • Paper에 비해 최적화 부족
  • 일부 바닐라 버그 잔존
  • 설정 옵션이 상대적으로 적음
  • BuildTools 사용 필수[1]
  1. 직접 jar 파일을 배포하지 않고 BuildTools를 통해 빌드해야 함