생각정리/Java
자바 버전 선택에 대한 이유
생각중임
2024. 5. 27. 15:27
자바 버전에 선택에 있어 고려할 부분을 두 가지로 나눠보면 실무작업과 학습으로 나눌 수 있을 것이다.
학습용도에서는 버전이 자신이 학습할 기술에 맞게 버전을 선택하고 지원기간도 별도로 고려 대상에 넣지 않는다.
하지만, 개발을 통해 운영이 필요할 경우에 자바 버전을 선택하는 데에는 많은 것을 고려해야 하는데, 그중 가장 중요하다고 생각하는 것은 서비스의 지원 유무일 것이다.
많이 사용하는 버전들을 보면 LTS(Long Term Support)라고 붙은 장기간 지원을 해주는 버전을 많이 사용하고 있다.
Java 8 (Java1.8)
Lambda의 기능이 추가되고 가장 많은 가장 긴 지원기간을 가지고 있고 안정성과 신뢰성이 높아 오랜 기간 동안 사용되고 있다.
주요 기능
- Lambda Expressions : 함수형 프로그래밍 지원
- Stream API : 대량 데이터 처리를 쉽게 도와주는 기능
- Default Methods :
- Optional Class : null 처리를 보다 안전하게 할 수 있게 지원
- Date and Time API (java.time) : 더 나은 날짜 및 시간 처리를 제공
- Nashorn JavaScript Engine
Java 11
사용되고 있는 LTS 버전 중 지원기간이 가장 짧다.
주요 기능
- HTTP Client API : HTTP/2와 WebSocket을 지원하는 새로운 HTTP 클라이언트 API를 표준으로 제공
- New String Methods : Java 8 이후 추가된 신규 String 메서드 지원
- Epsilon GC : No-Op Garbage Collector를 제공
- Lambda Local-Variable Syntax : 람다 매개변수에 var 키워드를 사용 지원
Java 17
Spring Boot 3.0 부터는 자바 17 이상을 지원한다.
주요 기능
- Sealed Classes : 상속을 제어하여 더 안전한 코드 작성이 가능하도록 지원
- Enhanced Pseudo-Random Number Generators : 개선된 난수 생성기 제공
- Context-Specific Deserialization Filters : 컨텍스트별 역직렬화 필터 기능 제공
정리
- Java 8과 Java 11은 프로젝트에서 예전부터 사용하던 곳들은 아마도 8 버전을 많이 사용하고 있지만, 기능적으로 보면 지원이 짧은 것만 빼면 8보다는 11을 사용하는 것이 확실히 기능적인 면에서 차이가 난다.
- 스프링 부트의 버전이 2.x 버전이라면 많은 래퍼런스가 Java 11을 기준으로 제공되어 안정적이고 빠른 개발이 가능하다.
- 스프링 부트의 버전이 3.x 버전이라면 Java 17 이상 버전을 필수로 사용해야 되고, 기존의 라이브러리들에서 호환성 문제가 발생할 수 있고 래퍼런스가 상대적으로 적어 러닝커브가 높을 수 있지만 확실히 성능과 확장성을 생각해 사용을 한다.
- 이와 같이 Java 8을 가장 많이 사용을 하고 있지만, 점점 11과 17의 점유율이 상승하는 추세로 보이고 요즘은 보통 프로젝트를 스프링 부트를 사용하는 경우가 대부분이기 때문에 부트의 버전에 따라 자바의 버전도 선택하면 되어 보인다.
- Java 21의 경우는 아직 나온 지 시간이 얼마 안 되었기 때문에 고려대상에서 제외하였다.