티스토리 뷰
지금 회사에선 웹앱개발시 jre8 에 spring boot 2.2.12를 사용하고 있다.
시대가 흘러서 LTS 도 종료(사실 원래 1년이긴하다)되고,
Azure의 최신 API 지원을 받기도 곤란한 상황이 되어서 결국 업그레이드 결정이 내려졌다.
업그레이드가 결정난 시점에 3.2.2가 최신이어서 그걸 적용하기로 했다.
변경해야할 것들이 굉장히 많다.
- java8 → java17 변경
- pom.xml 수정
- javax → jakartaee로 패키지 변경. 톰캣 버전 변경
- 각종 maven artifiact 버전 변경
- httpclient, junit artifact "교체"
spring boot 자체의 메이저 버전 변경사항도 있고, 일부 API 지원중단 등 java의 하위호환성이 일부 손실되었기 때문에 위 변화를 적용한다고 해서 바로 마이그레이션이 끝나진 않는다. 본격적인 코드 수정에 앞선 선행작업이라고 생각하면 된다.
순서대로 간단하게 살펴보자.
java8 → java17 변경
spring boot3으로 버전이 올라가면서 생긴 가장 큰 변화라고 한다면, java8과 java11에 대한 지원을 중단하고, 바로 java17로 넘어갔다는 것이다. 약간 의아했던 것은, servlet spec 6와 jakarta ee 10은 JAVA11로 개발했기 때문에 JAVA11,JAVA 17 둘 다 지원 가능했을 것 같은데 이를 포기했다는 것이다.
spring boot 3.2.2의 의존성 버전 일부를 살펴보면 아래와 같다.
Group ID | Artifact ID | Version |
jakarta.servlet | jakarta.servlet-api | 6.0.0 |
org.apache.tomcat.embed | tomcat-embed-core | 10.1.19 |
org.eclipse.jetty.ee10 | jetty-ee10-servlet | 12.0.7 |
이는 JAVA11의 LTS가 끝나간다는 것을 고려했을 수도 있다. 그러나 이에 대해서 명확하게 밝힌바는 없다.
어찌되었든 java17이 필요하다. 본인은 회사에서 Azure 클라우드를 쓰기 때문에, MS에서 제공해주는 openjdk를 설치했다. 대부분의 소프트웨어 공급자들은 openjdk를 조금씩 고쳐서 만드는 수준이고, 라이센스도 오라클을 제외하면 큰 문제 없기 때문에 쓰고 싶은걸 쓰면 된다.
MS: https://learn.microsoft.com/ko-kr/java/openjdk/download
이클립스: https://adoptium.net/temurin/releases/
Zulu: https://www.azul.com/downloads/#zulu
pom.xml 의 artifact 정보 수정
JAVA11부터 하위호환성을 어느정도 내려놓고 가기로 했기 때문에, 자바 신버전이 나오면 관련 artifiact의 지원여부를 확인해야 한다. 예를들어, lombok은 1.18.22 버전부터 jdk17을 지원한다. 대부분은 최신버전을 적용하거나, spring에서 제공해주는 의존성 문서를 참고해서 버전을 지정하면 된다.
SQL Server 의 JDBC 드라이버 또한 버전을 변경해야 한다. 과거 버전들은 jre17과 jre11을 분리해서 지원한 것으로 보이나, 최신버전인 12.6.x에서는 jre8과 jre11 만 구분하고 있다. 실제 문서를 보면 12.6.x.jre11에서는 java11, java17, java21을 지원하는 것으로 나온다.
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>12.6.1.jre11</version>
</dependency>
javax → jakartaee로 패키지 변경
JAVA8에서, JAVA EE8 스펙이 나오고 개발을 하던 시점에, 오라클에서 JAVA EE에 대한 권리를 포기하고, 이클립스 재단에 넘겼었다. 이로 인해 javax로 시작하던 대부분의 패키지가 jakarta로 변경되었다.
spring boot 2.7.x 나 그 하위버전에서는 일부 artfact를 제외하고는 호환성을 위해 javax를 사용했지만, spring boot3부터는 이제 JAVA EE 스펙을 모두 Jakarta EE 스펙으로 변경하면서 패키지 명도 변경했다.
테스트 수정
기존에 작성된 테스트들은 junit4로 작성되었다. spring boot3가 되면서, junit도 junit5로 버전이 변경되었다. 버전이 변경되면서 테스트에 사용하던 메서드, 어노테이션 등이 모두 바뀌었으며, 패키지명도 바뀌었다.
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.2</version>
<scope>test</scope>
</dependency>
메이저 버전 변경이다보니, 패키지 버전 몇개 변경한다고 바로 구동이 되지 않는다. 무수히 많은 syntax 에러의 요청이 있는데 하나씩 살펴보자.
'개발 > 스프링' 카테고리의 다른 글
spring boot 3.2.2 전환기(3)- Spring Security 변경 (0) | 2024.03.25 |
---|---|
spring boot 3.2.2 전환기(2) - Spring Web MVC 변경 (0) | 2024.03.23 |
코드 내에서 타임리프 파싱하기 (0) | 2022.06.12 |
spring jpa - pessimistic write lock (0) | 2022.02.22 |
톰캣 url rewrite로 호스트헤더 고치기 (0) | 2021.06.16 |
- Total
- Today
- Yesterday
- 탈세
- 한국교통안전공단
- java
- k베뉴
- Spring
- 알리익스프레스
- 포상금
- 이륜차
- 부가가치세
- 알리
- springboot
- 토스페이
- JPA
- Azure
- Request
- 티스토리챌린지
- Java17
- 안전신문고
- 광군제
- 오블완
- springboot3
- 전세사기
- 공익제보단
- ouath2
- tomcat
- 현금영수증
- Thymeleaf
- n+1
- ORM
- 홈택스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |