Home JDK 25 주요 변경점
Post
Cancel

JDK 25 주요 변경점

최근 Java 버전이 빠르게 릴리즈되면서, 새로운 기능들이 계속 추가되고 있다.
사내의 다른 분이 정리해준 글들을 참고해 2025년 9월 릴리즈된 JDK 25의 변경사항 중 일부를 선별해서 정리해보았다.

JDK 25에서의 변화

JDK 25에는 다양한 JEP가 포함되어 있지만, 생각해볼만한 기능 위주로 정리해본다.

JEP?

Java 기능 변경 제안서로, Java에 새로운 기능을 넣거나 기존 기능을 바꾸거나 제거할 때 정리해서 올리는 공식 문서.

1. Structured Concurrency (JEP 505)

기존 문제

기존 Java의 비동기 처리(Future, CompletableFuture)는 다음과 같은 문제가 있었다.

  • 한 작업이 실패해도 다른 작업이 계속 실행됨 (취소 전파 어려움)
  • 부모 작업이 중단되어도 자식 작업은 계속 실행됨
  • 예외 처리 흐름이 분산되어 디버깅 어려움

예를 들어

  • 사용자 조회 API (10초)
  • 주문 조회 API (1초)

만약 주문 조회에서 실패해도 사용자 조회는 계속 실행된다.

개선 내용

Structured Concurrency는 여러 비동기 작업을 하나의 구조로 묶어 관리한다.

  • 하나 실패 → 전체 실패 전파
  • 부모-자식 관계 명확
  • 불필요한 작업 자동 취소

개선 의미

이 기능은 다음과 같은 상황에서 의미가 있을 수 있다.

  • 여러 API 병렬 호출
  • 외부 API 호출 조합
  • 마이크로서비스 간 병렬 요청 처리

마이크로서비스 구조에서 하나의 API 요청을 처리하기 위해 여러 내부 서비스를 동시에 호출하는 경우가 있을 수 있다.

예를 들면 주문 상세 조회 API 하나를 만들 때 주문 서비스에서 주문 기본 정보, 결제 서비스에서 결제 상태, 배송 서비스에서 배송 상태를 각각 병렬로 조회할 수 있다.

전체 요청은 실패로 처리될 가능성이 큰데도 남은 작업이 끝까지 수행되어 스레드와 네트워크 자원을 낭비할 수 있는데 실패를 전체 작업에 전파함으로써 기존 CompletableFuture 기반 코드보다 에러 처리와 리소스 관리가 훨씬 명확해지는 방향이다.

주의점

현재 Preview 기능이고, 기존 코드 전환 비용 문제도 고려해보아야 한다.

2. Generational Shenandoah GC (JEP 521)

기존 Shenandoah 특징

  • Low-latency GC
  • pause time 최소화

하지만 기존에는 세대 구분이 없었다.

개선 내용

JDK 25에서는 Shenandoah에 Generational 구조가 추가됨

  • Young / Old 영역 분리
  • Young 영역 중심 GC 수행

개선 의미

일반적인 서버 애플리케이션은

  • 대부분 객체는 금방 사라짐 (short-lived)
  • 일부 객체만 오래 유지됨

DTO, 컬렉션 등 짧은 시간 안에 사라지는 객체와 캐시 구조, 세션성 데이터처럼 오래 유지되는 객체를 구분없이 함께 관리하면 금방 사라질 객체를 정리하는 작업에도 오래 살아있는 객체들을 더 많이 확인하게 된다.

Generational GC는 이 패턴을 반영해 Young 영역 위주로 자주 회수하고 오래 살아남은 객체는 Old 영역으로 분리해 관리하여 확인하는 비용을 줄이는 방식이다.

기대 효과

  • GC 효율 증가
  • 불필요한 Full GC 감소
  • 응답 지연 감소

3. Stable Values (JEP 502)

기존 문제

final 필드는 애플리케이션 시작 시 초기화됨

  • 문제점
    • 초기화 비용 증가
    • 애플리케이션 startup 시간 증가

개선 내용

Stable Values는
final 값을 lazy 초기화 가능하게 함

예를 들면 get()을 호출할 때 (실제 사용될 때) 초기화되는 방식이라는 것.

  • 필요할 때 초기화
  • 초기 실행 부담 감소

개선 의미

다음과 같은 경우 효과 있음:

  • 무거운 객체 초기화
  • 캐시성 데이터
  • 설정 기반 객체

특히 빠른 서버 기동이 중요한 환경에서 의미가 있음

주의점

  • 실제 성능 개선 효과는 상황에 따라 다름
  • 모든 final 변수에 적용할 필요 없음

정리

Preview 기능이 많아 실무에 바로 도입하기에는 어려울 수 있지만 동시성 처리 방식의 변화 같은 경우 유의미하게 백엔드 구조에 영향을 줄 수 있는 기능이라고 생각된다. 미리 학습해두고 왜 이런 방향성을 선택하고 있는지 파악해두면 좋을 것 같다.

This post is licensed under CC BY 4.0 by the author.

Redis 운영 관점에서 알아보기 (2)

실무 시스템 구조