-
Spring boot 2.0 Milestone 1, 2카테고리 없음 2023. 4. 22. 14:40저번주에 Spring boot 2.0 M2 가 나왔다. 그래서 오늘은 Spring boot 2.0 Milestone 1,2의 변경사항을 살펴보도록 하자. 아직 Milestone 버전이기에 바뀔 가능성이 크지만 그래도 한번 살펴보는 시간을 갖도록 하자.
Milestone 1
일단 Milestone 1 부터 바뀐 부분 혹은 삭제된 부분 부터 살펴보자.Deprecations from Spring Boot 1.5
Spring 1.5에 Deprecated 메서드 클래스들은 삭제 되었다. 만약 2.0으로 업그레이드 하기전에 Deprecated 된 부분들은 더 이상 호출하지 않도록 주의하도록 하자.Java 8 baseline
기본적으로 Spring boot 2.0 은 java8+ 이상부터 지원한다. 더이상 java6, java7은 지원하지 않는다. 그러니 이제 제발 java8을 쓰자.Embedded containers package structure
Embedded containers 패키지 구조가 바뀌었다. reactive 때문에 거의 대부분이 리펙토링 되었다.EmbeddedServletContainer
인터페이스는WebServer
인터페이스로 변경 되었고org.springframework.boot.context.embedded
패키지는org.springframework.boot.web.embedded
으로 변경 되었다. embedded 패키지에 netty도 추가되었고TomcatEmbeddedServletContainerFactory
클래스도TomcatServletWebServerFactory
으로 변경 되었다. 또한 새로운TomcatReactiveWebServerFactory
클래스가 추가 되었다.Actuator default mapping
Actuator의 기본적인 url mapping이 변경 되었다. 원래는 아무 것도 없었지만 이제는/application
이 기본적으로 추가 되었으니 참고하면 되겠다. 만약 기본값을 변경하고 싶다면 기존과 동일하다.management.context-path
를 사용해서 기본값을 변경하면 된다.@ConditionalOnBean
@ConditionalOnBean
은 원래는OR
조건이 만족하면 동작하였는데 이제는AND
조건이 만족하면 동작한다.Remote CRaSH shell
저번 Spring boot 1.5에 변경사항 이야기 할 때도 언급했지만CRaSH
프로젝트가 유지보수를 하지 않는 관계로 Spring boot 도 지원을 멈추었다. 이제는 사용할 수 없으니 참고하면 되겠다.Spring Loaded
Spring Loaded 프로젝트가 종료되면서 이제는 지원하지 않는다. 대신 devtools을 사용하는 것을 권장한다. 원래부터 devtools를 권장했던거 같은데.. 아예 지원을 안하니 만약 Loaded를 사용하는 사람은 devtools 바꾸자!Dedicated Hazelcast auto-config for Caching
이건 무슨 말인지 모르겠다. 아무튼spring.cache.hazelcast.config
를 사용할 수 없다고 한다.Default connection pool
기본적인 커넥션풀이 변경 되었다. 기존에는 tomcat의 기본적인 connection pool을 사용했으나 이제는 HikariCP로 변경되었다. spring.datasource.type를 사용해서 tomcat 기반의 어플리케이션을 강제로 HikariCP로 바꾸었다면 이제는 그 설정을 제거해도 된다.Servlet Filters
Filter의 기본 DipatcherType은REQUEST
로 변경되었다.Spring Security
Spring Security Filter는ASYNC
,ERROR
,REQUEST
로 변경 되었고 이것은 Spring Security의 기본 설정을 맞춘것이다.Spring Session
Spring Session 또 한 마찬가지다.ASYNC
,ERROR
,REQUEST
로 변경 되었다. 그리고 Spring Session 2.0 부터는Mongo
와GemFire
가 제거되었다. 그래서 Spring boot도 Mongo Session을 제거하였다.Jetty, Tomcat, Hibernate, Gradle 지원버전
jetty는 최소9.4+
tomcat은 최소8.5+
Hibernate는 최소5.2+
Gradle은 최소3.4+
이상만 지원한다.SendGrid
SendGrid 의 최소 버전은 3.2 버전이다. 해당 버전을 지원하기 위해 API키가 유일한 인증 수단이므로 username과 password는 삭제 되었다.Starter transitive dependencies
기존에는 몇몇의 Spring boot starter를 디펜더시 받으면 spring-boot-starter-web까지 종속적이였던 부분이 많았지만 이제는 새로운 Spring WebFlux를 지원하면서spring-boot-starter-mustache
,spring-boot-starter-thymeleaf
는 더이상 starter-web에 의존하지 않는다. 이제는spring-boot-starter-web
또는spring-boot-starter-webflux
를 선택하여 사용할 수 있지만 그것은 개발자의 몫이다.Solr health indicator
Solr health 체크의 속성이solrStatus
에서status
으로 변경 되었다. 그리고 상태값이Status.UP
일때OK
로 정의 된 부분이 정수로 바뀌었다.Default Proxying strategy
spring boot 이제 AOP 지원을 기본적으로 CGLIB 프로시를 이용한다. 만약 JDK 프록시를 필요할 경우에는 spring.aop.proxy-target-class를 false로 설정하면 된다.@ConfigurationProperties
ignoreNestedProperties
속성이 제거 되었다.Multipart configuration
서블릿 특성을 잘 살리기 위해spring.http.multipart.
에서spring.servlet.multipart.
로 프로퍼티가 변경되었다.Mustache templates default file extension
기본적으로 Mustache 템플릿의 기본 파일 확장자는 .html 에서 .mustache로 변경 되었다. 하지만spring.mustache.suffix
프로퍼티로 변경 가능하다.Spring Framework 5.0
Spring boot2.0은 스프링 프레임워크 5.0 기반으로 동작한다. 스프링 프레임워크 리액리브로 인해 많은 변경이 되었다. 그것은 해당 wiki를 참조하면 되겠다.WebFlux and WebFlux.fn support
다들 알겠지만 Spring boot 2.0은 Reactive Spring 웹 프레임워크를 지원한다.spring-boot-starter-webflux
는 기본적으로 Reactor Netty를 사용한다. (spring-boot-starter-reactor-netty
) 그래서 기본적으로 netty로 서버를 띄운다.Reactive data support
Spring boot 2.0은 몇몇의 reactive Data 자동 설정을 지원한다.- MongoDB (
spring-boot-starter-data-mongodb-reactive
) Redis (
spring-boot-starter-data-redis-reactive
)Cassandra (
spring-boot-starter-data-cassandra-reactive
)
@WebFluxTest support
리액티브로 만든 Controller는 Spring MVC의
@WebMvcTest
와 기능이 유사한@WebFluxTest
를 사용해서 테스트 할 수 있다. 특히WebTestClient
는 자동으로 설정된다.Gradle plugin
Spring boot 의 Gradle 플러그인이 많이 개선되었다. 자세한 내용은 API를 참고하면 되겠다. 필자는 현재 Gradle을 잘 쓰지않아서.. 아직..Deprecations in Spring Boot 2.0.0 M1
spring.main.web-environment
프로퍼티가 deprecated 되었다. 그 대신spring.main.web-application-type
로 변경되었다. 아마도reactive
추가 되어서 enum 타입으로 바꾼 듯 하다.Milestone 2
Default connection pool
아까 위와 동일한 내용이다. Default connection pool이 Hikari로 변경 되었고spring.datasource.type
를 사용해서 변경 할 수 있다. 만약 tomcat을 사용하고 싶다면 아래와 같이 하면 된다.spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
Status code for POST on /loggers
POST 로 날리는/loggers
의 리턴하는 상태코드가 200에서 204로 변경되었다.Elasticsearch
Elasticsearch 가 5.4로 업그레이드 되었다.(드디어 나도 올릴때가 되었다..) 하지만 Elastic의 임베디드 Elasticsearch를 더이상 지원않아 자동설정을 제거 하였다. 그래서spring.data.elasticsearch.cluster-nodes
를 사용하여 하나 이상의 클러스터를 구성해야 한다.Quartz Scheduler
Spring boot 2.0은spring-boot-starter-quartz
전용의 starter를 사용할 수 있다. 인메모리와 jdbc 스토어를 모두 설정할 수 있다.Spring Data Web configuration
Spring boot 2.0은 페이징 및 정렬을 쉽게 도와주도록spring.data.web.
프로퍼티를 제공한다.spring.data.web.pageable.default-page-size= spring.data.web.pageable.page-parameter= spring.data.web.pageable.size-parameter= spring.data.web.sort.sort-parameter=
Json starter
새로운spring-boot-starter-json
가 추가 되었다.jackson-databind
뿐만아니라 java8에서 유용하게 사용할 수 있는jackson-datatype-jdk8
와 jackson-datatype-jsr310, jackson-module-parameter-names도 지원한다.Thymeleaf starter
spring-boot-starter-thymeleaf
디펜더시시에thymeleaf-extras-java8time
도 포함 되어졌다.InfluxDB
InfluxDB 자동설정을 지원한다.spring.influx.url
를 통해 접속할 수 있고spring.influx.user
,spring.influx.password
프로퍼티로 인증도 할 수 있다.JdbcTemplate
Spring boot 자동설정으로 JdbcTemplate을 네임스페이스로 통해 커스텀하게 만들 수 있다.
그리고 내부적으로 NamedParameterJdbcTemplate은 JdbcTemplate을 재사용한다. spring 1.5spring.jdbc.template.fetch-size= spring.jdbc.template.max-rows= spring.jdbc.template.query-timeout=
spring 2.0new NamedParameterJdbcTemplate(this.dataSource);
new NamedParameterJdbcTemplate(jdbcTemplate);
jOOQ
Spring boot2.0 은 JPA dialect 비슷하게DataSource
에 기반하여 자동으로 JOOQ dialect 설정한다. 또한 JOOQ를 쉽게 테스트하기 위해 @JooqTest가 추가되었다.@DataRedisTest
redis를 쉽게 테스트하기 위해서@DataRedisTest
가 추가 되었다.Mongo client customizations
Mongo클라이언트의 정보를 커스텀하게 설정할 수 있도록MongoClientSettingsBuilderCustomizer
가 추가되었다.Cassandra
spring.data.cassandra 의 pooling options이 추가 되었다.spring.data.cassandra.pool.heartbeat-interval= spring.data.cassandra.pool.idle-timeout= spring.data.cassandra.pool.max-queue-size= spring.data.cassandra.pool.pool-timeout=
Kafka listener types
배치 타입의 listener가 추가 되었다.
오늘은 이상으로 Spring boot 2.0 M2의 변경 사항을 알아봤다. 몇가지 빠진게 있긴 한데 그건 필자가 이해 못했거나 자주 거의 사용해보지 않았던거라 잘 몰라서 남기지 못했다. Spring 의 reactive 때문에 많은 변화가 있었다. 대부분 거의 reactive로 인해 변경된 사항이 많았다. 일단 java8이상부터 된다니 그게 젤 맘에 들고 json starter도 히카리CP로 변경된 것도 나쁘지 않다. 아직 더 많은 변화가 있겠지만 차근차근 알아봐야 겠다. 혹시나 잘못 이해한 부분도 있을 수 있으니 해당 문서를 보는 것을 추천한다.spring.kafka.listener.type=batch spring.kafka.listener.type=single
- MongoDB (