Spring Boot 3.0 Release Notes

2023. 2. 26. 19:37ยทFramework/spring

Upgrading from Spring Boot 2.7

์ด๊ฒƒ์€ Spring Boot์˜ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค์ด๋ฏ€๋กœ ๊ธฐ์กด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ด ํ‰์†Œ๋ณด๋‹ค ์กฐ๊ธˆ ๋” ๋ณต์žก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด Spring Boot 2.7 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ „์šฉ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ๋ฅผ ๋งˆ๋ จ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ด์ „ ๋ฒ„์ „์˜ Spring Boot๋ฅผ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ Spring Boot 2.7์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•˜๊ธฐ ์ „์— Spring Boot 3.0๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

New and Noteworthy

 

Tip.

๊ตฌ์„ฑ ๋ณ€๊ฒฝ ๋กœ๊ทธ์—์„œ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ „์ฒด ๊ฐœ์š”๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

Java 17 Baseline and Java 19 Support

์Šคํ”„๋ง ๋ถ€ํŠธ 3.0์—๋Š” ์ตœ์†Œ ๋ฒ„์ „์œผ๋กœ Java 17์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ Java 8 ๋˜๋Š” Java 11์„ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ Spring Boot 3.0 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์ „์— JDK๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ง ๋ถ€ํŠธ 3.0๋„ ์ž˜ ์ž‘๋™ํ•˜๋ฉฐ JDK 19์—์„œ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

GraalVM Baseline and Native Build Tools

์Šคํ”„๋ง ๋ถ€ํŠธ์—๋Š” Graal 22.3 ์ด์ƒ ๋ฐ ๊ธฐ๋ณธ ๋นŒ๋“œ ๋„๊ตฌ ํ”Œ๋Ÿฌ๊ทธ์ธ 0.9.17 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Third-party Library Upgrades

์Šคํ”„๋ง ๋ถ€ํŠธ 3.0์€ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„ ์›Œํฌ 6์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋ฉฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Spring Framework 6.0์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ฝ์–ด๋ณด์‹ญ์‹œ์˜ค.

์ด ๋ฆด๋ฆฌ์Šค์—์„œ ์—…๊ทธ๋ ˆ์ด๋“œ๋œ ๋‹ค๋ฅธ Spring ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Spring AMQP 3.0.
  • Spring Batch 5.0.
  • Spring Data 2022.0.
  • Spring GraphQL 1.1.
  • Spring HATEOAS 2.0.
  • Spring Integration 6.0.
  • Spring Kafka 3.0.
  • Spring LDAP 3.0.
  • Spring REST Docs 3.0.
  • Spring Retry 2.0.
  • Spring Security 6.0 (see also what’s new).
  • Spring Session 3.0
  • Spring WS 4.0.

Spring Boot 3.0์€ ๋ชจ๋“  ์ข…์†์„ฑ์— ๋Œ€ํ•ด Java EE์—์„œ Jakarta EE API๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ์„ ํฌํ•จํ•˜์—ฌ Jakarta EE 10 ํ˜ธํ™˜ ์ข…์†์„ฑ์ด ์„ ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • Jakarta Activation 2.1
  • Jakarta JMS 3.1
  • Jakarta JSON 2.1
  • Jakarta JSON Bind 3.0
  • Jakarta Mail 2.1
  • Jakarta Persistence 3.1
  • Jakarta Servlet 6.0
  • Jakarta Servlet JSP JSTL 3.0
  • Jakarta Transaction 2.0
  • Jakarta Validation 3.0
  • Jakarta WebSocket 2.1
  • Jakarta WS RS 3.1
  • Jakarta XML SOAP 3.0
  • Jakarta XML WS 4.0

