[spring boot] ์Šคํ”„๋ง๋ถ€ํŠธ 3.1.0 M2 ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ

2023. 3. 29. 19:18ยทFramework/spring

Spring Boot 3.1.0 ๋ฒ„์ „์ด ๋ฆด๋ฆฌ์ฆˆ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

thumb

๋ฌด์—‡์ด ๋ฐ”๋€Œ์—ˆ์„๊ผฌ?

 

 

v3.1.0-M2 Pre-release

 

โญ New Features

  • ํ…Œ์ŠคํŠธ ์ปจํ…Œ์ด๋„ˆ ์— ๋Œ€ํ•œ ์ข…์†์„ฑ ๊ด€๋ฆฌ ์ œ๊ณต #34712
  • GraphQL ํŽ˜์ด์ง€ ๋งค๊น€ ๋ฐ ์ •๋ ฌ ์— ๋Œ€ํ•œ ์ง€์› ๊ตฌ์„ฑ #34677
  • Testcontainers ๊ด€๋ฆฌ ์ปจํ…Œ์ด๋„ˆ ์—์„œ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ…Œ์ŠคํŠธ์— ํ•„์š”ํ•œ ์ƒ์šฉ๊ตฌ ์ค„์ด๊ธฐ #34658
  • ์ž๋™ ๊ตฌ์„ฑ์ด ๊ตฌ์„ฑ ์†์„ฑ ์ด์™ธ์˜ ์†Œ์Šค์—์„œ ์„œ๋น„์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ—ˆ์šฉ #34657
  • ์‚ด๊ท  ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€์‚ด๊ท ๊ฐ’ #34615
  • @GraphQlExceptionHandler ๋ฉ”์„œ๋“œ ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ํ™•์ธ์ž ๊ตฌ์„ฑ #34526
  • Spring Kafka ์žฌ์‹œ๋„ ๊ตฌ์„ฑ์—์„œ ๊ณ ์ • ์ง€์—ฐ์— ๋Œ€ํ•œ ๋‹จ์ผ ํ•ญ๋ชฉ์—์„œ ๋™์ผํ•œ ๊ฐ„๊ฒฉ์— ๋Œ€ํ•œ ๋‹จ์ผ ํ•ญ๋ชฉ์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. #34504
  • ํ”„๋ก์‹ฑ์„ ํ—ˆ์šฉํ•˜๋„๋ก ProblemDetailsExceptionHandler ํด๋ž˜์Šค์—์„œ final์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. #34503
  • Git ์ปค๋ฐ‹ ID Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋ฒ„์ „ ์†์„ฑ ์ด๋ฆ„์„ git-commit-id-plugin.version์—์„œ git-commit-id-maven-plugin.version #34397๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ์ •๋ณด ๊ฑด๋„ˆ๋›ฐ๊ธฐ ์ง€์› ์ถ”๊ฐ€ #34393
  • CNB ํ”Œ๋žซํผ API 0.11 #34383์— ๋Œ€ํ•œ ์ง€์› ์ถ”๊ฐ€
  • ๋ถˆ๊ฐ€๋Šฅํ•œ JDK API ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์Šคํ”„๋ง ๋ถ€ํŠธ ์Šคํƒ€ํ„ฐ ๋ถ€๋ชจ์—์„œ maven.compiler.release๋ฅผ ๊ตฌ์„ฑ #34365
  • JoranConfigurators๋ฅผ ๋กœ๊ทธ๋ฐฑ #34361์— ๋ฏธ๋ฆฌ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›์„ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค.
  • Add management.wavefront.application.custom-tags property #34223
  • ํ† ๋ผ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉ์ž ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ† ๋ผ ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ์ž ์ง€์ • ํ”„๋กœ๊ทธ๋žจ ์ถ”๊ฐ€ #34050
  • ์Šคํ”„๋ง ๊ถŒํ•œ ๋ถ€์—ฌ ์„œ๋ฒ„ ์ง€์› ์ถ”๊ฐ€ #34003

๐Ÿž Bug Fixes

  • @EntityScan ์‚ฌ์šฉํ•˜๋ฉด AOT ์ธ์Šคํ„ด์Šค ๊ณต๊ธ‰์ž ์ฝ”๋“œ ์ƒ์„ฑ ์˜ค๋ฅ˜ #34731์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ํฌํ•จ๋œ ์›น ์„œ๋ฒ„๊ฐ€ ๊ตฌ์„ฑ ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ EmbeddedWebServerFactoryCustomizerAutoConfiguration ์ด ์‹คํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. #34660
  • ํด๋ž˜์Šค ๊ฒฝ๋กœ์— '.' ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ๋™์ผํ•œ ํŒŒ์ผ์„ ๋‘ ๋ฒˆ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. #34618
  • @ConfigurationProperties ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ Kotlin ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค ์—์„œ ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. #34611
  • SnakeYAML 2.0 #34516์„ ์‚ฌ์šฉํ•  ๋•Œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ .yml๋กœ๋“œ๊ฐ€ ์‹คํŒจํ•˜๊ณ  NoSuchMethodError
  • ์ด๋ฏธ์ง€ ๋นŒ๋“œํŒฉ์ด ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ podman์„ ์‚ฌ์šฉํ•œ ์ด๋ฏธ์ง€ ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. #34496
  • Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ถœ๋ ฅ ํƒ€์ž„ ์Šคํƒฌํ”„๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ ์‹œ๊ฐ„๋Œ€ - ๋กœ์ปฌ ํƒ€์ž„ ์Šคํƒฌํ”„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค # 34431
  • Spring Boot 3์€ ๋นจ๊ฐ„์ƒ‰ ๋ฉ”ํŠธ๋ฆญ ์‚ฌ์šฉ์ž ์ง€์ • ํƒœ๊ทธ ํ‚ค #34425๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์„ฑ ์†์„ฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • org.springframework.boot.web.embedded.jetty.GracefulShutdown์ด ์ž˜๋ชป๋œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ฑฐ #34420์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ์ดˆ๊ธฐํ™”๋œ ์ค‘์ฒฉ ๋ ˆ์ฝ”๋“œ ์†์„ฑ ๊ฐ’์ด ์žˆ๋Š” @ConfigurationProperties ๋” ์ด์ƒ ๋ฐ”์ธ๋”ฉ ๋˜์ง€ ์•Š์Œ #34411
  • ์‚ฌ์šฉ์ž ์ง€์ • ConfigDataLocationResolver/ConfigDataLoader๊ฐ€ ์Šคํ”„๋ง ๋ถ€ํŠธ ๊ฐœ๋ฐœ ๋„๊ตฌ #3์™€ ๊ฒฐํ•ฉ๋  ๋•Œ 0.34375.x์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
  • defaultTracingObservationHandler๊ฐ€ ๋ฌธ์„œํ™” ๋œ ๋Œ€๋กœ ์ •๋ ฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. #34370

๐Ÿ“” Documentation

  • Java 20 #34727์— ๋Œ€ํ•œ ๋ฌธ์„œ ์ง€์›
  • ๋ฐฐ์น˜ ๋ฌธ์„œ์˜ ์˜คํƒ€: ์ปจํ…์ŠคํŠธ ๋Œ€์‹  ์ฝ˜ํ…์ธ  #34707
  • WebFlux #34706์˜ ์‚ฌ์šฉ์ž ์ง€์ • ์˜ค๋ฅ˜ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๊ทœ์น™ ์„ค๋ช…
  • ์ž‘์—… ์‹คํ–‰๊ธฐ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋Ÿฌ๋„ˆ ์—์„œ Javadoc ์ˆ˜์ • #34604
  • ์ด์ „ API #34603์— ๋Œ€ํ•œ ๋‘ ๊ฐœ์˜ ์ฐธ์กฐ ์—…๋ฐ์ดํŠธ
  • podman ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๊ตฌ์„ฑ์„ ์œ„ํ•œ ์†Œ์ผ“ ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ๋ฌธ์„œํ™” #34476
  • Gradle 8 ์— ๋Œ€ํ•œ ๋ฌธ์„œ ์ง€์› #34463
  • ๋ฐฐ์น˜ ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ #34456
  • ์žฅ์•  ์กฐ์น˜ ์Šคํƒ€ํ„ฐ #34423์— ๋งํฌ ์ถ”๊ฐ€
  • OpenTelemetry ์„น์…˜ #34416์—์„œ ์˜คํƒ€ ์ˆ˜์ •
  • ์†์„ฑ ์•”ํ˜ธํ™” #34415์˜ ์˜คํƒ€ ์ˆ˜์ •
  • ์Šคํ”„๋ง ๋ถ€ํŠธ Gradle ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฌธ์„œ์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ DSL์„ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉ #34392

