Java 9의 새로운 버전 관리 체계 개요
Java 9부터는 시맨틱 버저닝(Semantic Versioning) 방식과 일관성을 갖춘 새로운 버전 관리 체계가 적용되었습니다. 버전 번호는 점(.)으로 구분된 비어 있지 않은(non-empty) 문자열 시퀀스로 구성되며, 크게 세 가지 핵심 요소인 메이저 버전 번호($MAJOR), 마이너 버전 번호($MINOR), 보안 수준($SECURITY)으로 이루어집니다.
새로운 버전 관리 규칙은 Runtime.Version 클래스에 문서화되어 있으며, 이 클래스를 통해 프로그램 실행 중에도 버전 정보를 손쉽게 조회할 수 있습니다.
버전 번호 형식
$MAJOR.$MINOR.$SECURITY(.$otherpart)?
- $MAJOR: 메이저 버전 번호입니다. 플랫폼 사양에 큰 변화가 있는 메이저 버전이 출시될 때마다 증가합니다. JDK 9의 경우 이 값은 9입니다.
- $MINOR: 마이너 버전 번호입니다. 표준 API의 버그 수정이나 기능 개선이 포함된 릴리스에서 증가합니다.
- $SECURITY: 보안 수준을 나타냅니다. 중요한 보안 취약점 수정이 포함된 릴리스에서 증가하며, 마이너 버전 번호가 올라가더라도 0으로 초기화되지 않습니다.
- $otherpart: JVM 벤더가 소수의 비보안성 패치를 표시하기 위해 사용하는 하나 이상의 추가 버전 정보입니다.
버전 문자열 형식
버전 문자열에는 버전 번호 외에도 조기 액세스(early-access) 릴리스 식별자나 빌드 번호 같은 부가 정보가 포함될 수 있습니다.
$VNUM(-$PRE)?\+$BUILD(-$OPT)? $VNUM-$PRE(-$OPT)? $VNUM(+-$OPT)?
- $PRE: 사전 릴리스(pre-release) 식별자입니다.
- $BUILD: 빌드 번호입니다.
- $OPT: 타임스탬프 등 선택적으로 제공되는 부가 정보입니다.
예제 코드
아래 예제는 Runtime.version() 메서드를 사용해 현재 런타임의 버전 정보를 확인하는 방법을 보여 줍니다.
public class VersionSchemeTest {
public static void main(String args[]) {
System.out.println(Runtime.version().toString()); // 버전의 문자열 표현
System.out.println(Runtime.version().major()); // 메이저 버전 번호
System.out.println(Runtime.version().minor()); // 마이너 버전 번호
System.out.println(Runtime.version().security()); // 보안 버전 번호
}
}실행 결과
9.0.4+11 9 0 4
이처럼 Java 9의 새로운 버전 관리 체계는 버전 번호만 보고도 해당 릴리스의 성격(기능 변경, 버그 수정, 보안 패치 여부)을 직관적으로 파악할 수 있도록 설계되어, 개발 단계와 운영 환경 모두에서 버전 관리의 명확성과 신뢰성을 크게 높여 줍니다.