๋˜ํ•œ ๊ฐ€๋Šฅํ•œ ํ•œ ํƒ€์‚ฌ ํ•ญ์•„๋ฆฌ์˜ ์•ˆ์ •์ ์ธ ์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ฃผ๋ชฉํ• ๋งŒํ•œ ์ข…์†์„ฑ ์—…๊ทธ๋ ˆ์ด๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Couchbase Client 3.4
  • Ehcache 3.10
  • Elasticsearch Client 8.5
  • Flyway 9
  • Groovy 4.0
  • Hibernate 6.1
  • Hibernate Validator 8.0
  • Jackson 2.14
  • Jersey 3.1
  • Jetty 11
  • jOOQ 3.16
  • Kotlin 1.7.20
  • Liquibase 4.13
  • Lettuce 6.2
  • Log4j 2.18
  • Logback 1.4
  • Micrometer 1.10
  • Micrometer Tracing 1.0
  • Neo4j Java Driver 5.2
  • Netty 4.1.77.Final
  • OkHttp 4.10
  • R2DBC 1.0
  • Reactor 2022.0
  • SLF4J 2.0
  • SnakeYAML 1.32
  • Tomcat 10
  • Thymeleaf 3.1.0.M2
  • Undertow 2.2.20.Final

GraalVM Native Image Support

์ด์ œ Spring Boot 3.0 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ GraalVM ๋„ค์ดํ‹ฐ๋ธŒ ์ด๋ฏธ์ง€๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์‹œ์ž‘ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GraalVM ๋„ค์ดํ‹ฐ๋ธŒ ์ด๋ฏธ์ง€ ์ง€์›์€ ์ „์ฒด Spring ํฌํŠธํด๋ฆฌ์˜ค์—์„œ ์ˆ˜ํ–‰๋œ ์ฃผ์š” ์—”์ง€๋‹ˆ์–ด๋ง ๋…ธ๋ ฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

GraalVM ๋„ค์ดํ‹ฐ๋ธŒ ์ด๋ฏธ์ง€๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์—…๋ฐ์ดํŠธ๋œ ์Šคํ”„๋ง ๋ถ€ํŠธ ์ฐธ์กฐ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Log4j2 Enhancements

Log4j2 ์ง€์›์ด ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์ƒˆ๋กœ์šด ํ™•์žฅ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • Profile-specific Configuration
  • Environment Properties Lookup
  • Log4j2 System Properties

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—…๋ฐ์ดํŠธ๋œ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Improved @ConstructorBinding Detection

์ƒ์„ฑ์ž ๋ฐ”์ธ๋”ฉ @ConfigurationProperties ์‚ฌ์šฉํ•  ๋•Œ ํด๋ž˜์Šค์— ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋‹จ์ผ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ @ConstructorBinding ์ฃผ์„์ด ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ์—๋„ @ConstructorBinding ์‚ฌ์šฉํ•˜์—ฌ Spring Boot์— ์‚ฌ์šฉํ•  ์ƒ์„ฑ์ž๋ฅผ ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด ์—…๋ฐ์ดํŠธ๋œ ๋…ผ๋ฆฌ๋Š” ๋” ๊ฐ„๋‹จํ•œ @ConfigurationProperties ํด๋ž˜์Šค๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ @ConfigurationProperties์ด ์žˆ๊ณ  Bean์„ ๋ฐ”์ธ๋”ฉํ•˜์ง€ ์•Š๊ณ  ์ƒ์„ฑ์ž์— ์‚ฝ์ž…ํ•˜๋ ค๋ฉด ์ด์ œ @Autowired ์ฃผ์„์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Micrometer Updates

๋งˆ์ดํฌ๋กœ๋ฏธํ„ฐ ๊ด€์ธก API๋ฅผ ์œ„ํ•œ ์ž๋™ ๊ตฌ์„ฑ

์Šคํ”„๋ง ๋ถ€ํŠธ 3.0์€ ๋งˆ์ดํฌ๋กœ๋ฏธํ„ฐ 1.10์— ๋„์ž…๋œ ์ƒˆ๋กœ์šด ๊ด€์ฐฐ API๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ObservationRegistry ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”ํŠธ๋ฆญ๊ณผ ์ถ”์  ๋ชจ๋‘์— ๋Œ€ํ•ด ๋‹จ์ผ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ด€์ฐฐ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ด์ œ ObservationRegistry์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ๋ฏธํ„ฐ ์ฝ”์–ด๊ฐ€ ํด๋ž˜์Šค ๊ฒฝ๋กœ์— ์žˆ๋Š” ๊ฒฝ์šฐ DefaultMeterObservationHandler๊ฐ€ ObservationRegistry์— ๋“ฑ๋ก๋˜๋ฉฐ, ์ด๋Š” ์ค‘์ง€๋œ ๋ชจ๋“  ๊ด€์ฐฐ์ด ํƒ€์ด๋จธ๋กœ ์ด์–ด์ง„๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ObservationPredicate, GlobalObservationConvention ๋ฐ ObservationHandler๋Š” ObservationRegistry์— ์ž๋™์œผ๋กœ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ObservationRegistryCustomizer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ObservationRegistry๋ฅผ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฐธ์กฐ ๋ฌธ์„œ์˜ ์ƒˆ๋กœ์šด '๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ' ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋งˆ์ดํฌ๋กœ๋ฏธํ„ฐ ์ถ”์ ์„ ์œ„ํ•œ ์ž๋™ ๊ตฌ์„ฑ

์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ด์ œ ๋งˆ์ดํฌ๋กœ ๋ฏธํ„ฐ ์ถ”์ ์„ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” Brave, OpenTelemetry, Zipkin ๋ฐ Wavefront์— ๋Œ€ํ•œ ์ง€์›์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ๋ฏธํ„ฐ ๊ด€์ธก API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ด€์ธก์„ ๋งˆ์น˜๋ฉด Zipkin ๋˜๋Š” Wavefront์— ๋ณด๊ณ ๋œ ์ŠคํŒฌ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ถ”์ ์€ ๊ด€๋ฆฌ ์ค‘์ธ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Zipkin์€ management.zipkin.tracing์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Wavefront๋Š” management.wavefront๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ข…์†์„ฑ์„ ํฌํ•จํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฐธ์กฐ ์„ค๋ช…์„œ์˜ ์ถ”์  ์„น์…˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ๋ฏธํ„ฐ์˜ OtlpMeterRegistry์— ๋Œ€ํ•œ ์ž๋™ ๊ตฌ์„ฑ

์ด์ œ io.micrometer:micrometer-registry-otlp๊ฐ€ ํด๋ž˜์Šค ๊ฒฝ๋กœ์— ์žˆ์„ ๋•Œ OtlpMeterRegistry ๊ฐ€ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ฏธํ„ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” management.otlp.metrics.export.* ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Prometheus Support

ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค ์˜ˆ์‹œ๋ฅผ ์œ„ํ•œ ์ž๋™ ๊ตฌ์„ฑ

๋งˆ์ดํฌ๋กœ๋ฏธํ„ฐ ์ถ”์  ์ถ”์ ๊ธฐ ๋นˆ์ด ์žˆ๊ณ  ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค๊ฐ€ ํด๋ž˜์Šค ๊ฒฝ๋กœ์— ์žˆ๋Š” ๊ฒฝ์šฐ ์ด์ œ SpanContextSupplier๊ฐ€ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณต๊ธ‰์ž๋Š” ํ˜„์žฌ ์ถ”์  ID ๋ฐ ๋ฒ”์œ„ ID๋ฅผ Prometheus์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ๋ฉ”ํŠธ๋ฆญ์„ ์ถ”์ ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์ข…๋ฃŒ ์‹œ ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค ํ‘ธ์‹œ ๊ฒŒ์ดํŠธ์›จ์ด์— ๋Œ€ํ•œ PUT๋งŒ๋“ค๊ธฐ

ํ‘ธ์‹œ ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ์ข…๋ฃŒ ์‹œ PUT์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด management.prometheus.metrics.export.pushgateway.shutdown-operation์„ put์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ธฐ์กด ํ‘ธ์‹œ ์„ค์ •์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ด์ œ post๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

More Flexible Auto-configuration for Spring Data JDBC

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JDBC์— ๋Œ€ํ•œ ์ž๋™ ๊ตฌ์„ฑ์ด ์ด์ œ ๋” ์œ ์—ฐํ•ด์กŒ์Šต๋‹ˆ๋‹ค. Spring Data JDBC์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ์ž๋™ ๊ตฌ์„ฑ๋œ Bean์€ ์ด์ œ ์กฐ๊ฑด๋ถ€์ด๋ฉฐ ๋™์ผํ•œ ์œ ํ˜•์˜ Bean์„ ์ •์˜ํ•˜์—ฌ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” Bean์˜ ์œ ํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • org.springframework.data.jdbc.core.JdbcAggregateTemplate
  • org.springframework.data.jdbc.core.convert.DataAccessStrategy
  • org.springframework.data.jdbc.core.convert.JdbcConverter
  • org.springframework.data.jdbc.core.convert.JdbcCustomConversions
  • org.springframework.data.jdbc.core.mapping.JdbcMappingContext
  • org.springframework.data.relational.RelationalManagedTypes
  • org.springframework.data.relational.core.dialect.Dialect

Enabling Async Acks with Apache Kafka

Kafka์™€ ํ•จ๊ป˜ ๋น„๋™๊ธฐ acks๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ ์†์„ฑ spring.kafka.listener.async-acks๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ acks๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•˜๋ ค๋ฉด ์†์„ฑ์„ true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ spring.kafka.listener.async-mode๊ฐ€ ์ˆ˜๋™ ๋˜๋Š” ์ˆ˜๋™ ์ฆ‰์‹œ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Elasticsearch Java Client

์ƒˆ๋กœ์šด Elasticsearch Java ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์ž๋™ ๊ตฌ์„ฑ์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด spring.elasticsearch.* ๊ตฌ์„ฑ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Auto-configuration of JdkClientHttpConnector

Reactor Netty๊ฐ€ ์—†์œผ๋ฉด Jetty์˜ ๋ฐ˜์‘ํ˜• ํด๋ผ์ด์–ธํŠธ์™€ Apache HTTP ํด๋ผ์ด์–ธํŠธ์ธ JdkClientHttpConnector๊ฐ€ ์ด์ œ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด WebClient๋ฅผ JDK์˜ HttpClient์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@SpringBootTest with Main Methods

@SpringBootTest ์ฃผ์„์€ ์ด์ œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๊ฒ€์ƒ‰๋œ @SpringBootConfiguration ํด๋ž˜์Šค์˜ main์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, main ๋ฉ”์„œ๋“œ์—์„œ ์ˆ˜ํ–‰ ํ•œ ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ง€์ • SpringApplication ๊ตฌ์„ฑ์„ ์ด์ œ ํ…Œ์ŠคํŠธ์—์„œ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ์— main ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด @SpringBootTest์˜ useMainMethod ํŠน์„ฑ์„ UseMainMethod.ALWAYS ๋˜๋Š” UseMainMethod.WHEN_AVAILABLE๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—…๋ฐ์ดํŠธ๋œ ์ฐธ์กฐ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

Miscellaneous

