๐Ÿšจ Spring Boot 3.x 4.0 Migration: ์‹ค์ œ๋กœ ๋ฌด์—‡์ด ๊นจ์กŒ๋Š”๊ฐ€ (๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ณ ์ณค๋Š”๊ฐ€)

๋ฐœํ–‰: (2026๋…„ 1์›” 31์ผ ์˜ค์ „ 07:48 GMT+9)
5 min read
์›๋ฌธ: Dev.to

Source: Dev.to

Jakarta ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฌธ์ œ

์ฆ์ƒ

Spring Bootโ€ฏ3.x๋กœ Jakarta๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ๋”๋ผ๋„ ์ผ๋ถ€ ์ „์ด ์˜์กด์„ฑ์ด ์—ฌ์ „ํžˆ javax.* ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํ”ํžˆ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ์˜ค๋ž˜๋œ ๊ฒ€์ฆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • SOAP / JAXB ๋„๊ตฌ
  • ๋ ˆ๊ฑฐ์‹œ ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

mvn dependency:tree | grep javax

๊ทธ ๋‹ค์Œ:

  • Jakartaโ€‘ํ˜ธํ™˜ ๋ฒ„์ „์„ ๊ฐ•์ œ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ค๋ž˜๋œ ์ „์ด ์˜์กด์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

Lesson: โ€œIt worked in 3.xโ€ doesnโ€™t mean itโ€™s safe in 4.0. โ†’ ๊ตํ›ˆ: โ€œ3.x์—์„œ๋Š” ์ž‘๋™ํ–ˆ์—ˆ๋‹คโ€๋Š” 4.0์—์„œ๋„ ์•ˆ์ „ํ•˜๋‹ค๋Š” ๋œป์ด ์•„๋‹™๋‹ˆ๋‹ค.

Spring Security ๊ตฌ์„ฑ ๋ณ€๊ฒฝ

์ฆ์ƒ

Spring Bootโ€ฏ4 ์‹œ๋Œ€์˜ Spring Security๋Š” ์™„์ „ํžˆ ๋ช…์‹œ์ ์ธ ๊ตฌ์„ฑ์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๊นจ์ง„ ๋ถ€๋ถ„:

  • ํ๊ธฐ๋œ DSL์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(ํŠนํžˆ CSRF ๋ฐ ์„ธ์…˜ ์ฒ˜๋ฆฌ).
  • ์‚ฌ์šฉ์ž ์ •์˜ ํ•„ํ„ฐ๊ฐ€ ๋” ์ด์ƒ ์ž๋™ ๋“ฑ๋ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋ช…์‹œ์ ์ธ SecurityFilterChain ๋นˆ์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ  ๊ธฐ๋ณธ๊ฐ’์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
        .csrf(csrf -> csrf.disable())
        .authorizeHttpRequests(auth -> auth.anyRequest().authenticated());
    return http.build();
}

Lesson: Implicit security configs are gone; be explicit or be surprised. โ†’ ๊ตํ›ˆ: ์•”์‹œ์ ์ธ ๋ณด์•ˆ ์„ค์ •์€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค; ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด ๋†€๋ผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์Šคํƒ€ํ„ฐ ์ด๋ฆ„ ๋ณ€๊ฒฝ, ๋ถ„ํ•  ๋ฐ ์ œ๊ฑฐ

์ฆ์ƒ

์—ฌ๋Ÿฌ Spring Boot ์Šคํƒ€ํ„ฐ๊ฐ€ ์ด๋ฆ„์ด ๋ฐ”๋€Œ๊ฑฐ๋‚˜, ๋ถ„ํ• ๋˜๊ฑฐ๋‚˜, ์™„์ „ํžˆ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋‹ค์Œ ์˜์—ญ์—์„œ:

  • ๊ด€์ธก์„ฑ
  • Actuator ํ™•์žฅ
  • ๋ ˆ๊ฑฐ์‹œ ํ†ตํ•ฉ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์Šคํƒ€ํ„ฐ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๊ฐ์‚ฌํ•˜์‹ญ์‹œ์˜ค; ๊ธฐ์กด ๋ชฉ๋ก์„ ์‹ ๋ขฐํ•˜์ง€ ๋งˆ์„ธ์š”.

mvn dependency:tree | grep spring-boot-starter

์ œ๊ฑฐ๋œ ์Šคํƒ€ํ„ฐ๋ฅผ ๋‹ค์Œ์œผ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค:

  • ๋ช…์‹œ์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋˜๋Š”
  • ์ƒˆ๋กœ์šด ๋ชจ๋“ˆ์‹ ๋Œ€์•ˆ.

Java ๋ฒ ์ด์Šค๋ผ์ธ ๋ถˆ์ผ์น˜ (Javaโ€ฏ21+)

์ฆ์ƒ

Spring Bootโ€ฏ4.0์€ ์ตœ์‹  Java(Javaโ€ฏ21+) ์‚ฌ์šฉ์„ ๋”์šฑ ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค. ๊นจ์ง„ ๋ถ€๋ถ„:

  • Testcontainers ์ด๋ฏธ์ง€
  • ByteBuddy / Mockito ํ˜ธํ™˜์„ฑ
  • JVM ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ๊ฑฐ๋‚˜ ๋ฌด์‹œ๋จ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ๋กœ์ปฌ Java ๋ฒ„์ „, CI Java ๋ฒ„์ „, Maven ํˆด์ฒด์ธ์„ ์ผ์น˜์‹œํ‚ต๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.