๐Ÿ”จ Dependency Upgrades

  • Upgrade to Byte Buddy 1.14.2 #34679
  • Upgrade to Caffeine 3.1.5 #34571
  • Upgrade to Couchbase Client 3.4.4 #34680
  • Upgrade to Dropwizard Metrics 4.2.18 #34681
  • Upgrade to Flyway 9.15.2 #34573
  • Upgrade to GraphQL Java 20.1 #34715
  • Upgrade to Groovy 4.0.10 #34683
  • Upgrade to Infinispan 14.0.7.Final #34684
  • Upgrade to Jedis 4.3.2 #34700
  • Upgrade to Jetty 11.0.14 #34575
  • Upgrade to Jetty Reactive HTTPClient 3.0.8 #34574
  • Upgrade to jOOQ 3.18.1 #34701
  • Upgrade to Json-smart 2.4.10 #34685
  • Upgrade to Liquibase 4.20.0 #34578
  • Upgrade to Logback 1.4.6 #34686
  • Upgrade to MariaDB 3.1.3 #34716
  • Upgrade to Maven Compiler Plugin 3.11.0 #34579
  • Upgrade to Maven Help Plugin 3.4.0 #34687
  • Upgrade to Micrometer 1.11.0-M2 #34546
  • Upgrade to Micrometer Tracing 1.1.0-M2 #34547
  • Upgrade to Netty 4.1.90.Final #34688
  • Upgrade to OpenTelemetry 1.24.0 #34581
  • Upgrade to Oracle R2DBC 1.1.1 #34723
  • Upgrade to Postgresql 42.6.0 #34689
  • Upgrade to Rabbit AMQP Client 5.17.0 #34702
  • Upgrade to Reactor Bom 2022.0.5 #34553
  • Upgrade to Selenium HtmlUnit 4.8.1.1 #34690
  • Upgrade to SLF4J 2.0.7 #34691
  • Upgrade to Spring AMQP 3.0.3 #34610
  • Upgrade to Spring Data Bom 2023.0.0-M3 #34548
  • Upgrade to Spring Framework 6.0.7 #34554
  • Upgrade to Spring GraphQL 1.2.0-M1 #34550
  • Upgrade to Spring HATEOAS 2.1.0-M1 #34703
  • Upgrade to Spring Integration 6.1.0-M2 #34552
  • Upgrade to Spring Kafka 3.0.5 #34555
  • Upgrade to Spring Retry 2.0.1 #34556
  • Upgrade to Spring Security 6.1.0-M2 #34549
  • Upgrade to Spring Session 3.1.0-M1 #34551
  • Upgrade to SQLite JDBC 3.41.2.0 #34725
  • Upgrade to Tomcat 10.1.7 #34582
  • Upgrade to UnboundID LDAPSDK 6.0.8 #34583

 

 

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ:

  • Testcontainer์— ๋Œ€ํ•œ ์ข…์†์„ฑ ๊ด€๋ฆฌ
  • GraphQL ํŽ˜์ด์ง€ ๋งค๊น€ ๋ฐ ์ •๋ ฌ ๊ตฌ์„ฑ ์ง€์›
  • Testcontainers ๊ด€๋ฆฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ถ•์†Œ๋œ ์ƒ์šฉ๊ตฌ
  • ์ž๋™ ๊ตฌ์„ฑ์ด ๊ตฌ์„ฑ ์†์„ฑ ์ด์™ธ์˜ ์†Œ์Šค์—์„œ ์„œ๋น„์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ—ˆ์šฉ
  • SanitizedValue์™€ ํ•จ๊ป˜ SanitizableData ์ถ”๊ฐ€
  • @GraphQlExceptionHandler ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ๊ตฌ์„ฑ๋œ ์˜ˆ์™ธ ํ•ด๊ฒฐ ํ”„๋กœ๊ทธ๋žจ
  • Spring Kafka ์žฌ์‹œ๋„ ๊ตฌ์„ฑ์—์„œ ๊ณ ์ • ์ง€์—ฐ์— ๋Œ€ํ•œ ๋‹จ์ผ ์ฃผ์ œ์—์„œ ๋™์ผํ•œ ๊ฐ„๊ฒฉ์— ๋Œ€ํ•œ ๋‹จ์ผ ์ฃผ์ œ๋กœ ์ „ํ™˜๋จ
  • ํ”„๋ก์‹ฑ์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ProblemDetailsExceptionHandler ํด๋ž˜์Šค์—์„œ ์ตœ์ข… ์ œ๊ฑฐ๋จ
  • Git Commit ID Maven ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋ฒ„์ „ ์†์„ฑ ์ด๋ฆ„ ๋ณ€๊ฒฝ
  • ๋นŒ๋“œ ์ •๋ณด ๊ฑด๋„ˆ๋›ฐ๊ธฐ ์ง€์› ์ถ”๊ฐ€
  • CNB ํ”Œ๋žซํผ API 0.11์— ๋Œ€ํ•œ ์ง€์› ์ถ”๊ฐ€
  • ๋ถˆ๊ฐ€๋Šฅํ•œ JDK API ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด spring-boot-starter-parent์— maven.compiler.release ๊ตฌ์„ฑ
  • JoranConfigurators๊ฐ€ Logback์— ๋ฏธ๋ฆฌ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›์„ ๋˜๋Œ๋ ธ์Šต๋‹ˆ๋‹ค.
  • management.wavefront.application.custom-tags ์†์„ฑ ์ถ”๊ฐ€
  • RabbitTemplates์˜ ์‚ฌ์šฉ์ž ์ง€์ •์„ ํ—ˆ์šฉํ•˜๋Š” RabbitTemplateCustomizer ์ถ”๊ฐ€
  • Spring Authorization Server ์ง€์› ์ถ”๊ฐ€

๋ฒ„๊ทธ ์ˆ˜์ •:

  • @EntityScan์œผ๋กœ ์ธํ•œ AOT ์ธ์Šคํ„ด์Šค ๊ณต๊ธ‰์—…์ฒด ์ฝ”๋“œ ์ƒ์„ฑ ์˜ค๋ฅ˜ ์ˆ˜์ •
  • ์ž„๋ฒ ๋””๋“œ ์›น ์„œ๋ฒ„๊ฐ€ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ EmbeddedWebServerFactoryCustomizerAutoConfiguration์ด ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •
  • ํด๋ž˜์Šค ๊ฒฝ๋กœ์— '.'๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ๋™์ผํ•œ ํŒŒ์ผ์„ ๋‘ ๋ฒˆ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋„๋ก StandardConfigDataResource๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ Kotlin ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค์˜ @ConfigurationProperties ์ˆ˜์ •
  • SnakeYAML 2.0์„ ์‚ฌ์šฉํ•  ๋•Œ NoSuchMethodError๋กœ application.yml์„ ๋กœ๋“œํ•˜๋Š” ๋ฌธ์ œ ์ˆ˜์ •
  • ์ด๋ฏธ์ง€ ๋นŒ๋“œํŒฉ์ด ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ podman์œผ๋กœ ์ด๋ฏธ์ง€ ๋นŒ๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • outputTimestamp๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ UTC ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก Maven ํ”Œ๋Ÿฌ๊ทธ์ธ ์ˆ˜์ •
  • Spring Boot 3์—์„œ ๋นจ๊ฐ„์ƒ‰ ๋ฉ”ํŠธ๋ฆญ ์‚ฌ์šฉ์ž ์ง€์ • ํƒœ๊ทธ ํ‚ค๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์„ฑ ์†์„ฑ ์ถ”๊ฐ€
  • org.springframework.boot.web.embedded.jetty.GracefulShutdown์ด ์˜ฌ๋ฐ”๋ฅธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ฑฐ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์ˆ˜์ •
  • ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐ”์ธ๋”ฉ๋˜๋„๋ก ์ดˆ๊ธฐํ™”๋œ ์ค‘์ฒฉ ๋ ˆ์ฝ”๋“œ ์†์„ฑ ๊ฐ’์ด ์žˆ๋Š” @ConfigurationProperties๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • 3.0.x์—์„œ spring-boot-devtools์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ์ปค์Šคํ…€ ConfigDataLocationResolver/ConfigDataLoader๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์„œํ™”๋œ ๋Œ€๋กœ ์ฃผ๋ฌธ๋˜๋„๋ก defaultTracingObservationHandler ์ˆ˜์ •

์„ ์  ์„œ๋ฅ˜ ๋น„์น˜:

  • Java 20 ๋ฐ Gradle 8์— ๋Œ€ํ•œ ๋ฌธ์„œํ™”๋œ ์ง€์›
  • WebFlux์˜ ์‚ฌ์šฉ์ž ์ง€์ • ์˜ค๋ฅ˜ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ๊ทœ์น™
  • ์—…๋ฐ์ดํŠธ๋œ ๋ฐฐ์น˜ ๋ฌธ์„œ
  • ์žฅ์•  ์กฐ์น˜ ์Šคํƒ€ํ„ฐ์— ๋Œ€ํ•œ ๋งํฌ ์ถ”๊ฐ€
  • ๋‹ค์–‘ํ•œ ์„น์…˜์˜ ์˜คํƒ€ ์ˆ˜์ •

์ข…์†์„ฑ ์—…๊ทธ๋ ˆ์ด๋“œ:

Byte Buddy, Caffeine, Couchbase Client, Dropwizard Metrics, Flyway, GraphQL Java, Groovy, Infinispan, jOOQ, Json-smart, Liquibase, Logback, MariaDB, Maven Compiler Plugin, Maven Help Plugin, Micrometer, Netty, OpenTelemetry, Oracle R2DBC, Postgresql, Rabbit AMQP Client, Reactor Bom, Selenium HtmlUnit, SLF4J, Spring AMQP, Spring Data Bom, Spring Framework, Spring GraphQL, Spring HATEOAS, Spring Integration, Spring Kafka, Spring Retry, Spring Security, Spring Session, SQLite JDBC, Tomcat ๋ฐ UnboundID LDAPSDK.

 

 

Java ์˜ˆ์‹œ ์˜ˆ์‹œ

์ด ์˜ˆ์ œ์—์„œ๋Š” Testcontainers ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ @Container ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์‹œ์ž‘๋˜๊ณ  ํ…Œ์ŠคํŠธ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ค‘์ง€๋˜๋Š” PostgreSQL ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค์—์„œ Testcontainers ์ง€์›์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด @Testcontainers ์ฃผ์„์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ Testcontainer๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹์ผ๊ด€๋˜๊ณ  ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.testcontainers.utility.DockerImageName;

@Testcontainers
@SpringBootTest
public class MyServiceTest {

  @Container
  static PostgreSQLContainer<?> postgreSQLContainer =
    new PostgreSQLContainer<>(DockerImageName.parse("postgres:latest"))
      .withDatabaseName("mydb")
      .withUsername("username")
      .withPassword("password");

  @Autowired
  private MyService myService;

  @Test
  void testMyService() {
    // use myService to test functionality
  }
}

 

Kotlin ์˜ˆ์‹œ

์ด ์˜ˆ์—์„œ๋Š” 'companion object' ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ Testcontainers ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์  ํ•„๋“œ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ myService ํ•„๋“œ๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด lateinit var ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Spring์˜ ์˜์กด์„ฑ ์ฃผ์ž… ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ์ฑ„์›Œ์งˆ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‚ฌ์†Œํ•œ ๊ตฌ๋ฌธ ์ฐจ์ด๋ฅผ ์ œ์™ธํ•˜๋ฉด Kotlin ์ฝ”๋“œ๋Š” ์ด์ „ ์˜ˆ์ œ์˜ Java ์ฝ”๋“œ์™€ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.testcontainers.containers.PostgreSQLContainer
import org.testcontainers.junit.jupiter.Container
import org.testcontainers.junit.jupiter.Testcontainers
import org.testcontainers.utility.DockerImageName

@Testcontainers
@SpringBootTest
class MyServiceTest {

    companion object {
        @Container
        val postgreSQLContainer: PostgreSQLContainer<*> = PostgreSQLContainer<Nothing>(DockerImageName.parse("postgres:latest"))
                .withDatabaseName("mydb")
                .withUsername("username")
                .withPassword("password")
    }

    @Autowired
    lateinit var myService: MyService

    @Test
    fun testMyService() {
        // use myService to test functionality
    }
}

 

 

์ „๋ฐ˜์ ์œผ๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ, ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ์ข…์†์„ฑ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—…๋ฐ์ดํŠธ๋Š” Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ, ์•ˆ์ •์„ฑ ๋ฐ ๋ณด์•ˆ์„ ๊ฐœ์„ ํ•˜๊ณ  ์ตœ์‹  ๋ฒ„์ „์˜ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Testcontainers ์ข…์†์„ฑ ๊ด€๋ฆฌ ๋ฐ Spring Authorization Server ์ง€์›์˜ ์ถ”๊ฐ€๋Š” ๊ฐ๊ฐ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํŠนํžˆ ์ฃผ๋ชฉํ•  ๋งŒํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

728x90
'Framework/spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Spring Boot 3.4 ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ
  • Spring One 2023 ์„ธ์…˜ ๋ชจ์Œ
  • [Spring] Web on Reactive Stack(๋ฐ˜์‘ํ˜• ์Šคํƒ์˜ ์›น)
  • Spring Boot 3.0 Release Notes
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ง€๋‹ˆ๐Ÿงž‍โ™‚๏ธ๐Ÿฅญ
์ผ์ƒ, ๊ฒŒ์ž„, ๋ง›์ง‘, ์—ฌํ–‰, ๊ฐœ๋ฐœ, 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.1.0 M2 ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ
์ƒ๋‹จ์œผ๋กœ

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