| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- springboot
- 백엔드
- jpa
- restapi
- 근로기준법
- 일본어독학
- spring
- SpringBoot4
- 마이라이트
- js
- 코테
- 자바스크립트
- 프로그래머스
- 생활정보
- javascript
- 알고리즘
- 성인학습지
- React Native
- SWEA
- 일본어학습지
- 코딩
- 삼성
- 마이그레이션
- 일본어공부
- 가벼운학습지
- 가벼운학습지후기
- 자바
- 에러해결
- java
- 코딩테스트
- Today
- Total
개발에 AtoZ까지
[JAVA] Oracle JDK 21이 이번 달로 무상 기간이 끝납니다 — 10월 20일 전에 정할 것 본문
운영 서버에 /usr/lib/jvm/jdk-21-oracle-x64 같은 경로가 잡혀 있다면, 즉 oracle.com에서 받은 tar.gz나 RPM으로 JDK 21을 깔았다면 이번 달이 경계선입니다. Oracle 다운로드 페이지에 이렇게 적혀 있거든요.
"JDK 21 will receive updates under the NFTC, until September 2026 ... Subsequent JDK 21 updates will be licensed under the Java SE OTN License (OTN) and production use beyond the limited free grants of the OTN license will require a fee."
먼저 오해부터 풀겠습니다. 9월 30일에 뭔가 꺼지거나 이미 깔린 JDK가 불법이 되는 게 아닙니다. 실제로 아픈 건 10월 20일입니다. 그날 나올 보안 패치가 무상 운영 사용 범위 밖의 라이선스로 배포되거든요.
이 글은 제가 마이그레이션을 돌려 본 기록이 아니라, Oracle 라이선스 원문과 지원 로드맵, JDK 21.0.12.1 릴리스 노트, 각 배포판 공식 지원표를 대조해 정리한 내용입니다(확인일 2026년 9월 5일). 라이선스 해석은 조직의 법무·구매 검토가 필요한 영역이라 여기서는 원문과 날짜만 옮깁니다.

9월 30일이 아니라 10월 20일이 실제 경계선입니다
그래서 지금 어떤 빌드까지가 무상인가요
여기서 버전 번호를 한 자리 잘못 보면 결론이 통째로 어긋납니다.
7월 분기 패치로 나온 빌드는 JDK 21.0.12(2026년 7월 21일, full version 21.0.12+7)입니다. 그런데 오늘 다운로드 페이지의 최신 빌드는 그게 아니라 21.0.12.1(2026년 8월 18일)입니다. 뒤에 .1이 붙은 별개의 후속 릴리스죠.
이게 왜 생겼냐면 Oracle이 올해부터 보안 릴리스 주기를 바꿨거든요. 1·4·7·10월 분기 CPU(Critical Patch Update) 외에 나머지 달에도 CSPU(Critical Security Patch Update)를 냅니다. 첫 CSPU가 2026년 5월 28일이었고, 8월 CSPU에는 Java SE 신규 보안 패치가 5건 들어갔습니다. 21.0.12.1이 그 산출물입니다.
| 구분 | 릴리스일 | 라이선스 |
|---|---|---|
| JDK 21.0.12 (7월 CPU) | 2026-07-21 | NFTC |
| JDK 21.0.12.1 (8월 CSPU) | 2026-08-18 | NFTC |
| 9월 CSPU | 2026-09-15 (예정) | NFTC 전망 |
| 10월 CPU | 2026-10-20 (예정) | OTN |
"마지막 무상 빌드는 21.0.12"라고 적어 두면 한 단계 낮은 버전에 고정하게 됩니다. 2026년 9월 5일 확인 기준으로 NFTC로 받을 수 있는 최신 빌드는 21.0.12.1입니다.
다만 이걸 "마지막 NFTC 빌드"라고 단정하진 않겠습니다. 9월 15일 CSPU가 남아 있고, 여기에 Java SE가 포함되면 그 빌드도 아직 NFTC거든요. 21.0.12.1 릴리스 노트가 다음 Java 보안 릴리스를 "the next critical patch update scheduled for October 20, 2026"으로 지목하고 있어 가능성은 높지만, 미래 사건이라 확정할 수 없습니다. 9월 15일 결과가 나오면 갱신하겠습니다.
OTN도 무료 라이선스인데 그냥 쓰면 안 되나요
여기서 갈립니다. OTN에도 "무상"이 붙지만 허용 용도가 네 가지로 닫혀 있습니다. 원문은 이렇습니다.
"Oracle grants You a nonexclusive, nontransferable, limited license to use the Programs ... only for: (i) Personal Use, (ii) Development Use, (iii) Oracle Approved Product Use, and/or (iv) Oracle Cloud Infrastructure Use."
이 목록에 사내 업무 시스템의 운영 구동(internal business operations)이 없습니다. 반대로 지금까지 적용되던 NFTC에는 있습니다.
"(a) internally use the unmodified Programs ... and running the Program for Your own personal use or internal business operations; and (b) redistribute the unmodified Program ..."
빠지는 문구가 두 개입니다. 하나는 운영 구동, 다른 하나는 무상 재배포죠. 고객사에 JDK를 포함해 납품하는 SI·ISV라면 뒤쪽이 더 아픕니다. 재배포 근거 조항 자체가 사라지니까요.
OTN의 Development Use는 "Your internal use of the Programs to develop, test, prototype and demonstrate Your Applications"로 정의됩니다. 개발자 노트북과 CI 빌드 스텝은 여기 들어갑니다. 운영 서버가 문제죠.

