현재 버전
- Java 1.8
- Spring Boot 2.4.5
현재
스프링 부트 2.4.x 의 특징
- 구성 파일 처리의 개선점
- 프로필 정의 방식의 변경
- 2.4 이전
application-{profile}.yml
형식의 파일을 작성하고
spring.profiles.include
를 이용하여 해당 프로파일을 호출 하였음.
//application-honeymon.yml honeymon: root-uri: http://honeymon.io github: https://github.com/ihoneymon //application.yml spring.profiles: include: - honeymon
- 2.4 이후
- 직접 원하는 구성 파일을 명시저긍로 불러올 수 있게 됨.
//honeymon.yml honeymon: root-uri: http://honeymon.io github: https://github.com/ihoneymon //application.yml spring.config: location: classpath:honeymon.yml
- 2.4 이전
- 프로필 정의 방식의 변경
- 버전 네이밍 변경
- 2.3.4.RELEASE 에서 2.4.0 같은 간소화된 네이밍 사용
- JUnit5 Vintage Engine 의 제거
spring-boot-starter-test
에서 JUnit 의 VE 가 제거됨.
- JUnit4 로 작성된 테스트를 JUnit5 에서 실행시 별도 의존성이 추가되어야함.
- 설정파일의 변경점
- 스프링 2.4 이전
- 기본 구조
spring: profiles: dev profiles.include: - common
application.yml
파일에서spring .profiles
를 사용하여 활성 프로필을 설정
spring.profiles.include
를 사용하여 추가 프로필을 활성화
- 기본 구조
- 스프링 2.4 이후
- 프로필 그룹의 생성
spring: profiles: group: "local": "local, common" "dev": "dev, common" "prod": "prod, common"
- 하나 이상의 프로필을 묶어서 하나의 이름으로 관리가능
- 만약
dev
설정에서는db
와cache
설정이 필요하다고 한다면,spring: profiles: group: "dev": "db, cache"
- 이런식으로 각 프로필이 필요한 설정을 조립식으로 사용할 수 있게 되는 것입니다.
활성 프로필 설정(기존방식)(기존방식 사용가능 - 물론 deprecated 예정)spring: profiles: active: dev
spring.profiles.active 사용으로 생성한 그룹 프로필 활성화 가능
원래 있던 기능이였음
- 개별 프로필 설정(new)
spring: config: activate: on-profile: "local"
- 각 프로필에 대한 설정은 위 방식으로 가능
- 파일이 여러개라면
- application.yml
server: port: 8080 tomcat: uri-encoding: UTF-8 spring: profiles: active: test # 활성화시킬 프로필 group: # 포함시킬 하위 프로필명 test: test,oauth develop: develop,oauth,devdb production: production,oauth,proddb
- application-test.yml
spring: config: activate: on-profile: test #생략..
- application-dev.yml
spring: config: activate: on-profile: develop #생략..
- 위와 같은 식으로 application-oauth .. devdb 등의 설정 파일도 만들어놓고 조합하는 식
솔직히 이게 뭐가 바꼈다는 건지 잘 모르겠음. 어쩃든 이전버전도 그룹핑이 가능한것 아닌가?
- 프로필 그룹의 생성
- 스프링 2.4 이전
… 등등이 있음. 나머지 생략
스프링 부트 2.4 to3.1.xx 에서의 마이그레이션 가이드
마이그레이션 순서
2.4 → 2.5 → 2.6 → 2.7 → 3.1 을 추천
JDK 17 필수 사용
- Spring boot 3.0 에서는 JDK 17 을 최소 요구사항으로 갖는다.
제거된 API
- JAXB 는 JDK 17 에서 제거되었기에, 메이븐이나 그래들로 해당 라이브러리를 추가해야함
API 교체
- `
ParameterizedTypeImpl
클래스가 JDK 17+ 에서 제거되었습니다.
라이브러리
- sun.misc.Unsafe 같은 레거시 API 는 업데이트해야함
Spring Cloud 관련 변화
- 사용 X 별도 정리 X
네임스페이스의 변경
javax
에서jakarta
로 네임스페이스가 변경되었습니다.
- 다만!
javax.sql.*
과javax.crypto.*
같은 일부 패키지는 Java17 의 일부이기에 변경되지 않습니다.
이미지 배너 지원 중단
- 이전
banner.gif
,banner.jpg
,banner.png
등의 이미지 파일을 사용해 배너를 표시할 수 있었음
- 하지만 이제는 텍스트 기반
banner.txt
지원
- 애플리케이션 시작시 나오는 텍스트 기반 배너 임.
로깅 날짜 형식의 변경
- Logback 혹은 Log4j2 라이브러리에서 로그 메시지 날짜 와 시간 부분의 기본 형식이 변경됨.
- 이전 형식
yyyy-MM-dd HH:mm:ss.SSS
- 새로운 형식
yyyy-MM-dd'T'HH:mm:ss.SSSXXX
- 변경 이휴
- 표준화때문 ISO-8601 국제 표준 날짜와 시간 표기법으로 일관된 날짜 시간 정보 제공가능
- 기존 형식으로 되돌리기
LOG_DATEFORMAT_PATTERN
환경 변수 혹은
logging.pattern.dateformat
프로퍼티를 사용하여 이전의 기본값yyyy-MM-dd HH:mm:ss.SSS
으로 되돌릴 수 있음
Spring MVC 및 WebFlux URL 매칭 변경
- Spring F/W 6버전 부터 URL 매칭에서 끝에 슬래시(
/
) 를 사용하는 옵션을 지원하지 않음.
- 이전에는
cities/aitports
와cities/airports/
둘다에 매칭되던 컨트롤러가 이제는 후자와 매칭되지 않고 HTTP 404 에러 발생시킴
- 이전 버전을 유지하려면..
- Spring MVC
@Configuration @EnableCaching public class MvcConfig implements WebMvcConfigurer { @Override public void configurePathMatch(PathMatchConfigurer configurer) { configurer.setUseTrailingSlashMatch(true); } }
- WebFlux
@Configuration @EnableCaching public class MvcConfig implements WebFluxConfigurer { @Override public void configurePathMatch(PathMatchConfigurer configurer) { configurer.setUseTrailingSlashMatch(true); } }
setUseTrailingSlashMatch
는 더 이상 지원되지 않을 예정이기에, 가능한 빨리 설정을 제거해야함
- Spring MVC
최신 WAS와 호환
- Tomcat 10.1 , Jetty11 등과 같은 최신 was 지원
GraalVM 기반 Spring Native 의 공식 지원
- graalvm?
- 고성능의 JDK
- JVM 언어로 작성된 어플의 실행 가속화
- graalvm Native Image
- Spring 은 JIT(Just-In-Time) 와 AOT(Ahead-of-Time) 컴파일러 모두를 지원함
- Spring boot 3.0 부터 GraalVM의 Native Image 를 활용한 AOT 컴파일러에 대한 공식 지원을 시작함
- 더 빠른 실행 시간과 더 적은 메모리 사용량 기대가능
Uploaded by N2T
'자바 > 리팩토링' 카테고리의 다른 글
[리팩토링] 리스트 조회에서 api 만 분리하기 (0) | 2023.09.21 |
---|---|
[리팩토링] DTO 가 너무 분화될 것 같은 경우 어떻게 해야할까? (0) | 2023.09.21 |
[리팩토링] DTO 에서 VO 간의 전환 메서드를 편하게 사용하려면? - MapStruct (0) | 2023.09.21 |
[리팩토링] FM 메서드 → private 생성자 전략 (0) | 2023.09.21 |
[리팩토링]Java 1.8 vs Java 17 (0) | 2023.09.10 |