..

(번역) 올바른 JDK 버전 선택하기: 비공식 가이드

원문을 짧게 요약한 글입니다.

  1. 소개
  2. 업데이트와 업그레이드
  3. 여러 런타임 사용하기
  4. 애플리케이션별 가이드라인

1. 소개

  • 최신 버전의 JDK는 더 나은 보안과 성능을 제공
  • 자바 버전을 유지하면 업데이트 vs 자바 버전을 올리면 업그레이드
  • Feature Release
    • 새로운 API, 기능, 함수가 추가되는 메이저 패치
    • JDK 8, 9, 10처럼 표현됨
    • 특정 버전(8, 7, 21 등)은 장기 지원(LTS)이 제공됨
  • Update Release
    • Feature Release에 포함되는 마이너 패치
    • JDK 8u411, JDK 21.0.3처럼 표현됨

2. 업데이트와 업그레이드

  • 업데이트
    • 상대적으로 높은 호환성 위험
    • 보안이나 성능 개선 위주
  • 업그레이드
    • 상대적으로 낮은 호환성 위험
    • 코드를 변경하기 쉬운 새로운 기능 제공
    • 코드를 변경하지 않더라도…
      • 더 빨리 시작(start up)
      • 더 빨리 최대 성능에 도달(warmup)
      • 더 빨리 실행(throughput)
      • 더 효율적으로 자원 사용
  • 안정성과 효율성
    • 두 마리 토끼를 모두 잡을 순 없을까?
    • 있다. JDK를 여러 개 사용하자.

3. 여러 런타임 사용하기

  • 단일 JDK
    • 과거에는 제약사항이 있었다
      • 자바 업데이트의 간격이 길고
      • 하드 드라이브의 용량이 작았음
    • flag days를 정해서 한 번에 모두 업그레이드 했었음
  • 다중 JDK
    • 이젠 제약사항이 사라졌다
      • 더 많은 메모리와 스토리지
      • 컨테이너와 시스템 격리 기술 발전
    • 애플리케이션마다 다른 자바 런타임을 제공해 컨테이너화(jlink, java packager)

4. 애플리케이션별 가이드라인

4-1. 신규 개발이 한창이라면…

  • 최신 Feature Release
    • 조금이라도 더 최신 버전으로 땡겨 놔야 한다

4-2. 개발 초기, 최소 1년은 지나야 출시 예정이라면…

  • 최신 Feature Release
    • LTS를 사용해야 하는 것 아닌가? 싶겠지만
    • 그렇게 빨리 출시되리라는 보장이 없다. 개발 중에 새 LTS가 나올수도
    • 최신 버전을 사용해 두면 다음 LTS로 넘어가기도 쉽다

4-3. 개발 막바지, 출시가 1년이 채 안 남았다면…

  • 최신 LTS, 단 최소 9개월이 지난
    • 우리 애플리케이션만 최신 버전이라고 다 되는 게 아니다
    • 9개월은 서드 파티 컴포넌트들이 새로운 LTS에 대응할 최소한의 시간

4-4. 이미 운영중이고 수정이 활발하다면…

  • 최신 LTS, 단 최소 2년이 지난
    • 어차피 활발히 고치고 있다면 마이그레이션 계획도 같이 세울 수 있을 것
    • 최신 LTS를 고르는 시점은 애플리케이션에 더 이상 수정이 없는 상태일 때

4-5. 이미 운영중이고 수정이 많지 않다면…

  • 변경하지 말 것
  • 예외
    • 사용중인 JDK 지원이 1년 내로 끝날 경우
    • 의존성이나 타사 라이브러리의 지원 기간이 JDK 지원 기간보다 짧을 경우
    • 메모리나 CPU 사용량이 너무 높을 경우