Lesson: Donโ€™t debug Spring errors when itโ€™s really a JVM mismatch. โ†’ ๊ตํ›ˆ: ์‹ค์ œ ๋ฌธ์ œ๋Š” JVM ๋ฒ„์ „ ๋ถˆ์ผ์น˜์ผ ๋•Œ Spring ์˜ค๋ฅ˜๋ฅผ ๋””๋ฒ„๊น…ํ•˜์ง€ ๋งˆ์„ธ์š”.

๊ด€์ธก์„ฑ ๊ธฐ๋ณธ๊ฐ’ ๋ฆฌํŒฉํ„ฐ๋ง

์ฆ์ƒ

Spring Bootโ€ฏ4๋Š” ๊ด€์ธก์„ฑ ๊ธฐ๋ณธ๊ฐ’์„ ๋ฆฌํŒฉํ„ฐ๋งํ–ˆ์Šต๋‹ˆ๋‹ค:

  • ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋จ
  • ๋ฉ”ํŠธ๋ฆญ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋จ
  • ๋…ธ์ถœ ๊ทœ์น™์ด ๋‹ค๋ฆ„

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

Actuator ๋…ธ์ถœ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋‹ค์‹œ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค:

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics

Lesson: โ€œNo errorโ€ โ‰  โ€œworkingโ€. โ†’ ๊ตํ›ˆ: โ€œ์˜ค๋ฅ˜ ์—†์Œโ€์ด ๊ณง โ€œ์ •์ƒ ๋™์ž‘โ€์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ๋ฐ ์ถ”๊ฐ€ ์ฝ์„๊ฑฐ๋ฆฌ

์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ํŒŒ๊ดด์  ๋ณ€๊ฒฝ, ํ•ด๊ฒฐ์ฑ…, ๊ทธ๋ฆฌ๊ณ  ํ•จ์ •์„ ๊ตฌ์กฐํ™”๋œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ฒดํฌ๋ฆฌ์ŠคํŠธ์— ๋ฌธ์„œํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

Full Spring Bootโ€ฏ3.x โ†’โ€ฏ4.0 migration guide
๐Ÿ”—

ํฌํ•จ ๋‚ด์šฉ:

  • ์˜์กด์„ฑ ๊ฐ์‚ฌ ๋‹จ๊ณ„
  • ๋ณด์•ˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํŒจํ„ด
  • ํ…Œ์ŠคํŠธ ๋ฐ CI ์ˆ˜์ •
  • Actuator ๋ฐ ๊ด€์ธก์„ฑ ๋ณ€๊ฒฝ

์šฐ๋ฆฌ๋Š” ์‹ค์ œ ์‚ฌ๋ก€ ๊ธฐ๋ฐ˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ(๋งˆ์ผ€ํŒ… ๋ฌธ์„œ๊ฐ€ ์•„๋‹˜) ์ž‘์€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:
๐Ÿ”—

Spring Boot ์—…๊ทธ๋ ˆ์ด๋“œ, Java ๋ฒ„์ „ ์ ํ”„, ํ˜น์€ ํ”„๋ ˆ์ž„์›Œํฌ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค๋ฉด, ๊ฑฐ๊ธฐ์„œ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Spring Boot ์—…๊ทธ๋ ˆ์ด๋“œ ์ค‘ ๊ฐ€์žฅ ์ด์ƒํ•˜๊ฒŒ ๊นจ์ง„ ๊ฒƒ์€ ๋ฌด์—‡์ด์—ˆ๋‚˜์š”?
์กฐ์šฉํžˆ ๋™์ž‘์ด ๋ฐ”๋€ ๊ฒฝ์šฐ?
๋…ธํŠธ๋ฅผ ๋น„๊ตํ•ด ๋ด…์‹œ๋‹ค ๐Ÿ‘‡

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

SPRING BOOT ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

Java & Spring Boot ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋…ธํŠธ 1. Exception์ด๋ž€? Exception = ํ”„๋กœ๊ทธ๋žจ์˜ ์ •์ƒ ํ๋ฆ„์„ ๋ฐฉํ•ดํ•˜๋Š” ์›ํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์˜ ๋ชฉํ‘œ...

mdevtools๋กœ Hytale ๋ชจ๋”ฉ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ•ํ™”ํ•˜์„ธ์š”

์†Œ๊ฐœ ์ฝ”๋“œ ํ•œ ์ค„์„ ๋ฐ”๊ฟ€ ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ง€๊ฒน๋‚˜์š”? ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” mdevtools๋ฅผ ์„ค์ •ํ•˜์—ฌ Hytale์— ๋Œ€ํ•œ ํ•ซโ€‘๋ฆฌ๋กœ๋”ฉ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

RUST ์ผœ๊ธฐ

Java์—์„œ Rust๋กœ ๊ฐ€๋Š” ๋‚˜์˜ ์—ฌ์ •: ๊ธฐ์ˆ  ์Šคํƒ ๋ณ€๊ฒฝ ์•ˆ๋…•ํ•˜์„ธ์š”, ์ œ ์ด๋ฆ„์€ Garik์ด๊ณ  ์˜ค๋Š˜์€ ์ œ๊ฐ€ ๊ธฐ์ˆ  ์Šคํƒ์„ ๋ฐ”๊พธ๊ธฐ๋กœ ๊ฒฐ์‹ฌํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์—ฌ๋Ÿฌ๋ถ„๊ณผ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ...