백엔드기술/개발언어

Java 21이 릴리즈 되었습니다.

RevFactory 2023. 9. 20. 02:58
예정대로 9월 19일자로 Java 21 GA 릴리즈 되었습니다.
 
(이미지 출처 - Inside Java)
 
 

1. Java 21 Release Note

Java 21 전체 릴리즈 노트는 여기서 확인할 수 있습니다.
 

https://inside.java/2023/09/19/the-arrival-of-java-21

 

2. 주요 기능 요약

Java 21에 추가되는 새로운 기능들 중 Preview나 Incubator는 제외하고, 주요 기능만 살펴보면 아래와 같습니다.
 
2.1 Virtual Threads (Project Loom) 가 추가됩니다. (JEP 444)
 
"가상 스레드가 마이크로서비스에서 엔터프라이즈 애플리케이션에 이르기까지 비동기 애플리케이션을 개발하고 배포하는 방식에 영향을 미칠 것이기 때문에 Java 21은 가장 중요한 Java 릴리스 중 하나입니다."

- Agile Developer, Inc의 설립자 벤캇 수브라마니암(Venkat Subramaniam)

 
 
- 가상 스레드는 고성능 Java 애플리케이션에서 멀티태스킹을 관리할 수 있는 새롭고 효율적인 방법을 제공합니다.
- 기존 Java 개발에서 스레드는 여러 작업을 동시에 실행하기 위한 메커니즘입니다. 하지만 이러한 기존 스레드는 운영 체제에 묶여 있어 한 번에 활성화할 수 있는 스레드 수가 제한되어 있습니다. 이 제한으로 인해 더 많은 작업이나 사용자를 처리하도록 애플리케이션을 확장하기가 어렵습니다.
- 개발자는 각 사용자 요청에 하나의 스레드를 할당했습니다. 이 "요청당 하나의 스레드" 접근 방식은 간단했지만 시스템 제한으로 인해 벽에 부딪혔습니다. 대안으로 '비동기 프로그래밍'을 사용했는데, 이 방법은 더 효율적이긴 하지만 코드가 더 복잡하고 이해하기 어려웠습니다.
- 가상 스레드는 두 가지 장점을 결합한 것입니다. 개발자는 '요청당 하나의 스레드' 스타일을 사용하면서 운영 체제에 얽매인 제한을 피할 수 있습니다. 가상 스레드를 사용하면 시스템 제한에 대한 걱정 없이 많은 수의 스레드를 보유할 수 있습니다.
- 코틀린과 같은 언어에서 코루틴을 이용해서 해결하는 방법도 있었으나, 이제는 JVM 레벨에서 처리가 가능해졌다고 보시면 됩니다.
- 단, 잘못 알려진 것이 있는데 기존 스레드 구현을 제거하거나 기존 애플리케이션을 가상 스레드를 사용하도록 조용히 마이그레이션하는 것이 목표가 아니라고 스펙 문서에 명시되어 있습니다.
 
예제
// 기존 방식
Thread thread = new Thread(() -> {
  // Do some task
});
thread.start();

// 가상 쓰레드
Thread.ofVirtual().unstarted(() -> {
  // Do some task
}).start();
 
 
2.2 Sequenced Collections 이 추가됩니다. (JEP 431)

"Java 21의 시퀀스 컬렉션 기능은 개발자 커뮤니티를 위한 훌륭한 추가 기능입니다. 개발자는 더 이상 JUnit 테스트에서 실수로 인카운터 순서에 의존했다가 빌드 서버, 업그레이드 또는 다른 곳에서 실패할까 봐 걱정할 필요가 없습니다."

- Java 챔피언인 Jeanne Boyarsky

 
 
- 정해진 순서대로 아이템을 조회할 수 있는 컬렉션에 새로운 인터페이스가 추가됩니다.
 
interface SequencedCollection<E> extends Collection<E> {
    // new method
    SequencedCollection<E> reversed();
    // methods promoted from Deque
    void addFirst(E);
    void addLast(E);
    E getFirst();
    E getLast();
    E removeFirst();
    E removeLast();
}
 
 
 

 

