SpringBoot

[JAVA, SPRING BOOT] 2024 자바 스프링 부트 버전

오이호박참외 2024. 9. 20. 19:00

 

! Spring 개발자라면 Java 17, 21 버전을 사용하자 !


SpringBoot 2.x > 3.x으로 버전 업그레이드 간 버전 이슈에 대한 정리를 하고자 한다.


Java version

 

 

Jetbrains 개발자 에코시스템 2023 자바 설문
(https://www.jetbrains.com/lp/devecosystem-2023/java/)
Jetbrains 개발자 생태계 2023 자바 설문조사 출처 - https://www.jetbrains.com/lp/devecosystem-2023/java/

대부분의 자바 개발자들이 java 8, 11, 17을 사용하고 있다.

이 세 가지 버전이 많이 사용되는 이유는 해당 버전들이 LTS(Long Term Support) 버전, 즉 장기 지원 버전이기 때문이다.

보안 업데이트와 버그 수정이 장기간 지원되므로 안정적으로 운영할 수 있으며 이로 인해 광범위한 사용자 기반과 커뮤니티 지원을 받을 수 있다. 또한, 풍부한 라이브러리와 프레임워크가 이들 버전에 최적화되어 있어, 개발자들이 손쉽게 작성할 수 있는 장점이 있다.


Java version support

출처 - https://www.oracle.com/kr/java/technologies/java-se-support-roadmap.html

서포트 기간을 확인했을 때는 현재 출시된 LTS 어느 버전을 사용해도 안정적으로 관리할 수 있다.

  • 일반 지원 : 소프트웨어 주된 지원 기간으로, 정기적인 업데이트, 버그 수정, 보안 패치, 새로운 기능 추가
  • 확장 지원 : 일반 지원 기간 이후의 기간으로, 중요한 보안 패치와 긴급 버그 수정을 제공하지만, 새로운 기능 추가나 성능 개선은 거의 없으며, 추가 비용이 발생할 수 있다. (Java 11의 경우 확장 지원 기간이 6년 늘어나 2032년까지 지원 가능)

Java Version 선택의 기준

  1. Spring Boot 상위 버전과 호환이 되어야 한다. -> 17 이상의 버전 선택 (Spring Boot 3.x는 자바 17 이상을 요구)
  2. 서포트 기간이 길어야 한다. -> 가급적 최신 LTS 버전 선택 (안정성, 보안 업데이트 장기간 제공)
  3. 최신 기능들을 사용하고 싶다. -> 버전 별 추가된 기능을 보고 선택
  4. 기존 코드와의 호환성 유지 -> 버전 간 호환성 검토
  5. 보안 업데이트를 중요시한다. -> 최신 버전 선택(최신 보안 패치가 적용된 버전을 선택해 보안 취약점을 최소화할 것)
  6. 라이브러리 및 프레임워크의 지원 -> 필요한 라이브러리의 호환성 확인  

Spring Boot version support

출처 - https://spring.io/projects/spring-boot#support
출처 - https://spring.io/projects/spring-boot#support

장기 지원, 최신 기능, 향상된 성능 등의 이유로 Spring Boot 2.7.x 버전 또는 3.1.x 버전 이상을 사용하는 것이 좋을 것으로 보인다.


출처 - https://spring.io/blog/2022/05/24/preparing-for-spring-boot-3-0

  • Spring Boot 2.x: 주로 Java 8 및 11을 지원하며, 최신 기능을 위해서는 Java 14, 15, 16을 이용할 수 있다.
  • Spring Boot 3.x: Java 17 이상을 요구하며, 최신 버전의 기능과 성능을 활용할 수 있다.

Java 17 또는 Java 21을 쓰자

  • Spring Boot 3.2.x + Java 17 또는 Spring Boot 3.2.x + Java 21
  • Spring Boot 2.7.x + Java 8 (Java 8을 꼭 써야 하는 경우)

SpringBoot 2.x > 3.x으로 버전 업그레이드

Java 8 에서 Java 21(Gradle 8.5 적용 - JDK 21 버전 적용을 위한 최소 버전)로 업그레이드 -> Virtual Thread 지원

Virtual Thread

자바의 동시성 프로그래밍을 보다 간편하고 효율적으로 만들기 위해 설계된 경량 스레드

  • OS스레드를 그대로 사용하지 않고 JVM 자체적으로 스케줄링을 통하여 사용할 수 있는 새롭게 추가된 경량 스레드
  • 시스템 콜과 같은 커널 영역의 호출이 적고, 메모리 크기가 일반 스레드의 1% 정도로 컨텍스트 스위칭 비용이 적다.
  • Blocking 발생 시 대기하지 않고 내부 스케줄링을 통하여 I/O, Sleep 등의 작업을 진행하는 동안 다른 가상 스레드의 작업을 처리할 수 있다.

자바와 스프링 부트 버전의 관계는 매우 중요하다. 두 기술의 호환성과 기능적 특성을 이해하는 것은 애플리케이션 개발에 있어서 핵심적이라고 할 수 있다. 스프링 부트는 특정 자바 버전과의 호환성을 고려해서 개발되며, 각 자바 버전에서 추가된 기능들은 스프링 부트에서도 활용될 수 있기 때문이다.

각 버전의 기능과 호환성을 이해하여 안정적이고 효율적인 애플리케이션 개발을 진행해 나가야 한다. 프레임워크, 플랫폼, 기술 스택 등의 버전을 관심 있게 지켜보는 것도 의미 있는 일이 될 것이다.