Skip to content

안정성 개선 및 테스트 환경 구축#4

Merged
Junseo5 merged 10 commits intomainfrom
feature/stability-improvements
Jan 30, 2026
Merged

안정성 개선 및 테스트 환경 구축#4
Junseo5 merged 10 commits intomainfrom
feature/stability-improvements

Conversation

@Junseo5
Copy link
Member

@Junseo5 Junseo5 commented Jan 30, 2026

개요

플러그인의 안정성을 향상시키고 테스트 환경을 구축하는 PR입니다.

변경 유형

  • 버그 수정 (기존 기능을 깨뜨리지 않는 변경)
  • 새 기능 (기존 기능을 깨뜨리지 않는 변경)
  • Breaking Change (기존 기능에 영향을 주는 수정/추가)
  • 문서 업데이트
  • 리팩토링
  • 테스트 추가/수정
  • 빌드/CI 설정

관련 이슈

closes #1
closes #2
closes #3

변경 사항

버그 수정

  • KnockbackListener: AttributeModifier 순회 중 ConcurrentModificationException 수정
  • MessageManager: InputStream 리소스 누수 수정 (try-with-resources 적용)
  • ScrollManager: 아이템 제거 시 null 대신 AIR ItemStack 사용

안정성 개선

  • 플레이어 접속 시 이전 세션에서 남은 속성 정리 (onPlayerJoin)
  • 플레이어 퇴장 시 항상 속성 제거 (멱등성 보장)
  • 플러그인 비활성화 시 온라인 플레이어 속성 정리
  • 리로드 감지 시 기존 플레이어 속성 정리
  • EffectManager 효과 만료 체커 동시성 안전성 향상

테스트 환경

  • MockBukkit, JUnit, Mockito 의존성 추가
  • Paper/JitPack Maven 저장소 추가
  • 효과 만료 체커 테스트 코드 추가
  • 플레이어 퇴장 시 속성 정리 테스트 코드 추가

기타

  • GitHub 이슈/PR 템플릿 추가
  • .gitignore에 테스트 출력 파일 추가

테스트 방법

  1. ./gradlew test 명령어로 단위 테스트 실행
  2. 테스트 서버에서 플러그인 로드 후 다음 시나리오 테스트:
    • 주문서 사용 후 효과 만료 확인
    • 효과 활성 중 퇴장 후 재접속 시 속성 초기화 확인
    • /reload 명령어 실행 후 정상 동작 확인

체크리스트

  • 코드가 프로젝트의 코딩 스타일을 따름
  • 변경 사항에 대한 테스트를 추가함
  • 기존 테스트가 모두 통과함
  • 문서를 업데이트함 (필요한 경우)

- MockBukkit v1.20 테스트 의존성 추가
- JUnit Jupiter 5.10.0 추가
- Mockito 5.7.0 추가
- Paper Maven 저장소 추가 (MockBukkit 의존성)
- JitPack 저장소 추가
- JUnit Platform 테스트 설정
AttributeModifier 순회 중 제거 시 발생하는 버그 수정
- 복사본 리스트 생성 후 순회하도록 변경
- 순회 완료 후 별도로 제거 수행
- try-with-resources 구문으로 InputStream 자동 닫기 적용
- copyDefaults(true) 추가하여 새 키 자동 병합
- 예외 처리 추가
setItemInMainHand(null) 호출 시 일부 버전에서 발생할 수 있는
호환성 문제 방지를 위해 AIR ItemStack 사용
- hasActiveEffect() 로직 단순화
- startExpirationChecker() 호출 시 기존 태스크 취소 후 시작
- ConcurrentHashMap.remove(key, value) 사용으로 동시성 안전성 향상
- 불필요한 Iterator 패턴 제거
- onPlayerJoin 핸들러 추가: 이전 세션에서 남은 속성 정리
- onPlayerQuit 로직 개선: 효과 활성 여부와 관계없이 항상 속성 제거
- 비정상 종료, 리로드 등 엣지 케이스 대응
- cleanupOnlinePlayers() 메서드 추가
- onDisable에서 온라인 플레이어 넉백 저항 속성 정리
- 리로드 감지 시 기존 플레이어 속성 정리
- 메인 스레드 체크 및 안전한 실행 보장
- EffectExpirationCheckerConsistencyTest: 효과 만료 체커 동시성 테스트
- PlayerQuitEffectCleanupTest: 플레이어 퇴장 시 속성 정리 테스트
- MockBukkit 기반 단위 테스트 구조 구축
test_output.txt 파일 무시 항목 추가
- 버그 리포트 템플릿 추가
- 기능 요청 템플릿 추가
- PR 템플릿 추가
@Junseo5 Junseo5 self-assigned this Jan 30, 2026
@Junseo5 Junseo5 merged commit 3dead59 into main Jan 30, 2026
1 check passed
@Junseo5 Junseo5 deleted the feature/stability-improvements branch January 30, 2026 14:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant