Java 26 출시, AI 기능이라더니 확정된 건 없습니다

Published on

in

Java 26 출시, AI 기능이라더니 확정된 건 없습니다

📅 2026.03.17 공식 출시
JDK 26 기준
⚠ non-LTS

Java 26 출시, AI 기능이라더니
확정된 건 없습니다

오라클이 “AI·암호화 기능 강화”를 내세워 Java 26을 출시했습니다. 그런데 오라클 스스로 AI 관련이라 분류한 5개 기능 중 프로덕션에서 쓸 수 있게 확정된 건 단 하나도 없습니다. 전부 프리뷰 또는 인큐베이터 상태입니다. 실제로 지금 당장 체감할 수 있는 변경사항과, 레거시 코드를 올렸다가 걸리는 지점을 공식 문서 기준으로 정리했습니다.

JEP 수
10개
확정 5개 + 프리뷰/인큐베이터 5개
지원 기간
6개월
non-LTS (Oracle Premier 기준)
초기 힙 변화
-87%
RAM의 1.56% → 0.2%

AI 기능이라는데, 확정된 건 없습니다

Java 26 출시 보도자료를 보면 오라클은 이번 버전의 핵심으로 “AI 및 암호화 기능 강화”를 내세웁니다. InfoWorld 기사에서 오라클이 AI 관련이라고 분류한 기능은 총 5개입니다. 패턴 매칭 프리미티브 타입(JEP 530), AOT 객체 캐싱(JEP 516), 벡터 API(JEP 529), 구조적 동시성(JEP 525), 지연 상수(JEP 526)입니다.

💡 공식 발표문과 실제 상태를 같이 놓고 보니 이런 차이가 보였습니다

오라클이 AI 기능이라 부르는 5개 중 확정(Final) 상태인 건 하나도 없습니다. JEP 529 벡터 API는 JDK 16부터 시작해 이번이 11번째 인큐베이터 상태이고, JEP 530 프리미티브 패턴 매칭은 네 번째 프리뷰입니다. 인큐베이터 단계 기능은 프로덕션 코드에서 사용하지 않는 것이 공식 권장사항입니다.

인큐베이터 기능을 쓰려면 --add-modules jdk.incubator.vector 플래그를 명시적으로 붙여야 합니다. 붙이지 않으면 컴파일 자체가 안 됩니다. 벡터 API가 11번이나 인큐베이터를 반복하는 이유는 Project Valhalla의 Value Class가 안정화되어야 최종 확정이 가능하기 때문입니다. (출처: OpenJDK JEP 529, JetBrains Blog 2026.03.17)

결론부터 말씀드리면, Java 26에서 AI 연산 성능이 오늘 당장 좋아지는 건 아닙니다. 다만 향후 확정될 기능들을 미리 실험하고 피드백을 줄 수 있는 창구가 열린 것입니다.

▲ 목차로 돌아가기

지금 당장 달라지는 것들 — 확정 기능 5개

Java 26에서 확정 상태로 포함된 기능은 5개입니다. 프리뷰 없이 바로 프로덕션에서 쓸 수 있는 변경점들입니다.

HTTP/3 지원 드디어 들어왔습니다 — JEP 517

Java 11부터 있던 HttpClient API가 이제 HTTP/3를 지원합니다. 기본값은 여전히 HTTP/2이고, 명시적으로 .version(HttpClient.Version.HTTP_3)을 붙여야 활성화됩니다. HTTP/3 서버가 아닌 경우 자동으로 HTTP/2로 폴백합니다.

HTTP/3는 TCP가 아닌 QUIC(UDP 기반)을 사용해 패킷 손실이 있어도 다른 스트림에 영향을 주지 않습니다. JetBrains 공식 블로그에 따르면 현재 전체 웹사이트의 약 40%가 HTTP/3를 지원합니다. 이 수치가 의미하는 건, 지금 당장 API 클라이언트 코드에서 적용해볼 수 있는 곳이 생각보다 많다는 것입니다. (출처: JetBrains Blog, 2026.03.17)

G1 GC 처리량이 코드 수정 없이 올라갑니다 — JEP 522

G1 가비지 컬렉터의 Write Barrier 동기화 방식이 개선됐습니다. 카드 테이블을 두 개로 분리해 GC 스레드와 애플리케이션 스레드가 서로 다른 테이블을 쓰도록 바꿨습니다. VM 옵션 조정이나 코드 변경 없이 Java 26으로 올리기만 해도 효과가 납니다.

HappyCoders.eu 분석 기준으로 전반적인 처리량이 5~15% 향상됩니다. 비용은 추가 카드 테이블 하나를 위한 힙의 약 0.2%뿐입니다. 8GB 힙이라면 약 16MB만 더 씁니다. (출처: HappyCoders.eu Java 26 Features, 2025.12.04)

ZGC에서도 AOT 캐시를 쓸 수 있게 됐습니다 — JEP 516

Java 24에서 도입된 AOT 클래스 로딩/링킹 기능이 ZGC와 호환되지 않는 문제가 있었습니다. 객체 캐시를 GC 독립적인 포맷으로 저장하는 방식으로 전환해 이번 버전부터 어떤 GC를 써도 AOT 캐시를 쓸 수 있습니다. JEP 483이 Java 24에서 도입됐을 때 최대 42% 기동 시간 단축이 측정됐는데, 이 혜택을 ZGC 사용자도 이제 누릴 수 있습니다. (출처: OpenJDK JEP 516, JDK 26 Release Notes)

final 필드 변조에 경고가 뜨기 시작합니다 — JEP 500

Deep Reflection으로 final 필드를 바꾸는 코드가 있으면 이제 런타임 경고가 출력됩니다. Java 25까지는 조용히 실행됐지만, Java 26부터는 WARNING: Final field ... has been mutated reflectively 메시지가 나옵니다. 향후 버전에서 예외로 바뀔 예정이라 지금 대응해두는 게 맞습니다.

Applet API가 드디어 사라졌습니다 — JEP 504

2017년 Java 9에서 deprecated, 2021년 Java 17에서 삭제 예고 이후 Java 26에서 완전히 제거됐습니다. java.applet 패키지 전체와 javax.swing.JApplet, java.beans.AppletInitializer도 포함됩니다.

▲ 목차로 돌아가기

힙 크기가 조용히 바뀌었습니다

💡 JEP가 없는 변경이라 많이 놓치는 부분입니다

JDK 26에는 JEP로 공식 지정되지 않은 수백 가지 소소한 변경이 있습니다. 그 중 실무에서 가장 파급력이 큰 건 초기 힙 크기(Initial Heap Size) 기본값 변경입니다. (출처: JDK Bug Tracker JDK-8348278)

Java 25까지는 -Xms-XX:InitialRAMPercentage를 따로 지정하지 않으면 물리 RAM의 1/64(약 1.56%)이 초기 힙으로 잡혔습니다. Java 26부터는 이 기본값이 RAM의 1/500(약 0.2%)으로 바뀝니다.

📊 실제 수치로 확인하면 이렇습니다
RAM 크기 Java 25 이전 초기 힙 Java 26 초기 힙
8 GB 128 MB 16 MB
32 GB 512 MB 65 MB
64 GB 1,024 MB (1 GB!) 128 MB

이게 왜 중요하냐면, 초기 힙 크기는 JVM 시작 시점에 GC가 생성하는 내부 데이터 구조와 직결됩니다. 64GB RAM 서버에서 Hello World 수준의 소형 마이크로서비스를 띄워도 Java 25까지는 1GB 힙을 기본으로 잡아 GC 초기화에 불필요한 시간을 소비했습니다. Java 26부터는 기동 시간이 체감상 줄어들 수 있습니다.

단, 이 변경은 기존에 -Xms를 명시적으로 지정하지 않은 환경에서만 영향을 줍니다. CI/CD 스크립트나 Docker 파일에 이미 JVM 옵션을 명시했다면 바뀌는 게 없습니다. 확인 안 하고 넘어갔다가 성능 테스트 결과가 달라지는 경우가 있을 수 있어 주의가 필요합니다.

▲ 목차로 돌아가기

레거시 코드에서 여기가 걸립니다

Java 26으로 기존 프로젝트를 마이그레이션할 때 컴파일 오류 또는 런타임 오류로 이어질 수 있는 지점들을 공식 Release Notes 기준으로 정리했습니다. (출처: JDK 26 Release Notes, jdk.java.net/26/release-notes)

🚨 컴파일 오류 — Thread.stop() 완전 제거

java.lang.Thread.stop()이 Java 26에서 완전히 제거됐습니다. 1998년 Java 1.2에서 deprecated 된 이후 28년 만입니다. Java 25까지 컴파일한 바이너리를 Java 26 JVM에서 실행하면 NoSuchMethodError가 발생합니다. Java 26으로 재컴파일하면 컴파일 단계부터 오류가 납니다. (출처: JDK Bug Tracker JDK-8368226)

🚨 RMI TLS 연결 기존 동작 변경

SslRMIClientSocketFactory로 RMI TLS 연결을 쓰는 경우, Java 26부터 기본적으로 TLS 엔드포인트 식별이 활성화됩니다. 서버 인증서에 서버 호스트명과 일치하는 SAN(Subject Alternative Name)이 없으면 기존에 됐던 연결이 갑자기 실패할 수 있습니다. 비활성화하려면 jdk.rmi.ssl.client.enableEndpointIdentification=false 설정이 필요합니다. (출처: JDK 26 Release Notes, JDK-8341496)

🚨 HttpContext 속성 공유 방식 변경

JDK 내장 HTTP 서버에서 HttpContext의 attribute map이 HttpExchange와 공유됐던 동작이 Java 26부터 각 exchange가 독립적인 map을 갖는 방식으로 바뀌었습니다. 컨텍스트 공유에 의존하는 코드가 있으면 jdk.httpserver.attributes 시스템 프로퍼티로 이전 동작으로 되돌릴 수 있습니다. (출처: JDK 26 Release Notes, JDK-7105350)

🚨 DESede 알고리즘 및 PKCS1Padding 요구사항 제거

보안 라이브러리에서 Triple DES(DESede) 관련 알고리즘과 RSA/ECB/PKCS1Padding이 Java SE 표준 요구사항에서 제거됐습니다. 해당 알고리즘이 구현되지 않을 수 있습니다. 보안 코드에서 이 알고리즘을 직접 호출하는 코드는 검토가 필요합니다. (출처: JDK 26 Release Notes, JDK-8361964)

▲ 목차로 돌아가기

Java 26 써야 할까요, Java 25에 있어야 할까요

💡 LTS와 non-LTS 차이를 지원 기간으로만 보면 놓치는 게 있습니다

Oracle의 공식 지원 로드맵 기준으로 Java 25는 LTS로 최소 2033년까지 지원됩니다. Java 26은 non-LTS로 Oracle Premier 지원이 6개월(2026년 9월까지)입니다. 지원 기간만 보면 선택이 쉬운 것 같지만, 실제로는 Oracle NFTC 라이선스 조건도 같이 봐야 합니다. (출처: Oracle Java SE Support Roadmap)

State of Java 2026 보고서에 따르면 기업 개발자 커뮤니티의 권고는 명확합니다. Java 21 LTS를 쓰고 있다면 Oracle NFTC 무료 지원이 2026년 9월에 끊기기 전에 Java 25로 마이그레이션하는 것이 최우선입니다. Java 26은 그 이후의 다음 스텝입니다. (출처: devnewsletter.com, 2026.01.08)

🔍 업그레이드 판단 기준 정리
현재 버전 권장 행동 이유
Java 21 → Java 25로 먼저 NFTC 만료 2026.09
Java 25 선택적 검토 G1·HTTP/3 혜택만 필요 시
Java 17 이하 계획 수립 시급 이미 지원 종료 또는 임박

개인 프로젝트나 사이드 프로젝트라면 Java 26을 써보는 게 나쁘지 않습니다. HTTP/3, G1 최적화, Thread.stop() 제거 등 실질적 변화를 직접 확인하기 좋은 버전입니다. 다만 기업 환경의 프로덕션 시스템이라면 non-LTS 특성을 감안해 6개월 후 Java 27 출시 시점에 다시 판단하는 것이 안전합니다.

▲ 목차로 돌아가기

프리뷰/인큐베이터 5개, 이미 써도 됩니다 — 단, 조건이 있습니다

프리뷰 기능은 --enable-preview 컴파일 플래그를 붙이면 바로 쓸 수 있습니다. JetBrains IntelliJ IDEA에서는 Project Language Level을 “26 (Preview)”로 설정하면 됩니다. 단, 프리뷰 기능으로 빌드한 코드는 다음 Java 버전과 호환이 보장되지 않습니다.

PEM 암호화 객체 인코딩 — JEP 524 (두 번째 프리뷰)

암호화 키, 인증서를 PEM 포맷으로 인코딩/디코딩하는 API입니다. Java 25까지는 암호화된 개인키를 PEM에서 읽으려면 15줄 이상의 코드가 필요했습니다. Java 26의 PEM API를 쓰면 PEMDecoder.of().withDecryption(...).decode(...) 한 줄로 줄어듭니다. 두 번째 프리뷰에서 클래스 이름 변경(PEMRecord → PEM)과 KeyPair 지원이 추가됐습니다. (출처: OpenJDK JEP 524)

지연 상수 — JEP 526 (두 번째 프리뷰)

Java 25의 Stable Values API가 이번에 Lazy Constants로 이름이 바뀌고 API도 크게 단순화됐습니다. 초기화 타이밍을 자유롭게 설정할 수 있는 불변 객체를 만들 수 있고, JVM이 이를 진짜 상수처럼 Constant Folding 최적화를 적용합니다. Java 25에서 Stable Values API를 이미 써본 경우, 저수준 메서드들이 제거되고 List/Map 인터페이스로 팩토리가 이동했기 때문에 리팩토링이 필요합니다. (출처: OpenJDK JEP 526, HappyCoders.eu)

구조적 동시성 — JEP 525 (여섯 번째 프리뷰)

다른 스레드에서 실행 중인 연관 작업들을 하나의 작업 단위로 묶어 에러 처리와 취소를 단순화하는 API입니다. 이번에 Joiner 인터페이스에 onTimeout()이 추가됐고, allSuccessfulOrThrow()가 이제 Stream 대신 List를 반환합니다. Virtual Thread 디버깅도 IntelliJ IDEA 2026.1에서 향상됐습니다. (출처: OpenJDK JEP 525)

▲ 목차로 돌아가기

Q&A