Oracle 지원 로드맵의 "End of Permissive Licensing of Java SE 21 (Sept 2026) approaching" 절 (확인일 2026-09-05)
이런 일이 처음은 아닙니다
JDK 17이 같은 순서를 밟았습니다. 로드맵 원문은 "Further update releases of Oracle JDK 17, released as of October 15, 2024 are available under the Java SE OTN license"이고, 경계선은 17.0.13이었죠. 9월에 permissive 라이선스가 끝나고 10월 셋째 화요일 CPU부터 OTN. 21이 그 패턴을 그대로 따릅니다.
21.0.12.1 릴리스 노트에는 "A similar licensing change will take effect for JavaFX 21 updates released after September 2026"이라는 문장도 있습니다. 데스크톱 Java를 유지보수 중이라면 JavaFX 21도 챙기셔야 합니다.

다음 CPU가 2026년 10월 20일임을 보여주는 Oracle 보안 페이지 (확인일 2026-09-05)
지금 움직여야 하는 팀은 누구인가요
두 조건을 동시에 만족하면 이번 달이 마지막 여유입니다. ① oracle.com에서 받은 Oracle JDK 21을 운영 서버나 컨테이너 이미지에서 돌리고 있고, ② 10월 20일 이후의 JVM 보안 패치를 계속 받아야 하는 경우죠. CVE 패치 최신성이 감사 항목인 금융·공공·의료, JDK를 포함해 납품하는 SI·ISV가 여기 해당합니다.
남은 45일은 개발·스테이징 교체 → 회귀 테스트 → 운영 순차 배포에 충분합니다. 혹시 사내에 Oracle JDK가 몇 대나 깔려 있는지 모른다면, 그 인벤토리 조사가 이번 달 할 일의 전부여도 괜찮습니다.
아무것도 안 해도 되는 경우도 많습니다
이 변경은 Oracle이 배포하는 바이너리에만 적용됩니다. 아래에 해당하면 9월에 아무 일도 일어나지 않습니다.
- 이미 Temurin·Corretto·Zulu·Liberica·Microsoft 빌드를 쓰는 팀. 전부 GPLv2+CPE라 자기 배포판의 EOL 날짜만 확인해 두시면 됩니다.
- Oracle JDK를 노트북·IDE·CI 빌드 스텝에서만 쓰는 경우. OTN의 Development Use로 계속 무상입니다. 다만 그 이미지가 운영으로 흘러가지 않는지는 확인하셔야 합니다.
- Java SE Universal Subscription을 이미 계약한 조직.
- Oracle JDK 25를 쓰는 팀. 25의 NFTC는 2028년 9월까지라 시계가 다릅니다.
- JDK 25 업그레이드가 10월 전에 끝나는 팀. 배포판 교체를 그 일정에 합류시키면 됩니다.
반대로 이렇게 넘기면 나중에 더 큽니다
21.0.12.1에 고정하고 버티기. 라이선스상으로는 합법입니다. FAQ가 "You may continue to use releases you have downloaded under the terms of the license under which you downloaded them"이라고 명시하거든요. 다만 라이선스 문제를 보안 부채로 바꿔치기하는 것뿐입니다. 규제 산업이라면 선택지에서 빼세요.
Oracle JDK 25로만 갈아타고 끝내기. FAQ가 "Oracle JDK 25 updates are planned to be made available under the NFTC until September of 2028"이라고 적어 두었습니다. 2년 유예일 뿐이고, 다음 LTS(현재 계획상 Java 29, 2027년 9월)가 나오면 같은 규칙이 반복됩니다.
jdk.java.net으로 도피하기. actions/setup-java 문서가 "Oracle OpenJDK builds are archived after a limited number of releases and no longer receive security updates"라고 못박았습니다. 장기 지원 대안이 아닙니다.
배포판 교체와 JDK 25 업그레이드를 한 PR에 묶기. 장애가 나면 원인이 라이선스 교체인지 4개 메이저 버전 점프인지 구분이 안 됩니다.

