prepare Spring Framework 7

1. ๋‚ด์žฅ๋œ ๋ณต์›๋ ฅ ๊ธฐ๋Šฅ

Spring Framework 7์€ ๊ฐ•๋ ฅํ•œ ๋ณต์›๋ ฅ ๋„๊ตฌ๋ฅผ ํ•ต์‹ฌ์— ์ง์ ‘ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • @Retryable: ์ตœ๋Œ€ ์‹œ๋„ ํšŸ์ˆ˜, ์ง€์—ฐ, ์ง€ํ„ฐ, ๋ฐฑ์˜คํ”„ ๋“ฑ์˜ ์„ค์ • ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํŒจํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ์žฌ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐ˜์‘ํ˜• ๋ฐ˜ํ™˜ ์œ ํ˜•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • @ConcurrencyLimit: ์„œ๋น„์Šค์™€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๋™์‹œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹จ์ผ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

  • @EnableResilientMethods๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํŠน์ • ํฌ์ŠคํŠธ ํ”„๋กœ์„ธ์„œ๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ๋‘ ์• ๋…ธํ…Œ์ด์…˜์„ ๋ชจ๋‘ ํ™œ์„ฑํ™”ํ•˜์„ธ์š” . ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

@Configuration
@EnableResilientMethods
public class ApplicationConfig {
}

@Retryable ๋ฐ @ConcurrentLimit์„ ์‚ฌ์šฉํ•œ ์„œ๋น„์Šค

@Configuration
@EnableResilientMethods
public class ApplicationConfig {
}

2. Fluent JMS ํด๋ผ์ด์–ธํŠธ API

Spring์€ ์ด์ œ JdbcClient ์™€ RestClient๋ฅผ ๋ชจ๋ธ๋กœ ํ•œ JmsClient๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ์ด์ œ ์œ ์ฐฝํ•œ ๋นŒ๋” ์Šคํƒ€์ผ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ธฐ์กด JMS ํ…œํ”Œ๋ฆฟ๋ณด๋‹ค ๋”์šฑ ์šฐ์•„ํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ๋›ฐ์–ด๋‚œ ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค. JdbcClient ๊ฐ€ JdbcTemplate์„ , RestClient๊ฐ€ RestTemplate์„ ๋Œ€์ฒดํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค .

3. ๊ฐ•๋ ฅํ•œ API ๋ฒ„์ „ ๊ด€๋ฆฌ

Spring Framework๋Š” ๊ฐ•๋ ฅํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์œผ๋กœ API ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

  • ๋ฏธ๋””์–ด ์œ ํ˜•์„ ํ†ตํ•ด ๋ฒ„์ „์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • API ์ค‘๋‹จ ์•Œ๋ฆผ ๋ฐ ๊ฒ€์ฆ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ณ ์ •๋œ ๋ฒ„์ „ ์„ธํŠธ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์€ Spring MVC์™€ Spring WebFlux ๋ชจ๋‘์—์„œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

4. ํ†ตํ•ฉ ๋ฉ”์‹œ์ง€ ๋ณ€ํ™˜

Spring์€ ์ƒˆ๋กœ์šด HttpMessageConverters ๊ตฌ์„ฑ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ๋ณ€ํ™˜์„ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ†ตํ•ฉ๋œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ฐ˜์‘ํ˜• ์ฝ”๋ฑ์—์„œ ์˜๊ฐ์„ ๋ฐ›์•„ HTTP ๋ฉ”์‹œ์ง€์˜ ์ง๋ ฌํ™” ๋ฐ ์—ญ์ง๋ ฌํ™” ๋ฐฉ์‹์„ ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

5. ๋” ๋น ๋ฅด๊ณ  ์Šค๋งˆํŠธํ•œ ํ…Œ์ŠคํŠธ

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

6. ํ˜„๋Œ€ ์ƒํƒœ๊ณ„ ํ†ตํ•ฉ

Spring Framework 7์€ ์ตœ์‹  ํ”Œ๋žซํผ ๋ฐ ํ‘œ์ค€์— ๋งž์ถฐ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฝ”ํ‹€๋ฆฐ 2.2

  • ์ž์นด๋ฅดํƒ€ EE 11 ๊ธฐ์ค€์„ 

  • GraalVM 24 ์ง€์›

7. Hibernate ORM ๋ฐ JPA ์—…๊ทธ๋ ˆ์ด๋“œ

Spring์€ Hibernate ORM 7.0 ๋ฐ JPA 3.2 ์™€ ํ†ตํ•ฉ๋˜์–ด ์ตœ์‹  ์ง€์†์„ฑ ํ‘œ์ค€๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์—๋Š” EntityManager๋ฅผ @PersistenceContext ์• ๋…ธํ…Œ์ด์…˜์„ ์ •์˜ํ•ด์•ผ๋งŒ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์ œ EntityManagerFactory ์™€ ๊ด€๋ จ ๊ณต์œ  EntityManager๋ฅผ ๋ชจ๋‘ @Inject ๋˜๋Š” @Autowired ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ , ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ง€์†์„ฑ ๋‹จ์œ„๊ฐ€ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ ํŠน์ • ์ง€์†์„ฑ ๋‹จ์œ„๋ฅผ ์„ ํƒํ•˜๋Š” ํ•œ์ •์ž๋„ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