2.3 Switch 문의 패턴 매칭이 강화되었습니다 (JEP 441)
- Switch 문에서 특정 타입에 따라 분기 처리할 수 있는 구문이 지원됩니다.
- Switch 문에서 Null 인 케이스를 처리하는 방식이 지원됩니다.
- Switch 문에서 when 키워드를 이용해 보다 복잡한 케이스 처리가 가능해집니다.
- Switch 문에서 Enum 을 보다 유연하게 지원합니다.
 
 
2.4 Record Pattern 을 이용하여 좀 더 깔끔한 코드를 작성가능합니다. (JEP 440)
- 레코드 패턴은 추출된 컴포넌트에 대한 지역 변수 선언을 제거하고 패턴과 값이 일치할 때 접근자 메서드를 호출하여 컴포넌트를 초기화합니다.
if (obj instanceof Point(int x, int y)) {
    System.out.println(x+y);
}
 
 
2.5 Z Garbage Collector(ZGC) (JEP 439)
- Z 가비지 컬렉터(ZGC)를 확장하여 젊은 개체와 오래된 개체의 세대를) 분리하여 유지함으로써 애플리케이션 성능을 개선합니다.
 
 
2.6 암호화 알고리즘 KEM 을 사용할 수 있도록 지원합니다 (JEP 452)
- 공개 키 암호화를 사용하여 대칭 키를 보호하는 암호화 기술인 키 캡슐화 메커니즘(KEM)을 위한 API가 추가됩니다.
 
 

3. Java 21 Support

Java 17 다음의 LTS 버전이라서 많이들 기다리셨을텐데요.
Java 생태계는 아직 준비 중이라 본격적인 도입까지는 시간이 좀 더 필요해보입니다.
 
- Spring Boot는 v3.2.0 부터 지원 예정이며, 현재, M2 단계이고, 11월 23일 릴리즈 목표입니다.
- Gradle는 v8.4 부터 지원 예정이며, 현재 Java 20을 완벽 지원하는 v8.3 이며, v8.4 일정은 미정입니다.
 
- JDK 21 용 GraalVM 은 출시되었습니다.
 
 

4. Java 21 Launch Event - Live Streaming

- 한국시간 9월 19일 21시부터 새벽 6시까지 8시간 동안 라이브스트리밍을 통해 Java 출시와 관련된 라이브 세션들이 진행됩니다. 세부 아젠다는 안내 페이지를 참고해주세요.
 
 

5. JDK 21 다운로드

5.1 OpenJDK JDK 21
 
5.2 Oracle 
- Oracle JDK 21 바이너리는 프로덕션 환경에서 무료로 사용할 수 있으며, 오라클 무료 사용 약관(NFTC)에 따라 무료로 재배포할 수 있습니다.
- JDK 21은 다음 LTS가 출시되고 1년 후인 2026년 9월까지 NFTC에 따라 업데이트가 제공됩니다. 이후 JDK 21 업데이트는 Java SE OTN 라이선스(OTN)에 따라 라이선스가 부여되며, OTN 라이선스의 제한된 무료 부여를 초과하여 프로덕션 환경에서 사용하려면 유료로 사용해야 합니다.
 
5.3 Azul Zulu
 
5.4 Amazon Corretto
 
5.5 RedHat
 
5.6 Eclipse Temurin (아직 없음)
 
5.7 Microsoft (아직 없음)
 
 
(참고) 오픈소스 기여 (JDK 11 이후)
 
- Java 21에서 수정된 것으로 표시된 2,585개의 JIRA 이슈 중 1,868개는 오라클이 완료했으며, 717개는 Java 커뮤니티의 다른 구성원이 기여했습니다.
- 오라클은 Amazon, ARM, Azul, Google, Huawei, IBM, Intel , ISCAS, Red Hat, Rivos, SAP 및 Tencent 등의 조직에서 일하는 개발자들의 뛰어난 기여에 감사를 표합니다.
 
 

더 보기

- The arrival of java 21! – Inside.java

- Java 21 Features: Practical Examples and Insights (howtodoinjava.com)
- Oracle Releases Java 21 and Extends Support Roadmap (prnewswire.com)
- Java 21 is Coming – Know the Latest Features in JDK 21 - DEV Community
- [Java] Java 21에 추가될 새로운 기능들(Java 21 Features) - MangKyu's Diary (tistory.com)
- GraalVM for JDK 21 is here! 🚀. Today we are releasing GraalVM for JDK… | by Alina Yurenko | graalvm | Sep, 2023 | Medium