세 갈래 중 대부분의 팀에게 가장 싼 경로는 가운데입니다
어느 배포판으로 가야 하나요
호환성은 변별력이 없습니다. 후보 다섯이 전부 인증 통과를 공식 문서에 명시하거든요 — Temurin(JCK + AQAvit), Corretto·Zulu(TCK), Liberica(TCK-verified), Microsoft(LTS는 TCK 테스트). 실제 기준은 무상 패치를 언제까지 받느냐와 우리 클라우드와 맞느냐 둘입니다.
| 배포판 | 라이선스 | JDK 21 지원 종료 | 비고 |
|---|---|---|---|
| Amazon Corretto | GPLv2+CPE | 2030-10 (EOL) | 마지막 계획 업데이트 2030-07 |
| Eclipse Temurin | GPLv2+CPE | 최소 2029-12 | LTS 최소 4년 정책 |
| Microsoft Build of OpenJDK | GPLv2+CE | 2028-09 (earliest) | 상용 지원은 Azure 한정 |
| BellSoft Liberica | 무상(운영 포함) | 표기상 2032-03 | 상용 기준인지 명시 없음 |
| Azul Zulu | GPLv2+CPE | 로드맵 표 2031-09 | 유료 Core/Prime 기준 표 |
아래 두 줄은 단서를 붙여 읽으셔야 합니다. Azul 로드맵 표의 2031년 9월은 유료 Azul Core/Prime 기준이고, 무상 Zulu Community 빌드가 같은 기간까지 업데이트를 받는지는 공식 페이지에서 확인되지 않습니다. Liberica 표도 마찬가지라, 이 둘을 고르신다면 벤더에 직접 확인하세요.
선택은 클라우드 정합성으로 자르면 빠릅니다. AWS면 Corretto(JDK 21 지원이 가장 깁니다), Azure면 Microsoft, 온프레미스나 벤더 중립이면 Temurin입니다.
실제로 손대는 곳은 세 군데뿐입니다
JDK 21을 유지한 채 배포판만 바꾸면 애플리케이션 코드는 한 줄도 안 바뀝니다. 바뀌는 건 인프라 설정입니다.
(1) 설치 경로와 JAVA_HOME
# Before: Oracle JDK 21 RPM → /usr/lib/jvm/jdk-21-oracle-x64
# (+ /usr/java/jdk-21 심볼릭 링크)
sudo apt install temurin-21-jdk # Temurin
sudo apt-get install -y java-21-amazon-corretto-jdk # Corretto deb
sudo yum install -y java-21-amazon-corretto-devel # Corretto rpm
apk add amazon-corretto-21 # Corretto alpine
(2) Dockerfile의 FROM 태그
# 2026-09-05 확인 기준 태그
FROM eclipse-temurin:21-jdk # 또는 21.0.12_8-jdk
FROM amazoncorretto:21-al2023 # 또는 21.0.12
FROM mcr.microsoft.com/openjdk/jdk:21-ubuntu # distroless 변형도 있음
여기 함정이 있습니다. Adoptium은 jdk-21.0.12.1+1을 8월 19일에 배포했는데, 오늘 조회 기준 Docker Hub의 eclipse-temurin에는 21.0.12.1 태그가 아직 없습니다. 최신 태그는 여전히 21.0.12_8-jdk죠. Adoptium 지원 페이지의 'Latest Release' 칸도 갱신이 늦으니, 최신 버전은 Adoptium API로 교차 확인하시는 편이 낫습니다.
(3) CI의 distribution 값
- uses: actions/setup-java@v6
with:
distribution: 'temurin' # oracle 에서 변경. corretto / microsoft / liberica / zulu 도 가능
java-version: '21'
값은 대소문자를 구분합니다. 그리고 확인이 필요한 지점이 하나 있습니다. distribution: oracle이 10월 이후 JDK 21 업데이트를 계속 내려받게 될지는 저도 확인하지 못했습니다. CI가 조용히 실패할 수도, 반대로 조용히 OTN 빌드를 받아 쓰게 될 수도 있습니다. oracle로 두신 팀은 10월 20일 이후 첫 빌드 로그를 꼭 확인해 보세요.
근거가 약한 이야기 세 가지
"JDK 21이 EOL된다." 아닙니다. Oracle 로드맵상 Java 21의 Premier Support는 2028년 9월, Extended Support는 2031년 9월까지입니다(둘 다 유료 구독자 대상). 무상 패치를 어디서 받느냐만 바뀝니다.
"배포판을 바꾸면 애플리케이션이 깨진다." 근거가 약합니다. 같은 JDK 21이면 바이트코드와 표준 API가 동일하거든요. 실제로 깨지는 곳은 하드코딩된 JAVA_HOME, Dockerfile FROM, CI distribution 값, 그리고 벤더 전용 기능(Zulu의 CRaC, Liberica의 +fx 패키지)에 의존하던 부분입니다.
"Java 생태계 전체가 유료화된다." 대상은 Oracle이 배포하는 바이너리 하나입니다. OpenJDK 프로젝트와 대안 배포판은 GPLv2+CPE로 영구 무상이고, 이미 그쪽을 쓰는 팀에게 2026년 9월은 의미 없는 날짜입니다.
덧붙여 JDK 17로 되돌아가는 선택지를 보고 계시다면 로드맵 각주를 확인하세요. "The Extended Support fee will be waived for the period October 2026 – September 2029 for Java SE 17"이라는 조항이 비용 판단을 바꿉니다.
10월 20일 전에 확인할 목록
[ ] 운영 서버·이미지에 깔린 JDK 가 Oracle 배포판인가 (java -version 벤더 문자열)
[ ] 그중 운영 구동용과 개발/CI 전용을 분리했는가
[ ] JDK 를 포함해 고객사에 재배포하는 제품이 있는가 (OTN 에는 재배포 조항 없음)
[ ] JavaFX 21 을 쓰는 데스크톱 제품이 있는가
[ ] 목표 배포판을 정했는가 (AWS→Corretto / Azure→Microsoft / 중립→Temurin)
[ ] Dockerfile FROM 태그와 setup-java 의 distribution 값을 바꿨는가
[ ] 하드코딩된 /usr/lib/jvm/jdk-21-oracle-x64 경로가 스크립트에 남아 있지 않은가
[ ] SBOM·사내 이미지 레지스트리에 반영했는가
[ ] JDK 25 업그레이드와 한 번에 묶지 않았는가
[ ] Azul·Liberica 라면 무상 빌드의 업데이트 기간을 벤더에 확인했는가
다음에 볼 글
배포판을 바꿀지 버전을 올릴지가 아직 안 정해졌다면 Java 21에 남을까 25로 갈까를 먼저 보세요. 이 글의 라이선스 시계가 그 결정을 어떻게 강제하는지 정리해 두었습니다.
Spring Boot 세대를 같이 올릴 계획이라면 Boot 3의 무료 지원이 6월에 끝났습니다와 순서를 맞춰 보시는 게 좋습니다. JDK 교체와 프레임워크 업그레이드를 같은 분기에 몰면 회귀 원인 분리가 어려워지거든요.
버전 번호와 Docker 태그는 매달 바뀌는 구조라, 적용하실 때는 그 시점의 릴리스 노트로 다시 확인해 주세요. 9월 15일 CSPU 결과가 나오면 본문을 갱신하겠습니다. 잘못된 내용이나 보충이 필요한 부분이 있으면 댓글로 알려 주시면 반영하겠습니다.
참고한 자료
- Oracle Java Downloads — JDK 21의 NFTC 종료 문장, 21.0.12.1 표기 (확인일 2026-09-05)
- Oracle Java SE Support Roadmap (Updated August 4, 2026) — Sept 2026 종료 절, 지원 기간 표, Java 17 면제 각주 (확인일 2026-09-05)
- Oracle JDK 21.0.12.1 릴리스 노트 — NFTC 절, 10월 20일 CPU 언급, JavaFX 21 동반 변경 (확인일 2026-09-05)
- Oracle OTN 및 NFTC 라이선스 전문 — 허용 용도 네 가지, internal business operations·재배포 조항 (확인일 2026-09-05)
- Oracle Java SE Licensing FAQ (Updated September 16, 2025) — 기존 다운로드분 계속 사용, JDK 25는 2028년 9월 (확인일 2026-09-05)
- Oracle Critical Patch Updates 페이지 및 2026년 8월 CSPU 권고문 — CPU 일정, 월간 CSPU 체제 (확인일 2026-09-05)
- Eclipse Adoptium FAQ·Support 페이지 및 Adoptium API — GPLv2+CPE, 최소 2029년 12월 (확인일 2026-09-05)
- Amazon Corretto FAQs 및 21 User Guide — TCK 인증, EOL 2030-10, Linux 설치 명령 (확인일 2026-09-05)
- Microsoft Learn — Support roadmap 및 컨테이너 이미지 문서 (확인일 2026-09-05)
- actions/setup-java README — Supported distributions 표, Oracle OpenJDK 주석 (확인일 2026-09-05)
'백엔드 > JAVA' 카테고리의 다른 글
| [JAVA] Lombok을 계속 쓸까 — record로 넘길 것과 남길 것 (0) | 2026.09.05 |
|---|---|
| [JAVA] 가상 스레드, 켜면 방어선이 사라집니다 — Java 21로는 부족한 이유 (0) | 2026.08.27 |
| [JAVA] 21에 남을까 25로 갈까 — 결정을 미룰 수 없게 만든 건 라이선스입니다 (1) | 2026.08.25 |
| [에러] UnsupportedClassVersionError: class file version 65.0 — 숫자 두 개만 보면 끝납니다 (0) | 2026.08.16 |
| [디자인패턴] Builder Pattern (0) | 2021.06.30 |