개발/Spring

[Spring] Spring Boot v2.4

nova_dev 2022. 10. 15. 00:00
반응형

Spring Boot v2.4

Spring Boot 2.4 Release Notes · spring-projects/spring-boot Wiki

1. Spring Boot 버전 관리 체계 변경

2.4부터 Spring Boot는 새로운 Spring 버전 관리 체계를 채택

2.3.5.RELEASE2.4.0

2. Junit5 vintage engine 제거

Spring Boot 2.4 업데이트 이후 Junit 클래스 테스트 컴파일 오류로 표시되는 org.junit.Test는 spring-boot-starter-test의 Junit5의 빈티지 엔진이 제거되었기 때문일 수 있음.

Junit5로 마이그레이션 없이 계속 Junit4를 사용하려면 gradle의 경우 아래 종속성을 추가한다.

testImplementation("org.junit.vintage:junit-vintage-engine") {
    exclude group: "org.hamcrest", module: "hamcrest-core"
}

3. 구성 파일 처리

Spring Boot 2.4는 구성 파일이 처리되는 방식을 변경함.

단순히 application.properties 혹은 application.yml 파일만 있는 경우는 업그레이드가 원활하지만 프로필 특정 속성 혹은 프로필 활성화 속성을 포함하고 있는 경우 일부 변경이 필요함.

만약 레거시 모드를 그대로 사용하고 싶다면, spring.config.use-legacy-processing=true설정을 사용하는 방법도 있지만 마이그레이션 시 아래 내용을 참고함.

  • Multi-document YAML Ordering
    • profile 정보를 ---로 분리해서 사용하던 경우 상위 프로필이 우선되어 사용됨을 주의한다.
  • 프로필 별 외부 구성
    • jar 외부의 구성을 사용하고 프로필 별 구성 파일을 사용하는 경우 속성이 예상대로 로드되었는지 확인
  • 프로필 특정 문서
    • spring.profiles로 다중 문서 yaml 파일에서 속성으로 사용하는 경우 반드시 마이그레이션 해야 함.
    • spring.config.activate.on-profile로 활성화하는 프로필 목록을 지정할 수 있음.
      spring:
      profiles: "prod"
      secret: "production-password"
    • 예를 들어, 아래와 같이 2.3 이하에서 사용하던 프로필 정보의 경우는
    2.4 이후로는 아래와 같이 마이그레이션하여 사용해야 한다.
  • spring: config: activate: on-profile: "prod" secret: "production-password"

자세한 내용은 링크를 참고하여 수정한다.

3. 사용자 정의 MongoClientSettings가 더 이상 사용자 정의되지 않음.

사용자 정의 MongoClientSettings 빈을 제공하는 경우 자동 구성에 의해 사용자 정의되지 않는다. 특히 Embedded Mongo와 함께 해당 동작에 의존하고 있었다면 아래와 같이 빈 적용을 고려해야 한다.

@Bean
public MongoClientSettings userDefinedMongoClientSettings(MongoProperties properties, Environment environment) {
   MongoClientSettings.Builder builder = MongoClientSettings.builder();
   //...
   new MongoPropertiesClientSettingsBuilderCustomizer(properties, environment).customize(builder);
   return builder.build();
}

4. 로그백 구성 속성

로그 백에 고유한 로깅 속성이 logback에서 고유하다는 사실을 반영하기 위해 아래와 같이 변경된다.

아래와 같은 Spring Boot 속성은 변경된다.

  • logging.pattern.rolling-file-namelogging.logback.rollingpolicy.file-name-pattern
  • logging.file.clean-history-on-startlogging.logback.rollingpolicy.clean-history-on-start
  • logging.file.max-sizelogging.logback.rollingpolicy.max-file-size
  • logging.file.total-size-caplogging.logback.rollingpolicy.total-size-cap
  • logging.file.max-historylogging.logback.rollingpolicy.max-history

시스템 환경 변수도 아래와 같이 변경된다.

  • ROLLING_FILE_NAME_PATTERNLOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN
  • LOG_FILE_CLEAN_HISTORY_ON_STARTLOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START
  • LOG_FILE_MAX_SIZELOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE
  • LOG_FILE_TOTAL_SIZE_CAPLOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP
  • LOG_FILE_MAX_HISTORYLOGBACK_ROLLINGPOLICY_MAX_HISTORY

5. Default Servlet 등록

Spring Boot 2.4에서 더 이상 DefaultServlet를 등록하지 않는다. DispatcherServlet가 필요한 유일한 서블릿이기 때문에 DefaultServlet는 사용하지 않는다.

만약 DefaultServlet를 사용해야 한다면 server.servlet.register-default-servlet 를 true로 설정한다.

6. HTTP trace는 더 이상 cookie header를 기본으로 포함하지 않는다.

쿠키 요청 헤더 및 Set-Cookie 응답 헤더는 더 이상 기본적으로 HTTP 추적에 포함되지 않는다. 만약 추가하고 싶다면 management.trace.http.include를 쿠키, 오류, 요청 헤더, 응답 헤더로 설정한다.

7. Spring Boot 2.2와 2.3으로부터 지원 중단된 코드

Spring Boot 릴리스 호환성 정책을 반영하여 Spring Boot 2.2에서 더 이상 사용되지 않는 코드는 Spring Boot 2.4에서 제거됨. Spring Boot 2.3에서 더 이상 사용되지 않는 코드는 그대로 유지되며 Spring Boot 2.5에서 제거될 예정이다.