์œ„์— ๋‚˜์—ด๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์™ธ์—๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์†Œํ•œ ์กฐ์ • ๋ฐ ๊ฐœ์„  ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์ค‘์— ๋” ์ด์ƒ ๊ธฐ๋ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋„คํŠธ์›Œํฌ ์กฐํšŒ๊ฐ€ ๋ฐฉ์ง€๋ฉ๋‹ˆ๋‹ค.
  • Java์˜ SecurityManager์— ๋Œ€ํ•œ ์ง€์›์€ JDK์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ดํ›„ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ CommonsMultipartResolver์— ๋Œ€ํ•œ ์ง€์›์€ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ 6์—์„œ ์ œ๊ฑฐ๋œ ํ›„ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • spring.mvc.ignore ๊ธฐ๋ณธ ๋ชจ๋ธ ์˜จ ๋ฆฌ๋””๋ ‰์…˜์€ ์—…์ŠคํŠธ๋ฆผ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„ ์›Œํฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋งž๊ฒŒ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • WebJars ๋ฆฌ์†Œ์Šค ์ฒ˜๋ฆฌ๊ธฐ ๊ฒฝ๋กœ ํŒจํ„ด์€ spring.mvc.webjars-path-pattern ๋˜๋Š” spring.webflux.webjars-path-pattern์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Tomcat์˜ ์›๊ฒฉ IP ๋ฐธ๋ธŒ์˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ก์‹œ๋Š” server.tomcat.remoteip.trusted-proxies๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Bean ์œ ํšจ์„ฑ ๊ฒ€์ฆ ๊ตฌ์„ฑ์€ ์ด์ œ ValidationConfigurationCustomizer Bean์„ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Log4j2์˜ Log4jBridgeHandler๋Š” ์ด์ œ SLF4J๋ฅผ ํ†ตํ•ด ๋ผ์šฐํŒ…ํ•˜๋Š” ๋Œ€์‹  JUL ๊ธฐ๋ฐ˜ ๋กœ๊น…์„ Log2j4๋กœ ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • MeterBinder ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” Bean์€ ์ด์ œ ๋ชจ๋“  ์‹ฑ๊ธ€ํ†ค ๋นˆ์ด ์ดˆ๊ธฐํ™”๋œ ํ›„์—๋งŒ ๋ฏธํ„ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.
  • Brave ๋ฐ OpenTelemetry์šฉ SpanCustomizer ๋นˆ์ด ์ด์ œ ์ž๋™ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • Micrometer์˜ JvmCompilationMetrics๋Š” ์ด์ œ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ์ด์ œ DiskSpaceHealthIndicator๋Š” ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์™€ ์ƒํƒœ ์„ธ๋ถ€ ์ •๋ณด์— ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • ์ด์ œ ๋ž˜ํ•‘๋œ DataSource์—์„œ ํŒŒ์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ œ spring.data.mongodb.additional-hosts ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ MongoDB์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Elasticsearch์˜ socketKeepAlive ์†์„ฑ์€ spring.elasticsearch.socket-keep-alive ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • spring-rabbit-stream์„ ์‚ฌ์šฉํ•  ๋•Œ, ์ด์ œ spring.rabbitmq.listener.type์ด ์ŠคํŠธ๋ฆผ์ธ์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด RabbitStreamTemplate ๋ฐ ํ™˜๊ฒฝ์ด ์ž๋™์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ์กด Kafka ์ฃผ์ œ๋Š” spring.kafka.admin.modify-topic-configs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • WebDriverScope ๋ฐ WebDriverTestExecutionListener๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ํ…Œ์ŠคํŠธ ์„ค์ •์—์„œ WebDriver๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณต๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Deprecations in Spring Boot 3.0

  • @ConstructorBinding org.springframework.boot.context.properties ํŒจํ‚ค์ง€์—์„œ org.springframework.boot.context.properties.bind๋กœ ์žฌ๋ฐฐ์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • JsonMixinModule ๊ฒ€์ƒ‰ ๊ธฐ๋ฐ˜ ์ƒ์„ฑ์ž๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ClientHttpRequestFactorySupplier๋Š” ClientHttpRequestFactories๋กœ ๋Œ€์ฒด๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฟ ํ‚ค ์ฃผ์„ ์†์„ฑ์€ ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • RestTemplateExchangeTagsProvider, WebClientExchangeTagsProvider, WebFluxTagsProvider, WebMvcTagsProvider ๋ฐ ๊ด€๋ จ ํด๋ž˜์Šค๋Š” Observationconvention์— ํ•ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ํด๋ž˜์Šค์˜ non-args ์ƒ์„ฑ์ž @Configuration ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • DefaultTestExecutionListenersPostProcessor ๋ฐ SpringBootDependencyInjectionTestExecutionListener๋Š” Spring Framework์˜ ApplicationContextFailureProcessor๋ฅผ ์œ„ํ•ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • management.metrics.export.<product> ์†์„ฑ์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋Œ€์ฒด๋Š” management.<product>.metrics.export์ž…๋‹ˆ๋‹ค.
  • post์— ์ฐฌ์„ฑํ•˜์—ฌ management.prometheus.metrics.export.pushgateway.shutdown-operation์˜ ํ‘ธ์‹œ ์„ค์ •.
  • @AutoConfigureMetrics @AutoConfigureObservability ์œ„ํ•ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
