일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 우아한 테크 코스
- 우테코
- Elk
- 테스트코드
- 우아한테크코스
- 최종 합격
- redis
- 톰캣
- HikariCP
- 동시성문제
- Spring cloud gateway
- Gateway
- tomcat
- AOP
- Kotlin
- circuitbreaker
- spirng
- DispatcherServlet
- JWT
- resilience4j
- 우테코 5기
- oauth
- MDC
- 오어스
- 트랜잭션
- 살아남았다.
- 커넥션 풀
- Transactio
- Thread
- Spring Batch
- Today
- Total
코딩은 내일부터
자바 버전 어떤거 사용해야할까?(jdk11 VS jdk17) 본문
이번에 프로젝트를 시작하면서 어떤 자바 버전을 사용해야하는지 고민하고 제가 버전을 선택한 이유을 소개하려고 합니다!
선택 이유 1. LTS(Long Term Support)
Java에는 다양한 버전이 존재한다. 그중 가장 많이 쓰이는 버전은 Java 8, 11, 17이다.
이 세 가지 버전이 많이 사용되는 많이 이유들이 있겠지만,
이 버전들이 LTS(Long Term Support) 버전이기 때문이다.
LTS란 말 그대로 장기간에 걸쳐 지원을 해주겠다는 뜻이다.(버그 수정, 업데이트 등등..)
위에 표를 보면
java 8은 30년 12월
11은 26년 9월
17은 29년 9월입니다.
따라서, LTS 버전인 Java 8, 11, 17이 가장 많이 사용되고 있다.
이 표로 봤을때 8버전을 많이 사용하는 이유는 먼저나와서 많이 사용했었고,
서포트 기간이 길어서입니다(개인 적인 이유).
따라서 11버전은 support기간이 짧고 ,
11보다 다음으로 LTS기간이 긴 17은 8버전보다는 미세하게 더 짧지만
Java 8 버전은 오랜 기간 동안 사용되어 왔기 때문에 보안 취약점이 발견될 수 있습니다.
그리고 Java 17 버전은 최신 기술과 업데이트된 보안 기능을 제공하며(이전 버전보다),
새로운 취약점에 대한 대응이 더욱 빠르고 효과적일 수 있습니다.
선택이유 2. 트랜드(비버의 개인적인 생각)
위에는 jetbrains에서 발표한 통계입니다.
JDK17 출시 이후 30%를 기록했다.
앞으로 새로운 프로젝트에서 많이 사용하지않을까~~~ 와 같은 생각을 합니다!!
선택이유 3.신규 버전을 위한 대비
- 현재 사용 중인 버전의 지원 종료일이 도래하여 다른 LTS 버전(JDK 21)을 찾아야 할 시점에, 8버전에서 바로 최신 버전으로 전환하는 것 보다 17버전까지의 기술 적응을 완료한 상태에서 전환 시 마이그레이션으로 인한 영향이 최소화될 것이라 생각했습니다.
선택이유 4.다음 세대 플랫폼 호환 준비
- 현재까지 나온 스프링 공식 로드맵 상, 2022년 11월 24일에 출시한 Spring Boot 3.0은 JDK 17이상을 지원합니다.
- 위 내용
- 현재 이전 버전의 Spring Boot 2.x를 사용 중인 경우 Spring Boot 2.7로 업그레이드하는 것이 좋습니다. Spring Boot 3.0이 출시되면 마이그레이션 가이드를 제공할 예정이지만 이전 버전이 아닌 Spring Boot 2.7에서 마이그레이션한다고 가정합니다.
JDK를 3번 이유로 선택한다그러면 위 내용처럼
Spring Boot는 2.7부터 사용을 고려해야될거 같습니다.
선택이유 5 기능적 차이
Java 17:
- Sealed 클래스: 클래스를 밀폐(sealed)하고 허용된 하위 클래스의 목록을 제한하는 Sealed 클래스 개념이 도입되었습니다.
- 패턴 인스턴스 테스트 (Pattern Instance Test): **instanceof**를 사용하여 패턴에 따라 객체 유형을 테스트할 수 있는 기능이 추가되었습니다.
- Vector API (Incubator): 벡터화된 데이터를 처리하기 위한 벡터 API가 도입되었습니다.
- G1 GC의 기본 설정 변경: G1 GC가 기본 GC 알고리즘으로 사용되며, 기본 설정이 변경되어 성능을 개선하였습니다.
- 빠른 암호화 (Fast Cryptographic Operations): AES 암호화와 관련된 일부 연산이 개선되어 더 빠른 암호화를 제공합니다.
- 스위치 표현식 개선: 스위치 문의 표현식이 개선되었습니다.
JDK 12부터 17까지의 주요 업데이트
텍스트 블록
JDK 15부터 정식 지원하는 새로운 기능입니다.
“”” {String 문자열 } “”” 형식을 이용해 Java 문자열을 보다 가독성있게 작성하도록 도와줍니다.
현재 저희팀에서 TextBlock을 적용한 예시 입니다.
- 위 코드는 서버에서 발생한 이벤트 로그를 슬랙메신저에서 직접 확인하기 위한 기능 구현에 사용되었습니다.
- 예시 코드와 같이 TextBlock 내 데이터를 동적으로 다루게 될 경우 %s 문자와 format Method를 이용하여 구현할 수 있고, 또한 블록 내 “+” 연산자를 이용하여 구현할 수도 있습니다.
Switch 표현식 기능 향상
1. Switch문 값 직접 반환
2. yield 예약어 이용한 값 리턴 방식 추가.
3. Case문 람다식 지원.
위 세가지 기능이 추가가 되었고, 아래는 실제 적용해 본 테스트 코드입니다.
Record Data Class 추가
Record Data Class란, JDK 14 버전부터 공개된 Immutable 객체를 생성하는 새로운 유형의 클래스입니다.
- Record 선언을 하게 되면 기존 toString, equals, hashCode 메소드를 자동으로 구현해주며, 모든 인스턴스 필드를 초기화해주는 생성자가 생성이 됩니다.
- Immutable 객체이기 때문에 모든 값은 생성자를 통해 설정되어야 합니다.
- DTO와 같은 Data Object 용도로 활용 시 보다 편리하고 간결하게 구분할 수 있습니다.
- Record Class는 상속이 불가능합니다. (모든 필드는 “private final ,,”로 선언이 되기에,,)
Spring Boot선택 기준
추가적으로 JDK17을 고른 이유중 하나인 LTS를 기준으로 본다면 아래 사진에 Spring Boot버전별 LTS를 살펴보면
우테코 2레벨 마지막 미션인 shopping-order미션 기준 spring boot 2.7.9버전을 사용했고,
우리가 익숙한? 버전을 사용하던가 3.xx를 사용한다면 LTS가 현재로써 제일긴 3.1.x를 사용하자!
결론적으로는 우리 동글 팀은 JDK17버전과 Spring Boot3.1.1버전을 사용하기로 결정했습니다!
'우아한 테크 코스(우테코) > 우테코 공부' 카테고리의 다른 글
OAuth 그게 뭔데. (개념 및 구현) (0) | 2023.08.16 |
---|---|
JWT 그게 뭔데. (3) | 2023.08.11 |
[우테코] 우아한테크코스 생존기 (9)(@Transactional) (0) | 2023.06.09 |
우아한테크코스 생존기 (8)(Swagger를 이용한 API명세서 관리하기) (0) | 2023.06.05 |
우아한테크코스 생존기 (7)(CI/CD) (3) | 2023.06.05 |