본문으로 바로가기

[Spring] 스프링 부트 업데이트 - 2

category Spring 2021. 7. 21. 09:28

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8

 

스프링 부트 업데이트 - 인프런 | 강의

이 강의는 "스프링 부트 개념과 활용" 강의 확장팩으로 지난 2년간 있었던 스프링 부트 업데이트를 다루고 있습니다. 스프링 부트 2.1부터 2.4까지의 새로운 기능 및 변경 내역을 확인하시고 스프

www.inflearn.com

 

ㅇ 스프링 부트 2.2

- 자바 13 지원

 > 최소 자바 8 로 진행

- 의존성 변경

- 초기화 지연을 통해 어플리케이션 구동 시간 줄이는 기능 추가

 > 스프링 프레임워크에는 lazy하게 bean을 등록하는 기능이 있었음

 > 장단점이 있음

- immutable @ConfigruationProperties

 > lombok 과 같이 사용하면 좋을듯

- Actuator, health 그룹 지원

 

ㅁ 스프링 HATEOAS API 변경 내역

  > HATEOAS 0.25 -> 1.0 으로 되면서 api가 바뀜

  > 마이그레이션은 수동으로 진행.. 스크립트가 있지만 잘 안됨

 

ㅁ 의존성 및 프로퍼티 변경

- 스프링 프레임워크 5.1 -> 5.2

 > 스프링 웹플럭스 기반 코틀린, 코루틴 지원

 > R2DBC 지원

 - backpressure 문제 : 데이터를 계속 non-blocking 형식으로 보내는데, 처리가 늦어져서 문제가 생김 

  > 이걸 처리하는 방식이 reactive streaming

   > 공부해보자

- @Configuration 안에 메소드를 통해 호출하는 bean ( 프록시 안에 있는 것) 은 캐싱해서 가져오기 때문에 동일한 객체로 나옴

 > proxyBeanMethods 속성이 있어서, 다른 객체로 나오게 할 수도 있음

 

 

ㅁ 성능 개선

- @Configuration(proxyBeanMethods=false) 로 설정

- spring.main-lazy-initialization= true

  >빈들을 lazy하게 init함

- spring.data.jpa.repositories.bootstrap-model=lazy

 > repository를 lazy 하게 init함

- JMX는 java management extention

  > spring.jmx.enabled=true (기본적으로 false) 로 하여 mBean을 JVM에 등록하고  jconsole 통해 모니터링하여, 쓰레드, 메모리 등을 모니터링 가능

- 단점 : 빈의 생성을 지연 시켜서, 최초 요청에 대한 응답이 늦을 수 있음

             Fail-Fast에 반하는 문제 발생 - 구동시 발생해야할 에러가 동작중에 발생함

 

ㅁ @ConfigurationProperties 개선

- 기존에는 @Component로 Bean으로 등록해주거나, @EnableConfigurationProperties(xxx.class) 로 수동 등록해줌

  > 많을 수록 계속 추가

- @ConfigurationPropertiesScan 으로 @ConfigurationProperties를 자동으로 bean으로 추가

 > 2.2.0에는 문제가 있음 ( scan 안붙여도 자동으로 bean으로 등록 - @SpringBootApplication에 들어있었음  )

- @ConstructorBinding는 생성자를 통해 binding하여 setter를 통해 값을 변경할 수 없음 

  > Immutable @ConfigurationProperties

  > lombok과 같이 쓰면 좋음  -> @ConstructorBinding + @Getter + @AllArgsConstructor

 

ㅁ Actuator, Health 엔드포인트 변경

- application.properties 에 management.endpoint.health.show-details=always 추가

  > 더 많은 정보가 보여짐

- springboot에는 healthContributor 인터페이스가 있음

- 인디케이터들마다 고유의 id가 있다. (diskspace, db 등등..)

- 그룹을 설정하여 엔드포인트/그룹 으로 진행할 수도 있음