Java 10: 예측 가능한 반기 업데이트를 위한 시간 기반 릴리스 버저닝 도입
JEP 322 - 시간 기반 릴리스 버저닝
Java 10부터 Oracle은 Java 릴리스에 엄격한 시간 기반 릴리스 버저닝 모델을 도입했습니다. 이제 Java는 6개월마다 메이저 릴리스를 가집니다. Java 10은 2018년 3월에 출시되었으며, 향후 모든 메이저 버전은 매년 3월과 9월에 출시될 예정입니다. 릴리스는 세 가지 주요 범주로 분류됩니다.
- 기능 릴리스(Feature Release): 언어별 기능, JVM 기능, 새/개선된 API, API 제거/사용 중단 포함. 기능 릴리스 시점은 고정되어 있으며, 포함될 기능에 제약이 없습니다. 개발 중인 기능이 최신 릴리스에 포함되지 않으면 다음 릴리스로 계획됩니다.
- 업데이트 릴리스(Update Release): 버그 수정, 보안 이슈 수정, 회귀 수정 등 포함. 각 업데이트 릴리스는 분기별로 1월, 4월, 7월, 10월에 예정. 각 기능 릴리스는 다음 기능 릴리스가 발표되기 전에 두 번의 업데이트 릴리스를 받습니다.
- 장기 지원(LTS) 릴리스: 2018년 9월부터 3년마다 발표. Oracle은 이 릴리스에 대해 향후 3년간 지원과 업데이트 제공. 주로 프로덕션 배포에서 Java를 사용하는 기업 대상.
버전 형식
버전은 이제 다음 형식을 따릅니다:
$FEATURE.$INTERIM.$UPDATE.$PATCH
각 구성 요소 의미:
- $FEATURE: 메이저 기능 릴리스 번호. 기능 릴리스마다 1씩 증가. Java 10의 경우 10
- $INTERIM: 비기능, 비업데이트 릴리스로 버그 수정과 개선 포함. 호환되지 않는 변경, API 제거, 표준 API 변경 없음. 기능 릴리스의 경우 이 카운터는 0
- $UPDATE: 기능 릴리스 이후 업데이트 릴리스 번호. 예: 2018년 4월 업데이트는 JDK 10.0.1, 7월은 JDK 10.0.2
- $PATCH: 긴급 릴리스 번호. 치명적인 이슈를 긴급하게 해결해야 할 때만 증가
예제: Java 10 버저닝 세부 정보 출력
public class Tester {
public static void main(String[] args) {
Runtime.Version version = Runtime.version();
System.out.printf("feature: %s%n interim: %s%n update: %s%n patch: %s%n",
version.feature(), version.interim(), version.update(), version.patch());
}
}
출력
feature: 10
interim: 0
update: 2
patch: 0