개발/Spring

[Spring] Spring Boot v2.2

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

Spring Boot v2.2

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

Spring Boot 2.1에서 업그레이드된 내용

1. Spring Boot 2.1의 Deprecated 건 삭제

2.1에서 deprecated된 사용되지 않는 클래스, 메서드 및 속성이 이번 릴리즈에서 제거되었으므로 확인

2. Spring Framework 5.2

이번 릴리즈에서 Spring Framework 5.2로 업그레이드됨. 자세한 문서는 아래 참고.

Spring Framework’s upgrade documentation

3. JMX는 기본적으로 비활성화

이번 버전부터 jmx는 기본적으로 비활성화됨. 필요시 spring.jmx.enabled=true 를 사용한다.

관련 내용은 #16090를 참고.

  • JMX란?JMX
  • JDK 1.5부터 포함된 사양으로 JMX는 실행 중인 애플리케이션의 상태를 모니터링하고, 설정을 변경할 수 있게 해주는 API이다.

4. Jakarta EE 의존성

Java EE에서 JakartaEE 종속성으로 바뀌면서 의존성이 추가됨. 향후 Java EE API는 제거될 것이기 때문에 Jakarta EE API로 변경하는 것이 좋음.

만약 아래 dependency를 사용하고 있으면 변경할 것.

com.sun.mail:javax.mail is now com.sun.mail:jakarta.mail
org.glassfish:javax.elis now org.glassfish:jakarta.el

5. Junit 5

spring-boot-starter-test는 기본적으로 junit5를 제공함. Junit5 vintage engine은 기본적으로 junit4 기반 테스트 클래스를 지원하므로 준비가 되면 Junit5로 마이그레이션이 가능하다.

junit-vintage-engine 로 동일한 모듈에서 Junit4 또는 Junit 5 기반 테스트 클래스도 혼합해서 쓸 수 있음.

6. AssertJ 3.12

이 릴리즈는 Iterator와 관련된 Assertion 주요 API 변경사항이 포함된 AssertJ 3.12로 업그레이드해야 함.

자세한 내용은 AssertJ release notes를 참고한다.

7. logging.file 사이즈 기반 속성을 위한 Datasize 마이그레이션

logging.file.max-size 및 logging.file.total-size-cap은 이제 FileSize 유형 대신 표준 DataSize 유형을 사용한다. 이러한 속성을 사용하는 경우 표준 형식에 맞춰야 함.

8. Hibernate Dialect

Spring Boot는 이제 Hibernate가 감지된 데이터베이스를 기반으로 기본 방언을 적용하는 대신 사용할 방언을 선택할 수 있도록 한다. 이 기능을 사용하고 싶다면 spring.jpa.database 혹은 spring.jpa.database-platform 를 통해 데이터베이스 플랫폼을 명시적으로 지정하지 않았는지 확인한다.

이전에 방언을 구성한 경우 사용자 지정을 제거할 수 있다.

9. Actuator HTTP 추적 및 감사는 기본적으로 비활성화되어 있다.

Actuator HTTP 추적 및 감사 기능은 기본 리포지토리 구현 때문에 메모리에 있고 너무 많은 리소스를 소비할 수 있으며 클러스터 친화적이지 않기 때문에 더 이상 기본적으로 활성화되지 않는다.

따라서 Spring Cloud Sleuth 사용을 추천한다.
HTTP 추적을 활성화하려면 HttpTraceRepository 또는 AuditEventRepository를 구현하는 빈을 제공하여 해당 기능을 다시 켜야 한다.

10. Gradle 요구사항

Gradle 4.10 이상이 필요함.

11. Hamcrest 2.1

이 릴리스는 Hamcrest 2.1로 업그레이드됨.. 이것은 대부분의 사용자에게 즉시 교체되어야 합니다.

org.hamcrest:hamcrest-core 또는 org.hamcrest:hamcrest-library에 대한 직접적인 종속성이 있는 경우 새로운 결합 모듈인 org.hamcrest:hamcrest를 사용해야 함.

12. Tomcat’s MBean Registry

Tomcat의 MBean 레지스트리는 이제 기본적으로 비활성화되어 2MB의 힙을 절약한다. 만약 Tomcat의 MBean을 사용하려면 아래 설정을 한다.

server.tomcat.mbeanregistry.enabledto true

13. Logback max history

기본 Logback 구성의 가 7일의 를 사용하도록 업데이트되었음. logging.file.max-history 구성 속성을 사용하여 조정할 수 있다.

14. HttpHiddenMethodFilter는 기본적으로 비활성화

_method 요청 매개변수를 처리하는 필터는 본문에 매개변수가 포함될 수 있는 경우 요청 본문의 이른 소비를 야기하므로 이제 기본적으로 비활성화된다.

spring.webflux.hiddenmethod.filter.enabled 또는 spring.mvc.hiddenmethod.filter.enabled를 true로 설정하여 복원할 수 있다.

15. Java 13 지원

16. 성능 개선

Spring Boot의 @Configuration 클래스에서 proxyBeanMethods=false를 사용하여 시작 시간과 메모리 사용량을 줄였음. proxyBeanMethods는 Spring Framework 5.2 M1에 도입된 @Configuration의 새로운 속성이다. proxyBeanMethods는 @SpringBootApplication 및 @SpringBootConfiguration의 속성으로도 사용할 수 있다.

Gradle의 bootRun를 사용하여 애플리케이션을 실행하면 JVM이 구성된다. 이때 JVM은 시작 시간 단축을 위해 최적화하기 위해 플래그(-Xverify:none 및 -XX:TieredStopAtLevel=1)로 구성된다. JDK 13에서 실행할 때 -Xverify:none은 더 이상 사용되지 않으므로 지정되지 않는다.

몇 가지 다른 성능 향상

  • 많은 수의 구성 속성을 바인딩하는 데 걸리는 시간이 크게 단축됨.
  • Spring Boot는 JPA 엔티티를 스캔하여 PersistenceUnit을 완전히 준비하므로 Hibernate 자체 엔티티 스캐닝은 중복되므로 비활성화됨.
  • 자동 구성의 주입 지점이 빈을 생성해야 할 때만 적용되도록 개선됨.
  • Actuator 끝점과 관련된 Bean은 이제 끝점이 활성화되고 노출된 경우에만 생성됨.
  • 코덱을 사용하지 않을 때 더 이상 설정하지 않도록 코덱 자동 설정 조건을 개선됨.
  • Tomcat의 MBean 레지스트리는 기본적으로 비활성화되어 Tomcat의 메모리 공간을 약 2MB로 줄임.

Lazy Initialization (지연 초기화)

  • spring.main.lazy-initialization 속성을 통해 전역 지연 초기화를 활성화할 수 있음. 그러나 이 기능을 사용하면 아래 비용이 발생한다.
    • 지연된 초기화가 발생하는 동안 HTTP 요청을 처리하는 데 시간이 더 오래 걸릴 수 있다.
    • 시작 시 일반적으로 발생하는 에러는 이제 나중에 실제 코드를 실행하기 전까지 발생하지 않는다.
반응형

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

[Spring] Spring Boot v2.4  (0) 2022.10.15
[Spring] Spring Boot v2.3  (0) 2022.10.14
[Spring] Spring Framework 6.0과 Spring Boot 3.0 Preview  (0) 2022.10.12
Spring 트랜잭션 처리  (0) 2021.04.18
[Spring] DispatcherServlet 코드 분석하기  (0) 2021.01.01