본문 바로가기
자바

자바 버전 별 선택 이유

by 순원이 2025. 1. 10.

LTS(Long Term Support) 버전을 선택하는 것이 안정적인 운영에 유리하기 때문에 LTS 버전만 기록하겠습니다.

  • Java 8 : 2030년 12월까지
  • Java 11 : 2026년 9월까지
  • Java 17 : 2029년 9월까지
  • Java 21 (2031년까지 지원)

Java 8 (LTS)

  • 선택 이유:
    • 안정성이 매우 높고 레거시 시스템과 호환성 우수
    • Lambda와 Stream API 도입으로 함수형 프로그래밍 지원
    • 서드파티 라이브러리 지원이 가장 풍부

Java 11 (LTS)

  • Spring Boot 2.x의 권장 버전 - Spring Framework 5 -
  • 가비지 컬렉터 성능 향상
    • Java 11의 기본 가비지 수집기는 G1GC(가비지 우선 가비지 수집기)
      • 전체 힙을 일정 크기로 나누어 영역 별로 가장 많은 가비지가 쌓인 영역부터 수집합니다.
        • 더 예측 가능한 GC 시간
      • 기존 GC였던 CMS(Collector-Mark-Sweep)
        • 문제점: 객체 제거 후 빈 공간들이 불연속적으로 발생 (단편화)
  • HTTP Client API가 표준으로 포함
  • String, Files 등 핵심 API 개선
  • 모듈 시스템(Jigsaw) 안정화

Java 17 (LTS)

  • Spring Boot 3.x의 권장 버전
  • GC 성능 대폭 개선
    • G1 GC의 주요 개선사항:
      • Region 병합 처리 최적화
      • 동시성 처리 향상
      • 메모리 할당/해제 속도 개선
      • 기존 대비 평균 25% 처리량 향상
    • ZGC(Z Garbage Collector)의 주요 개선사항:
      • pause time이 최대 1ms 미만으로 감소
      • 힙 크기에 관계없이 일정한 GC 시간 보장
      • 멀티 테라바이트 힙도 효율적으로 처리
      • Java 11 대비 최대 3배 처리량 향상
  • Record, Sealed Class 등 새로운 클래스 추가
  • Pattern Matching 강화
  • Apple Silicon 등 최신 하드웨어 지원 강화
  • Stream.toList() 사용 가능

Java 21 (LTS)

  • Virtual Threads로 동시성 프로그래밍 혁신
    • 기존 스레드(플랫폼 스레드)의 한계 극복을 위한 경량 스레드
  • String Templates 도입
  • Pattern Matching for Switch 완성
  • Sequenced Collections 도입
  • Record Patterns 도입으로 데이터 처리 개선

Spring Boot 2.xx VS 3.xx

  • 2.xx
    • 레퍼런스가 많음많은 자료들이 2.xx를 기준으로 제공
  • 3.xx
    • Java 17 이상 지원
    • 변경 사항
      • Java EE를 jakarta EE 로 대체
        • javax. 에서 jakarta. 로 변경
      • 보안상 이슈로 /api/hello 와 /api/hello/ 는 더 이상 일치하지 않음.
    • GraalVM 기반의 Spring Native 공식 지원
      • MSA의 서버 실행 시간 및 메모리 사용률의 많은 비용 문제를 해결하기 위해 나온것인데 우리는 필요한가??
    • HTTP/RSocket Interface Client를 제공
    • Micrometer Observation API가 자동으로 구성되며, Observability 공식 지원
    • HTTP API 에러 처리를 위한 RFC 7807 스펙 지원
    • 이미 Spring Boot 2.xx로 개발된 서비스에서는 마이그레이션 비용을 감당하면서 까지 3.xx로 넘어갈 이유는 없다고 생각(시기상조)

결론

  • 스타트업/중소규모:
    • 장기 운영 고려, 최신 기능 사용, 성능 개선(GC) 필요:
      • Java 17 + Spring Boot 3.x
    • 안정성, 레퍼런스 풍부(개인적으로는 체감은 안됩니다)
      • Java 11 + Spring Boot 2.x
  • 마이크로서비스:
    • 가상 스레드, GC 최적화 이점
      • Java 21 + Spring Boot 3.x

추가 학습

자바 가비지 컬렉션 CMS -> G1 GC -> ZGC 버전 별 발전 과정