8. HttpHeaders API ๊ฐœํŽธ

์ƒˆ๋กœ์šด HttpHeaders API๋Š” HTTP ํ—ค๋”๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋” ๊น”๋”ํ•˜๊ณ  ์ผ๊ด€๋œ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

9. Jackson 3.x ์ง€์›

Spring Framework๋Š” ์ด์ œ Jackson 3.x๋ฅผ ์ง€์› ํ•˜๊ณ  ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” Jackson ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ง€์นจ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ™œํ•˜๊ฒŒ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

10. JSpecify๋ฅผ ์‚ฌ์šฉํ•œ Null ์•ˆ์ „์„ฑ

์ด์ „ ์• ๋…ธํ…Œ์ด์…˜์„ ํ™•์‹คํžˆ ๋Œ€์ฒดํ•˜๋Š” null ์•ˆ์ „์„ฑ์„ ์œ„ํ•œ JSpecify๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค


์Šคํ”„๋ง ๋ถ€ํŠธ ๊ด€์ 

Spring Boot 4๋Š” Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋ฐœ, ๊ตฌ์„ฑ ๋ฐ ๋ฐฐํฌ ๋ฐฉ์‹์„ ํ˜„๋Œ€ํ™”ํ•˜๋Š” ๋ฐ ์žˆ์–ด ์ค‘์š”ํ•œ ๋„์•ฝ์ž…๋‹ˆ๋‹ค. ์ด ํš๊ธฐ์ ์ธ ๋ณ€ํ™”๋Š” ๋”์šฑ ๋ชจ๋“ˆํ™”๋˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ฐœ๋ฐœ์ž ์นœํ™”์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฒ„์ „์˜ ์‹œ์ž‘์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Spring Boot 4์˜ ์ฃผ์š” ๊ฐœ์„  ์‚ฌํ•ญ๊ณผ ์ด๋Ÿฌํ•œ ๊ฐœ์„  ์‚ฌํ•ญ์ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ๋ชจ๋“ˆํ˜• ์ฝ”๋“œ๋ฒ ์ด์Šค - ๋ฆฌํŒฉํ† ๋ง๋œ ์•„ํ‚คํ…์ฒ˜

๋‚ด๋ถ€ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋” ์ž‘๊ณ  ์ง‘์ค‘์ ์ธ ๋ชจ๋“ˆ๋กœ ๋ถ„ํ• ํ•จ์œผ๋กœ์จ ์•„ํ‚คํ…์ฒ˜์— ํฐ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค . ์ด์ „์—๋Š” Spring Boot๊ฐ€ ํฌ๊ณ  ๋ชจ๋†€๋ฆฌ์‹ ์ž๋™ ๊ตฌ์„ฑ JAR ํŒŒ์ผ ํ˜•์‹์— ์˜์กดํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „ 4์—์„œ๋Š” ์ž๋™ ๊ตฌ์„ฑ์ด ๋ชจ๋“ˆ์‹ ํŒจํ‚ค์ง€๋กœ ๋ฆฌํŒฉํ† ๋ง ๋˜์–ด ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ๋ชจ๋“ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ „์šฉ ํŒจํ‚ค์ง€๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

org.springframework . < ๋ชจ๋“ˆ >โ€‹

๋ชจ๋“ˆ์˜ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ค์Œ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณต๊ฐœ API

  • ์ž๋™ ๊ตฌ์„ฑ ๋…ผ๋ฆฌ

  • ์•ก์ถ”์—์ดํ„ฐ ๊ด€๋ จ ์ง€์›

ํ–ฅ์ƒ๋œ ๊ตฌ์„ฑ ์†์„ฑ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ

์ƒˆ๋กœ์šด ์–ด๋…ธํ…Œ์ด์…˜ @ConfigurationPropertiesSource ๋ฅผ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Spring Boot๋Š” ์™ธ๋ถ€ ๋ชจ๋“ˆ์— ์ •์˜๋œ @ConfigurationProperties ์œ ํ˜•์„ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๋ฐ , ์ด๋Š” ์ด์ „์—๋Š” ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 1. ๋”์šฑ ๊น”๋”ํ•œ ๋ชจ๋“ˆํ˜• ๋””์ž์ธ 2. ๋„๊ตฌ ์ง€์› ๊ฐœ์„ (IDE ์ž๋™ ์™„์„ฑ, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋“ฑ) 3. ๊ณต์œ  ๊ตฌ์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ ์šฉ์ด์„ฑ ํ–ฅ์ƒ

SSL ์ƒํƒœ ๋ณด๊ณ  ๊ฐœ์„ 

