
서론
Springboot 3.X.X 버전에서 Java 버전 문제
- Springboot 3.0 부터는 Java 버전이 17이상이 필수로 변경이 되었다.
- 이런 문제로 인해 Java에 어떤 버전을 사용해야하는지 고민하게 되는 기점이 되었다.
본론
Spingboot에 대한 Java 버전
- Java 버전에 자주 사용하는 버전은 다음과 같다.

- Java 8 (72% → 60%)
- Java 11 (42% → 48%)
- Java 17 (0% → 30%)
- 수년 동안 가장 많이 사용되는 Java 버전은 Java 8이었으나 2022년에는 사용 비율이 12% 포인트 감소했습니다. 2022년 3월부로 Oracle Premier Support에서 Java 8이 제외되었다는 사실을 감안하면 자연스러운 결과입니다. 많은 개발자가 애플리케이션을 다른 버전으로 마이그레이션하기로 결정했고, 새로운 장기 지원 버전인 Java 17이 출시되면서 다수의 사용자를 유치했습니다. 또한 Java 11 및 Java 16 등 다른 버전의 사용자도 증가했습니다.
Java 버전에 대한 각 장단점
- Java 8
- 장점:
- 스트림 API : 데이터 처리에 있어서 함수형 프로그래밍이 가능해짐.
- 람다 표현식 : 간결하고 효율적인 코드를 작성할 수 있음.
- 인터페이스의 디폴트 메서드와 스태틱 메서드 지원 : 기존 코드를 변경하지 않고도 인터페이스를 확장할 수 있음.
- 단점
- 성능이 다소 떨어질 수 있음 : Java 8의 초기 버전에서는 일부 성능 문제가 있었음.
- Springboot 3.x 지원 불가 : Springboot 3.x 버전부터는 Java 17 버전 이상이 필수적으로 사용되어야합니다.
- Java 11
- 장점:
- 새로운 HTTP 클라이언트 API : HTTP/2 프로토콜과 웹소켓을 더 잘 지원.
- 유용한 새로운 기능들 : 'var' 키워드를 이용한 타입 추론, String 클래스에 대한 새로운 메서드 등.
- LTS(Long Term Support) 버전 : 장기간 안정적인 지원이 가능하므로, 기업에서 사용하기에 적합.
- 단점:
- Java 8에서 사용되던 일부 라이브러리와 도구가 더 이상 지원되지 않음.
- 배우거나 이전 코드를 마이그레이션하는 데에 시간과 노력이 필요함.
- Springboot 3.x 지원 불가 : Springboot 3.x 버전부터는 Java 17 버전 이상이 필수적으로 사용되어야합니다.
- Java 17
- 장점:
- 매우 강력한 성능 : 모듈 시스템의 확장성과 모든 새로운 기능과 향상된 메모리 관리로 인해 성능 향상.
- 패턴 매칭, 레코드, sealed 클래스 등 다양한 새로운 기능 지원 : 코드를 더욱 간결하고 안전하게 만듦.
- LTS 버전 : Java 11과 마찬가지로 장기적인 지원을 받을 수 있음.
- Springboot 3.x 지원 : Springboot 3.x 버전부터는 Java 17 버전 이상이 필수적으로 사용되어야합니다.
- 단점:
- 마이그레이션의 어려움: 기존 Java 8 또는 Java 11 사용자가 Java 17로 업그레이드하려면 많은 노력이 필요할 수 있음.
- 아직 모든 라이브러리와 프레임워크가 Java 17을 완벽하게 지원하지 않을 수 있음.
결론
그래서 어떤 버전으로 쓸건데?
- 결론부터 얘기하자면 처음에는 Java 17을 사용하고 싶었지만 Java 11로 마음을 고쳐먹었다…
- 그이유는 무엇이냐면
- Java 17 버전의 호환성 문제 및 환경 지원
- Java 11 버전의 장기지원 및 호환성 확보
- 하지만 Java 17을 처음 고민 했던 이유는 장기적으로 보았을 때 Springboot 3.x 버전부터는 Java 17 버전을 사용해야하므로 기회가 된다면 추후에 Java 11 → Java 17로 마이그레이션 하는 것도 경험해 보면 좋을 것 같다.