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)
- 문제점: 객체 제거 후 빈 공간들이 불연속적으로 발생 (단편화)
- 전체 힙을 일정 크기로 나누어 영역 별로 가장 많은 가비지가 쌓인 영역부터 수집합니다.
- Java 11의 기본 가비지 수집기는 G1GC(가비지 우선 가비지 수집기)
- 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배 처리량 향상
- G1 GC의 주요 개선사항:
- 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/ 는 더 이상 일치하지 않음.
- Java EE를 jakarta EE 로 대체
- 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) 필요:
- 마이크로서비스:
- 가상 스레드, GC 최적화 이점
- Java 21 + Spring Boot 3.x
- 가상 스레드, GC 최적화 이점
추가 학습
'자바' 카테고리의 다른 글
JVM(with 컴파일 과정) (1) | 2025.01.16 |
---|---|
자바 가비지 컬렉션 CMS → G1 GC → ZGC 버전 별 발전과정 (0) | 2025.01.10 |
올바른 Optional 사용법 (0) | 2024.12.21 |
일급컬렉션을 쓰는 이유 (1) | 2023.11.02 |