Q. Java 26이 non-LTS면 프로덕션에서는 쓰면 안 되나요?
쓰면 안 되는 건 아닙니다. Oracle Premier 지원이 6개월인 것이지, 기술적으로 안정성에 문제가 있는 건 아닙니다. 단, 보안 패치와 버그 수정을 6개월 이상 받으려면 Java 27 출시(2026년 9월 예정) 이후 빠르게 올라가야 합니다. 소규모 팀이나 마이크로서비스 아키텍처처럼 빠른 업그레이드가 가능한 환경이라면 non-LTS도 실용적으로 쓸 수 있습니다.
Q. Thread.stop()을 쓰는 레거시 코드가 있는지 어떻게 확인하나요?
가장 빠른 방법은 프로젝트 전체에서 Thread.stop()을 텍스트 검색하는 것입니다. 직접 쓰지 않아도 의존 라이브러리 중에 해당 메서드를 호출하는 곳이 있을 수 있습니다. Java 26 JVM에서 기존 바이너리를 실행하면 런타임에 NoSuchMethodError가 뜨기 때문에, 마이그레이션 전 Java 26으로 테스트 환경에서 전체 E2E 테스트를 돌려보는 것을 권장합니다.
Q. G1 GC 처리량 향상이 실제 서비스에서도 체감됩니까?
HappyCoders.eu 분석 기준으로 5~15% 처리량 향상이 측정됩니다. 단, 이 수치는 GC 동기화 오버헤드가 병목인 워크로드 기준입니다. 이미 G1 튜닝이 잘 된 환경이거나 CPU 코어 수가 적은 환경에서는 체감이 적을 수 있습니다. 코드 수정 없이 JVM 버전만 올리면 되기 때문에, 테스트 환경에서 Before/After 처리량을 측정해보는 게 가장 정확합니다.
Q. 프리뷰 기능을 프로덕션에서 쓰면 어떻게 되나요?
기술적으로 막히는 건 아니지만, 다음 Java 버전에서 해당 API가 변경되면 재컴파일이 필요합니다. Java 26에서 Stable Values API를 쓴 코드가 Java 26 Lazy Constants API로 이름이 바뀌면서 대규모 리팩토링이 필요해진 것처럼 말입니다. 프리뷰 기능은 내부 도구, 사이드 프로젝트, 실험 목적으로 사용하고 공개 프로덕션 서비스에는 확정 이후 적용하는 것이 권장됩니다.
Q. IntelliJ IDEA에서 Java 26 프리뷰 기능 쓰려면 어떻게 설정하나요?
Project Structure → Project Settings → Project → SDK를 26으로 설정한 뒤, Language Level을 “26 (Preview) – Primitive types in patterns (Fourth preview)”로 선택하면 됩니다. 인큐베이터 기능인 Vector API는 추가로 VM Options에 --add-modules jdk.incubator.vector를 넣어야 합니다. IntelliJ IDEA 2026.1부터 Java 26 지원이 기본 포함됩니다.

▲ 목차로 돌아가기

마치며

Java 26은 조용하지만 착실한 버전입니다. HTTP/3 지원, G1 GC 처리량 향상, ZGC AOT 캐시 호환 — 이 세 가지만으로도 업그레이드를 고려할 이유는 충분합니다. 특히 G1 최적화는 코드 한 줄 안 건드려도 체감이 나는 종류의 개선입니다.

다만 솔직히 말씀드리면, 오라클의 “AI 기능 강화” 홍보 문구는 과장이 있습니다. 확정된 AI 전용 기능이 하나도 없고, Vector API는 Java 16부터 11번이나 인큐베이터 상태입니다. AI 연산 성능이 오늘부터 달라지는 건 아닙니다. 기대했던 것과 달랐던 부분입니다.

Thread.stop() 제거와 초기 힙 크기 변경은 조용하지만 기존 코드에 영향을 줄 수 있는 지점입니다. 마이그레이션 전에 반드시 테스트 환경에서 확인하고 넘어가길 권장합니다. Java 26은 오늘 출시됐지만, 기업 환경에서 진짜 선택지가 될 버전은 6개월 후 Java 27이 나올 때 그림을 다시 보는 게 맞습니다.

▲ 목차로 돌아가기

📚 본 포스팅 참고 자료

  1. OpenJDK JDK 26 공식 페이지 — openjdk.org/projects/jdk/26/
  2. JDK 26 Release Notes 공식 문서 — jdk.java.net/26/release-notes
  3. Oracle 공식 Java 26 발표 — oracle.com (2026.03.17)
  4. InfoWorld — JDK 26 The new features in Java 26 (2026.03.18)
  5. JetBrains Blog — Java 26 in IntelliJ IDEA (2026.03.17)
  6. HappyCoders.eu — Java 26 Features with Examples
  7. Oracle Java SE Support Roadmap

⚠️ 면책 조항: 본 포스팅은 2026년 3월 18일 JDK 26 공식 출시 기준으로 작성됐습니다. 이후 오라클 및 OpenJDK의 업데이트, 보안 패치, 정책 변경에 따라 내용이 달라질 수 있습니다. 프로덕션 적용 전 반드시 공식 릴리스 노트와 Oracle Java SE Support Roadmap을 직접 확인하시기 바랍니다. 본 포스팅 작성 이후 서비스 정책·UI·기능이 변경될 수 있습니다.

댓글 남기기


최신 글


아이테크 어른경제에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기