Java: 지식 베이스 및 파이프라인
이 스킬은 모든 Java 도메인에서 코드를 작성, 검토 및 최적화하는 데 도움을 줍니다. 세 가지 주요 구성 요소로 이루어져 있습니다:
- 지식 베이스. 카테고리별로 정리된 책, 기사, 발표, 문서, JEP, 코드베이스 및 패턴입니다. 각 출처에는 링크, 저자, 연도 및 읽어야 하는 이유가 포함되어 있습니다.
- 툴체인. 설치해야 할 JDK, 빌드 도구 및 분석기, 실행할 명령어 및 순서입니다.
pom.xml, Gradle 및 CI 템플릿이 수집되어 검증되었습니다. - 파이프라인. 작업 순서: 테스트 우선, 품질 검사, JMH 벤치마크, 리뷰, 라이브러리에서 솔루션 검색 및 재측정입니다.
지식 상태 — 2026년 11월 기준: JDK 27(2026년 9월) 최신 릴리즈, JDK 25 현재 LTS, JDK 21 및 17 이전 LTS, JDK 28은 2027년 3월 출시 예정. Maven 3.9.16 및 3.10.0(Maven 4는 여전히 RC), Gradle 9.9, JUnit 6.1, Spring Boot 4.1, Quarkus 3.40, JMH 1.37. Minecraft: 26.3 최신 릴리즈(2026년 9월), 26.4 스냅샷 버전; 26.1부터 게임이 난독화 없이 제공되며 Java 25가 필요합니다.
참고 자료
| 작업 | 파일 |
|---|---|
| 새로운 기능, 리팩토링 또는 최적화: 작업 순서 | references/pipeline.md |
JDK 배포판 및 버전, 설치, Maven 및 Gradle, 플러그인, BOM, 애노테이션 프로세서, javac -Xlint, Error Prone, NullAway, SpotBugs, PMD, Spotless, OpenRewrite, 의존성 보안, JDK 도구, CI, 템플릿 | references/toolchain.md |
| JUnit 6, AssertJ, Mockito, Testcontainers, Spring Boot 슬라이스, 프로퍼티 기반 및 계약 테스트, JaCoCo, PIT, 불안정한 테스트 | references/testing.md |
| 코드가 느리거나 메모리를 많이 사용하는 경우: 증상별 기술, JMH, JFR, JIT, GC, 시작 및 워밍업 | references/performance.md — 「증상 → 기술 → 출처」 표부터 시작하세요 |
| Java 17–28 언어 기능(JEP 기준), 관용구, null 및 Optional, 예외, 패턴 및 안티패턴, 보안, 리뷰 체크리스트 | references/idioms-patterns.md |
| 프로젝트 구조, 멀티모듈 빌드, 패키지 및 JPMS, 계층형 및 헥사고날 아키텍처, DDD, ArchUnit, DI, API 진화, 참조 코드베이스 | references/architecture.md |
| 메모리 모델, executors, CompletableFuture, 락, 가상 스레드, 구조적 동시성, scoped values, 리액티브 라이브러리, FFM API, JNI, Unsafe, Vector API | references/concurrency-native.md |
| 서버 도메인: Spring Boot, Quarkus, Micronaut, Helidon, REST 및 gRPC, JDBC, JPA 및 Hibernate, 마이그레이션, Kafka, 관찰 가능성, 보안, 컨테이너 및 Kubernetes | references/domains-server.md |
| 기타 도메인: 라이브러리 배포, CLI 및 TUI, 데스크탑, 데이터, ML 및 LLM 애플리케이션, 게임, 임베디드, WebAssembly, 상호 운용성, 스크립트 | references/domains-client.md |
| 읽을거리, 블로그, 발표, 팟캐스트, 강좌, 한국어 리소스, 레벨별 학습 로드맵 | references/books.md. 책에 대한 일반적인 질문은 「짧은 목록: 주요 출처 20개」 및 「레벨별 읽기 로드맵」 섹션부터 시작하고, 주제별 섹션은 목차를 통해 열어보세요. 파일이 크므로 전체를 읽지 마세요 |
Minecraft 브랜치 (Java Edition: 모드 및 서버 플러그인, Minecraft 26.x 및 최신 1.21.x):
| 작업 | 파일 |
|---|---|
| 모드 시작: 로더 선택(Fabric, NeoForge, Forge, Quilt), 게임 및 Java 버전, Loom 및 ModDevGradle, 멀티로더 및 멀티버전, Modrinth 및 CurseForge에 배포, 모드팩 빌드, CI, 검증된 템플릿 | references/minecraft-modding.md |
| 모드 코드: 측과 스레드, 레지스트리, 데이터 컴포넌트, 블록, 엔티티, 데이터젠, 코덱, 네트워크, 이벤트, 믹스인, access widener 및 transformer, 렌더, 설정, 세계 생성, 새 버전으로 마이그레이션, 리뷰 체크리스트 | references/minecraft-mod-api.md — 26.x에서 변경된 사항은 「26.x에서 변경된 사항」 섹션을 확인하세요 |
지연, TPS 및 MSPT, FPS, 메모리, 느린 시작; spark 및 JFR; /tick sprint 세계 벤치마크; GameTest 및 단위 테스트; 크래시 리포트 및 모드 충돌 분석 | references/minecraft-performance-testing.md — 「증상 → 기술 → 출처」 표부터 시작하세요 |
| 서버: 데이터팩, 플러그인 또는 모드; Paper, Folia, Velocity, Spigot, Sponge, Minestom; Polymer; Geyser 및 ViaVersion; 엔지니어링 및 플러그인 템플릿 | references/minecraft-server-plugins.md |
| 문서 및 최신 상태 유지, 오래된 튜토리얼 읽는 방법, 강좌, 유형별 참조 모드, 커뮤니티, 학습 로드맵 | references/minecraft-resources.md |
각 참조 문서는 목차로 시작합니다. 파일 전체를 읽지 말고 필요한 섹션만 읽으세요.
자주 묻는 질문과 답변이 있는 섹션:
| 질문 | 섹션 |
|---|---|
| JDK 23+로 전환 후 생성된 클래스(Lombok, MapStruct, JMH)가 사라지고 빌드는 통과하는 경우; 기타 명확하지 않은 빌드 실패 | toolchain.md → 「함정: 요약」 |
| 병합 전에 프로젝트를 확인하는 명령어 | toolchain.md → 「최소 품질 검사」 |
| 프로파일 또는 벤치마크에서 무엇이 보이며 어떻게 처리해야 하는지 | performance.md → 「증상 → 기술 → 출처」 |
| 정확한 벤치마크 작성 방법 | performance.md → 「벤치마크: JMH」 |
| Windows, Linux 및 macOS에서 프로파일링 도구 | performance.md → 「프로파일링」 |
| 현재 JDK 버전에서 특정 언어 기능을 사용할 수 있는지 | idioms-patterns.md → 「언어 버전: Java 17–28」 |
| 서비스를 가상 스레드로 마이그레이션할지 여부와 확인 사항 | concurrency-native.md → 「가상 스레드」, Spring Boot 4의 경우 domains-server.md → 「프레임워크 및 런타임」도 확인 |
| 부하에 따라 어떤 동시성 모델을 선택해야 하는지 | concurrency-native.md → 「부하별 도구 선택」 |
| Spring Boot 4, Jackson 3, Hibernate 7에서 변경된 사항 및 제거된 사항 | domains-server.md → 「2026년 11월 버전」 |
| 느린 엔드포인트, N+1, 커넥션 풀 | domains-server.md → 「서버 성능: 증상」 |
| 프로젝트를 모듈로 나누고 경계를 설정하는 방법 | architecture.md → 「간단한 기본 규칙」 |
| 특정 책이나 판이 존재하는지 | books.md → 「출판된 책, 얼리 액세스 책, 존재하지 않는 책」 |
| Minecraft: 모드 시작 방법, GameTest 및 CI가 포함된 프로젝트 | minecraft-modding.md → 「템플릿」, 로더 선택은 「기본 스택」 |
Minecraft: 오래된 튜토리얼 또는 모드가 26.x에서 빌드되지 않는 경우(modImplementation, remapJar, ResourceLocation, Yarn) | minecraft-modding.md → 「오래된 튜토리얼의 오류」, minecraft-mod-api.md → 「26.x에서 변경된 사항」 |
| Minecraft: 서버 지연(MSPT, TPS), 원인 찾기 및 수정 효과 증명 | minecraft-performance-testing.md → 「증상 → 기술 → 출처」, 작업 순서는 pipeline.md → 「Minecraft 모드 및 플러그인」 |
| Minecraft: 데이터팩, 플러그인 또는 모드; 처음부터 Paper 플러그인 만들기 | minecraft-server-plugins.md → 「데이터팩, 플러그인 또는 모드 선택」, 「템플릿」 |
스크립트 scripts/BenchCompare.java는 '이전'과 '이후' JMH 실행 결과를 JSON으로 비교하고 실행 간 노이즈를 고려하여 회귀 발생 시 종료 코드 1을 반환합니다. 빌드 없이 실행: java BenchCompare.java <이전> <이후> (JDK 17+). 파이프라인 11단계에서 필요합니다.
Minecraft용 스크립트 두 개 더:
- scripts/tick_sprint_bench.sh —
/tick sprint명령어로 전체 서버 벤치마크. 결과는 JMH JSON 형식이므로 동일한BenchCompare.java로 비교합니다. - scripts/EmptyStructure.java — GameTest용 빈
.nbt구조체. 자체 빈 구조체가 없는 NeoForge에서 필요합니다.
스크립트는 이 SKILL.md 파일과 함께 scripts/ 폴더에 있습니다. 모든 프로젝트에 설치 시 ~/.claude/skills/java-knowledge/scripts/, 프로젝트에 설치 시 .claude/skills/java-knowledge/scripts/에 위치합니다. 참조 문서의 명령어에서 이 경로를 사용하세요.
작업 방법
하나의 메서드보다 큰 작업은 파이프라인을 따르세요:
- 질문.
- 계획 및 명세.
- 하위 작업.
- 코드 전 테스트.
- worktree로 분리.
- 벤치마크.
- 기준 측정 및 프로파일.
- 리뷰.
- 라이브러리에서 솔루션 검색.
- 최적화.
- 재측정.
작은 수정은 동일한 파일의 짧은 모드로 충분합니다: 테스트, 코드, 검사, 리뷰.
작업 완료를 선언하기 전에 최소 검사를 실행하고 결과를 보여주세요:
./mvnw -B -ntp verify # -Xlint -Werror, Error Prone 및 NullAway와 함께 컴파일, 테스트, Spotless, JaCoCo 임계값
./mvnw -B -ntp dependency:analyze
osv-scanner scan source -r .
Gradle: ./gradlew build, ./gradlew buildHealth, osv-scanner scan source -r .. 분석기 및 임계값은 빌드에 연결되어야 합니다 — 템플릿은 toolchain.md에 있습니다. 프로젝트에 없는 경우, 있는 검사라도 실행하고 부족한 검사가 무엇인지 알려주세요. 도구가 설치되지 않은 경우 toolchain.md의 설치 명령어를 제안하고 단계를 조용히 건너뛰지 마세요.
최적화 시:
- 먼저 측정, 그 다음 수정. 기준선 없이는 코드가 빨라졌다고 말할 수 없습니다.
System.nanoTime()루프 대신 JMH로 측정하세요. JIT는 사용되지 않는 작업을 제거합니다. 로컬 측정에서 결과가 버려진 계산은 실제보다 14배 저렴하게 보였습니다.- '이전'과 '이후' 각각 5번의 실행을 별도의 JVM 실행으로 측정하고 순서를 번갈아 가며(ABBA) 진행하세요. 동일한 jar의 실행 간 편차는 12-22%입니다.
- 항상
-prof gc를 추가하고gc.alloc.rate.norm(작업당 바이트)을 확인하세요. 이 메트릭은 노이즈가 거의 없습니다. - 한 번에 하나의 JMH만 머신에서 실행하고 측정 중에는 다른 작업으로 머신에 부하를 주지 마세요.
- performance.md에서 증상별 기술을 찾고 수정 사항 옆에 출처를 명시하세요.
- 벤치마크가 유의미한 이점을 보여주고 테스트가 통과한 경우에만 수정 사항을 수락하세요.
리뷰 시 체크리스트를 사용하세요:
- idioms-patterns.md — 모든 코드;
- testing.md — 테스트;
- concurrency-native.md — 멀티스레드 코드, 가상 스레드 및 네이티브 코드;
- domains-server.md — 서버 코드, 데이터베이스 및 보안;
- domains-client.md — 배포용 라이브러리;
- architecture.md — 프로젝트 구조 및 모듈 경계.
라이브러리 사용 규칙
- 출처를 명시하세요. 패턴이나 최적화를 권장할 때는 참조 문서의 링크를 제공하세요. 그러면 사용자가 조언을 확인할 수 있고 솔루션이 지어낸 것처럼 보이지 않습니다.
- 표시를 고려하세요.
[사용 중단됨]은 해당 자료에 대체 자료가 있으며 옆에 명시되어 있음을 의미합니다.[미확인]은 해당 주장이 단일 2차 출처에서 가져온 것임을 의미합니다. 솔루션을 구축하기 전에 재확인해야 합니다. - 버전을 확인하세요. 버전은 2026년 11월 기준입니다. 2025-2026년에는 많은 주요 버전이 호환성을 깨는 변경 사항과 함께 출시되었습니다: Spring Boot 4 및 Spring Framework 7(이름이 변경된 스타터, 제거된 API), Jackson 3(
tools.jackson패키지), Hibernate 7, JUnit 6, Testcontainers 2(새로운 아티팩트 및 패키지), google-java-format 2. OSSRH를 통한 배포는 2025년 6월 30일에 종료되었습니다. 중요한 결정을 내리기 전에 Maven Central, 문서 및 릴리스 노트를 확인하세요. - 대상 Java 버전을 고려하세요. 코드를 작성하거나 제안하기 전에
maven.compiler.release또는 Gradle의 toolchain을 확인하여 대상 버전보다 높은 기능을 사용하지 않도록 하세요.