Spring Boot์˜ SSL ์ƒํƒœ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๊ฐœ์„ ๋˜์–ด ๋”์šฑ ์ •ํ™•ํ•˜๊ณ  ๊ฐ„์†Œํ™”๋œ ๋ณด๊ณ ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์ด ๋ฐ”๋€Œ์—ˆ๋‚˜์š”?

  • WILL_EXPIRE_SOON ์ƒํƒœ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ด์ œ ์ธ์ฆ์„œ๋Š” ์‹ค์ œ๋กœ ๋งŒ๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ํšจํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  • ๋งŒ๋ฃŒ๊ฐ€ ์ž„๋ฐ•ํ•œ ์ธ์ฆ์„œ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ƒˆ๋กœ์šด ํ•„๋“œ expiringChains๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค .

์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ํŒ€์€ ์ž˜๋ชป๋œ ๊ฒฝ๋ณด ์—†์ด ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ SSL ์ธ์ฆ์„œ์˜ ์œ ํšจ์„ฑ์„ ๋” ์‰ฝ๊ฒŒ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ TaskDecorator Bean์„ ์‚ฌ์šฉํ•œ ์ž‘์—… ์Šค์ผ€์ค„๋ง

Spring Boot 4.0์—์„œ ๊ฐ€์žฅ ๊ฐœ๋ฐœ์ž ์นœํ™”์ ์ธ ์—…๋ฐ์ดํŠธ ์ค‘ ํ•˜๋‚˜๋Š” ์—ฌ๋Ÿฌ TaskDecorator ๋นˆ์„ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 4.0 ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” Spring Boot๊ฐ€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋งŒ ์ง€์›ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์  ๋ฐ ๋กœ๊น…๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋นˆ์„ ์ ์šฉํ•ด์•ผ ํ•  ๋•Œ ์ˆ˜๋™์œผ๋กœ ์ฒด์ด๋‹ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

Spring Boot 4.0 ์ด์ „:

  • Spring Boot์—์„œ๋Š” ํ•˜๋‚˜๋งŒ ํ—ˆ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.TaskDecorator

  • ์—ฌ๋Ÿฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ(์˜ˆ: ์ถ”์  ๋ฐ ๋กœ๊น…)์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์—์„œ ์ˆ˜๋™์œผ๋กœ ์ฒด์ธ์œผ๋กœ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Bean
public TaskDecorator customTaskDecorator() {
    return runnable -> {
        Runnable decoratedWithTracing = tracingDecorator().decorate(runnable);
        return loggingDecorator().decorate(decoratedWithTracing);
    };
}

public TaskDecorator tracingDecorator() {
    return runnable -> () -> {
        System.out.println("Tracing Start");
        runnable.run();
        System.out.println("Tracing End");
    };
}

public TaskDecorator loggingDecorator() {
    return runnable -> () -> {
        System.out.println("Logging Start");
        runnable.run();
        System.out.println("Logging End");
    };
}

์œ„์˜ ์ฝ”๋“œ ์กฐ๊ฐ์—์„œ,

  1. ์ฒด์ด๋‹์€ ์ˆ˜๋™์œผ๋กœ ํ•ด์•ผ ํ•ด์š”

  2. Spring ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  ์ฃผ๋ฌธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Spring Boot 4.0์—์„œ:

Spring Boot๋Š” @Order ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •๋œ ์ˆœ์„œ๋Œ€๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” CompositeTaskDecorator๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

@Bean
@Order(1)
public TaskDecorator tracingDecorator() {
    return runnable -> () -> {
        System.out.println("Tracing Start");
        runnable.run();
        System.out.println("Tracing End");
    };
}

@Bean
@Order(2)
public TaskDecorator loggingDecorator() {
    return runnable -> () -> {
        System.out.println("Logging Start");
        runnable.run();
        System.out.println("Logging End");
    };
}

์ž‘์—…์ด ์‹คํ–‰๋˜๋ฉด Spring์€ ๋‹ค์Œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. ์ถ”์  ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ

  2. ๋กœ๊น…๋ฐ์ฝ”๋ ˆ์ดํ„ฐ

  3. ๊ทธ ๋‹ค์Œ ์‹ค์ œ ์ž‘์—…

๋” ์ด์ƒ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๊ตฌ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Spring Boot๊ฐ€ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด ์ค๋‹ˆ๋‹ค.

6. JdbcClient๋ฅผ ํ†ตํ•œ JMS ์ง€์›

Spring Boot 4.0์€ Spring Framework 7์— ๋„์ž…๋œ JmsClient๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” JdbcClient ๋ฐ RestClient์˜ ์ต์ˆ™ํ•œ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋ฉฐ, JMS ๋ฉ”์‹œ์ง• ์ž‘์—…์„ ์œ„ํ•œ ์œ ์—ฐํ•˜๊ณ  ๋นŒ๋” ํŒจํ„ด ์Šคํƒ€์ผ์˜ ์ตœ์‹  API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. JmsTemplate ๋ฐ JmsMessagingTemplate ๊ณผ๋„ ์—ฌ์ „ํžˆ ๊ณต์กดํ•ฉ๋‹ˆ๋‹ค .

์ด๋ฅผ ํ†ตํ•ด JMS๋Š” ์ ‘๊ทผ์„ฑ์ด ๋›ฐ์–ด๋‚˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ๋” ๊น”๋”ํ•ด์ง‘๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์— ์˜์กดํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

Last updated