728x90
'Framework/spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [spring boot] ์Šคํ”„๋ง๋ถ€ํŠธ 3.1.0 M2 ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
  • [Spring] Web on Reactive Stack(๋ฐ˜์‘ํ˜• ์Šคํƒ์˜ ์›น)
  • spring AcceptHeaderLocaleResolver(๋‹ค๊ตญ์–ด) properties ์„ค์ •
  • spring 3 tiles 2 ์„ค์ • ๊ด€๋ จ
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ผ์ƒ, ๊ฒŒ์ž„, ๋ง›์ง‘, ์—ฌํ–‰, ๊ฐœ๋ฐœ, IT ๋ธ”๋กœ๊ทธ๐Ÿงž
  • ์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
    ์š”์ˆ  ๋žจํ”„๐Ÿซ–
    ์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • All (549)
      • Languages (57)
        • JAVA (13)
        • JSP (1)
        • C_C++ (4)
        • Html (3)
        • CSS (1)
        • JavaScript (18)
        • Python (3)
        • Kotlin (13)
        • TypeScript (1)
      • Framework (14)
        • spring (11)
        • jstl (1)
        • angular (2)
      • Tool (28)
        • Eclipse (5)
        • vsCode (3)
        • scrcpy (2)
        • Git (1)
        • IntelliJ (6)
        • Visual-studio (1)
        • UML (1)
        • Gradle (8)
      • DB (6)
        • Oracle (1)
        • MySql (3)
        • Mongo (2)
      • OS (14)
        • Linux (2)
        • Windows (12)
      • Server (8)
        • Tomcat (1)
        • Apache (1)
        • Node.js (6)
      • Programmings (25)
        • Design Pattern (2)
        • Funny (20)
        • Algorithms (3)
      • Cloud (8)
        • Docker (1)
        • Kubernetes (4)
        • Istio (1)
        • ArgoCD (2)
      • IT (5)
        • gRPC (3)
        • RESTful (3)
        • Web UI (5)
        • AI (4)
      • Book (6)
      • TIP (187)
      • Life (53)
      • Game (83)
      • Storage (22)
      • ์‹๋‹น (15)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ์‚ฌ์ดํŠธ๋งต
    • RSS
    • ๊ธฐํƒ€ ์†Œ๋“
  • ๋งํฌ

    • ๊ตฌ๊ธ€
    • ๋„ค์ด๋ฒ„
    • ์ •๋ถ€24
    • Spring Framework ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
    • Kotlin ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
    • ์นด์นด์˜ค ์• ๋“œํ•
    • ๋ธ”๋กœ๊ทธ ์‚ฌ์ดํŠธ๋งต
    • ๋ธ”๋กœ๊ทธ RSS
  • ๊ณต์ง€์‚ฌํ•ญ

    • ์•ˆ๋…•ํ•˜์„ธ์š”
  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ๋‰ด์Šค ๋ธŒ๋ฆฌํ•‘
    ๋ชฌ์Šคํ„ฐํ—Œํ„ฐ๋‚˜์šฐ
    ํ•œ๋ˆˆ์— ๋ณด๋Š” ์˜ค๋Š˜์˜ ๋‰ด์Šค
    ๋ชฌ์Šคํ„ฐํ—Œํ„ฐ์™€์ผ์ฆˆ
    ๋ฐ์ผ๋ฆฌ ๋‰ด์Šค
    ํƒœ๊ตญ
    ์˜ค๋Š˜์˜๋‰ด์Šค
    ํ€˜์ŠคํŠธ
    ๋ธŒ๋ฆฌํ•‘
    ๋‰ด์Šค
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
Spring Boot 3.0 Release Notes
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”