Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- lambda
- MSA
- cache
- select_type
- 조합
- Test
- 재정의
- Spring
- KEVISS
- 필드 주입
- VUE
- static
- java
- jwt
- SQL
- StringBuilder
- 인덱스
- 바이너리 카운팅
- DI
- hashcode
- stream
- redis
- jpa
- AOP
- DDL
- equals
- 생성자 주입
- 열 속성
- docker
- 테스트 코드
Archives
- Today
- Total
백엔드 개발자 블로그
JDK 버전 고려해보기 본문
JDK 버전을 선택하면서 경험했던 내용들을 공유하고자 합니다.
보통 버전 선택 기준은 LTS(유지보수 기간), 성능 및 유틸성, 호환성, 비용, 개발 속도를 고려합니다.
유지보수 기간을 살펴보자
https://access.redhat.com/articles/1299013
- 서포트 기간이 4년이나 길게 남아 있는 JDK 17이 가장 안정적입니다.
성능 및 유틸성을 살펴보자
- Java 11
- 람다 파라미터에서 var를 사용할 수 있게 되었습니다.
- 내부적으로 JVM은 모듈을 활용하여 클래스 로딩을 보다 효율적으로 할 수 있습니다.
- Java Flight Recorder(JFR) 및 Java Mission Control(JMC)는 Java 8에서는 유료지만, Java 11에서는 오픈소스로 제공합니다.
- JFR 및 JMC를 사용하면 메모리 누수, GC 오버헤드, 핫 메서드, 스레드 병목 상태 및 I/O 블로킹과 같은 런타임 문제를 진단할 수 있습니다.
- 다중 릴리스 jar 파일
- Java 11에서 클래스 파일의 여러 Java 릴리스별 버전을 포함하는 jar 파일을 만들 수 있습니다.
- JVM 성능 향상
- Segmented Code Cache
- JVM 메모리 공간을 효율적으로 제어하고 컴파일된 메서드의 검색시간을 단축하고, 코드 캐시의 조각화를 줄여 성능 향상
- Segmented Code Cache
- Compact Strings
- 문자열을 저장하는 데 필요한 공간이 효율적으로 변경
- HTTP Client(Standard)
- HTTP/2 및 WebSocket을 구현하고 레거시 HttpURLConnection API를 대체할 수 있는 새로운 HTTP 클라이언트 API를 제공합니다.
- Java 17
- 텍스트 블록
- 람다식을 통한 Switch 구문 개선
- Stream.toList() 간결화
- NullPointerException의 원인 제공
- 디버깅, 오류잡는데 시간단축 가능(이건 좋은데?)
- GC 성능개선도 있었다함
호환성을 살펴보자
- Spring Boot
- Spring Boot 2.xx 는 Java 11와 호환됩니다.
- Spring Boot 3.xx는 Java 17와 호환됩니다.
- (참고) Spring Boot 2.xx vs 3.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로 넘어갈 이유는 없다고
- 2.xx
비용을 살펴보자
- Oracle JDK
- Java 17에서는 Oracle JDK 무료 라이선스를 제공합니다.
- 마이그래이션 비용
- 미래에 Spring Boot 3.xx으로 마이그래이션할 경우를 대비해서 Java 17을 사용하면 마이그래이션 비용을 줄일 수 있습니다.
개발속도를 비교해 보자
- 레퍼런스 양
- Java 17은 레퍼런스가 적어서 러닝커브가 높고, 개발 속도가 느립니다.
- Java 11은 레퍼런스가 많아서 러닝커브가 낮고, 빠른 개발이 가능합니다.
결론
성능 및 확장성을 우선하면 Java 17을, 안정성 및 개발 속도를 우선하면 Java 11을 사용합시다.
참고
- https://access.redhat.com/articles/1299013
- https://www.geeksforgeeks.org/jdk-17-new-features-in-java-17/
- https://kim-jong-hyun.tistory.com/31
- https://aday7.tistory.com/entry/금융권-자바-버전-업그레이드-필요성과-추천-Java-17-도입-전략
- https://techblog.gccompany.co.kr/우리팀이-jdk-17을-도입한-이유-ced2b754cd7
'Java' 카테고리의 다른 글
블럭킹 | 논블럭킹 | 동기 | 비동기 (0) | 2024.04.29 |
---|---|
스택 오버 플로우(SOF) (0) | 2024.04.18 |
String, StringBuffer, StringBuilder (0) | 2024.04.16 |
[Effective Java] Item15. 클래스와 멤버의 접근 권한을 최소화하라 (0) | 2024.04.08 |
[Effective Java] Item14. Comparable을 구현할지 고려하라 (0) | 2024.04.07 |