8. Spring Framework 5.3

Spring Boot 2.4는 Spring Framework 5.3을 사용한다.

Spring Framework 5.3에서 어떤 것이 바뀌었는지는 what’s new section를 참고한다.

9. Spring Data 2020.0

Spring Boot 2.4는 Spring Data 2020.0 (Ockham)을 포함한다.

자세한 내용은 Spring Data wiki에서 참고한다.

10. Java 15 지원

Spirng boot 2.4는 Java 15를 지원한다. 최소 지원 버전은 Java 8이다.

11. Custom propterty 이름 지원

생성자 바인딩을 사용할 때 속성의 이름은 매개변수 이름에서 파생된다. Java 예약 키워드를 사용하려는 경우 문제가 될 수 있다. 이러한 상황에서 이제 @Name 주석을 사용할 수 있다.

@ConfigurationProperties(prefix = "sample")
@ConstructorBinding
public class SampleConfigurationProperties {

  private final String importValue;

  public SampleConfigurationProperties(@Name("import") String importValue) {
    this.importValue = importValue;
  }

}

12. 계층화된 jar를 기본으로 사용할 수 있다.

이 릴리스는 계층화된 jar를 활성화하고 기본적으로 layertools를 포함한다.

이렇게 하면 기본 제공되는 빌드 팩을 사용하여 생성된 이미지의 효율성이 향상되고 사용자 지정 Dockerfile을 만들 때 해당 기능의 이점을 얻을 수 있다.

13. 추가적으로 Application config를 Import 할 수 있다.

spring.config.use-legacy-processing를 true로 해두지 않았다면 이제 기본 application.properties 또는 application.yml에서 추가 속성 및 yaml 파일을 직접 가져올 수 있다.

사용 방법에 대한 자세한 내용은 this section를 참고한다.

14. 볼륨 탑재 구성 디렉토리 트리

spring.config.import 속성은 Kubernetes에서 일반적으로 사용되는 구성 트리를 가져오는 데 사용할 수도 있다. 구성 트리는 키/값 쌍을 제공하는 대체 방법입니다. 각 쌍은 속성 키를 형성하는 파일 이름과 값을 제공하는 파일 내용과 함께 자체 파일에 선언된다.

예제는 updated reference documentation를 참고한다.

15. Docker/Buildpack 지원

이제 Maven 플러그인 spring-boot:build-image 목표 및 Gradle 플러그인 bootBuildImage 작업에 생성된 이미지를 Docker 레지스트리에 게시할 수 있는 기능이 있다.

이미지 게시를 위한 플러그인 구성에 대한 자세한 내용은 Maven 및 Gradle 플러그인 설명서를 참조하세요

16. 서블릿과 필터를 등록할 수 있는 방식으로 @WebListener를 등록한다.

이전 버전의 Spring Boot는 javax.servlet.Registration.Dynamic에 대한 호출을 사용하여 등록했습니다. 이는 서블릿 사양(4.4)의 다음 섹션이 적용되었음을 의미한다.

Spring Boot 2.4부터는 더 이상 동적 등록을 사용하지 않으므로 ServletContextListener.contextInitialized 메소드에서 event.getServletContext().addServlet(…) 및 event.getServletContext.addFilter(…)를 호출하는 것이 안전하다.

17. Dependency 업그레이드

18. Spring Boot 2.4에서 사용중지(Deprecation)된 목록

  • ConfigFileApplicationListener는 ConfigDataEnvironmentPostProcessor를 위해 더 이상 사용되지 않는다.
  • contextClass와 관련된 SpringApplicationBuilder 및 SpringApplication 메소드는 contextFactory를 사용하는 대안을 위해 더 이상 사용되지 않는다.
  • CloudFoundryVcapEnvironmentPostProcessor의 일부 메서드는 EnvironmentPostProcessor 업데이트와 작동하도록 더 이상 사용되지 않는다(대부분의 사용자에게 영향을 미친다).
  • BuildLog 빌드 팩 지원 클래스는 몇 가지 방법을 더 이상 사용하지 않으며 더 자세한 정보를 제공하는 대안으로 대체했다.
  • LoggingSystemProperties의 Logback 상수는 LogbackLoggingSystemProperties를 위해 더 이상 사용되지 않는다..
  • ApplicationEnvironmentPreparedEvent, ApplicationStartingEvent 및 SpringApplicationRunListener의 몇 가지 메서드는 BootstrapContext를 지원하기 위해 더 이상 사용되지 않는다.
  • 일부 Spring MVC 및 서블릿 특정 속성은 더 이상 사용되지 않는다(위의 웹 구성 속성 섹션 참조).

기타 자세한 내용은 Spirng Boot 2.4 Release Note를 참고한다.

반응형

'개발 > Spring' 카테고리의 다른 글

[Spring] Spring Boot v2.7  (0) 2022.10.18
[Spring] Spring Boot v2.6  (0) 2022.10.17
[Spring] Spring Boot v2.3  (0) 2022.10.14
[Spring] Spring Boot v2.2  (0) 2022.10.13
[Spring] Spring Framework 6.0과 Spring Boot 3.0 Preview  (0) 2022.10.12