IT Developer/Spring

Spring 기초 <2. Spring Boot 3.x와 Spring 6의 주요 변경 사항>

TEMA_ 2025. 3. 19. 13:15
반응형

스프링 Spring

2. Spring Boot 3.x와 Spring 6의 주요 변경 사항

 

안녕하세요! 태마입니다.

Spring 기초 강좌입니다.

 

강좌의 경우 

1. 주제 간단 정리

2. 상세 주제 정리

으로 이루어져 있습니다.

 

스프링 Spring

포스팅 시작하겠습니다 :)

 

 

 

 


 

1. 주제 간단 정리

 

 

1. Spring Boot 3.x와 Spring 6 – 왜 중요한가?

Spring Boot 3.x와 Spring 6는 Java 17을 기반으로 동작하는 최신 버전입니다.
이전 버전(Spring Boot 2.x, Spring 5.x)과 비교하면 성능 향상, Jakarta EE 지원, GraalVM 네이티브 이미지 지원 등의 변화가 있습니다.

📌 Spring Boot 3.x & Spring 6를 업데이트해야 하는 이유
Java 17 이상 필수 → 기존의 Java 8, 11 지원이 종료됨
Jakarta EE 9+ 전환 → javax.* 패키지가 jakarta.*로 변경됨
GraalVM 네이티브 이미지 지원 → 실행 속도 향상, 메모리 사용 최적화
Spring Security 아키텍처 개편 → WebSecurityConfigurerAdapter가 사라짐

📌 기존 Spring Boot 2.x 프로젝트를 3.x로 올릴 때 필수로 알아야 하는 내용임.


2. Java 17 이상 필수 – 어떤 변화가 있을까?

Spring Boot 3.x와 Spring 6는 Java 17 이상에서만 실행 가능합니다.
이는 새로운 언어 기능(Lambda 개선, Switch 패턴 매칭, Records 등)을 적극 활용할 수 있도록 하기 위함입니다.

📌 Java 17 이상을 요구하는 이유
GraalVM 네이티브 이미지 지원
LTS(Long-Term Support) 버전 유지
Java의 성능 최적화 및 GC(Garbage Collection) 개선

📌 Java 8, 11 기반 프로젝트는 반드시 Java 17 이상으로 업그레이드해야 함.


3. Jakarta EE 9+ 지원 – 패키지 변경 사항

Spring 6부터는 기존의 Java EE(javax.*) 패키지를 완전히 제거하고,
Jakarta EE(jakarta.*) 패키지로 전환되었습니다.

📌 기존 코드 변경 예시

// 기존 Java EE(javax) 
import javax.servlet.ServletContext; 
import javax.validation.constraints.NotNull; 

// 변경 후 Jakarta EE(jakarta) 
import jakarta.servlet.ServletContext; 
import jakarta.validation.constraints.NotNull;

📌 Spring Boot 3.x로 마이그레이션할 경우,
📌 모든 javax. 패키지를 jakarta. 패키지로 변경해야 함.**


4. GraalVM 네이티브 이미지 지원 – 실행 속도 & 메모리 최적화

Spring Boot 3.x는 GraalVM을 정식 지원하며, 네이티브 이미지 빌드가 가능합니다.
이는 기존 JVM 실행 방식보다 빠르고 메모리 사용량을 최적화할 수 있는 장점이 있습니다.

📌 GraalVM 적용 전후 비교

비교 항목기존 JVM 실행GraalVM 네이티브 이미지 실행

기동 시간 수 초 ~ 수십 초 수 밀리초 ~ 1초 내외
메모리 사용량 높음 낮음
배포 환경 Java가 필요함 실행 파일만 있으면 동작

📌 서버리스(Serverless) 환경에서 Spring Boot 사용 시 강력한 성능 향상을 제공함.


✅ 여기까지 Spring Boot 3.x와 Spring 6에서 바뀐 핵심 개념을 배웠습니다!
👉 "그렇다면, Spring Boot 3.x에서는 어떤 코드 변경이 필요할까요?"
✅ 2부에서 Spring Security 개편, 새로운 REST API 설정, 마이그레이션 가이드를 배워봅시다!

반응형

 

2. 상세 주제 정리

 

1. Spring Security 6 – WebSecurityConfigurerAdapter 제거

Spring Boot 3.x에서는 WebSecurityConfigurerAdapter가 삭제되었습니다.
이제는 Lambda 기반 Security 설정을 사용해야 합니다.

📌 기존 방식 (Spring Boot 2.x)

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/admin").hasRole("ADMIN")
            .anyRequest().authenticated()
            .and()
            .formLogin();
    }
}

📌 변경 후 (Spring Boot 3.x)

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/admin").hasRole("ADMIN")
                .anyRequest().authenticated()
            )
            .formLogin(withDefaults())
            .build();
    }
}

📌 WebSecurityConfigurerAdapter 대신 SecurityFilterChain을 사용해야 함.


2. REST API 설정 변경 – @RequestMapping 대신 @GetMapping 사용

Spring Boot 3.x에서는 @RequestMapping보다 @GetMapping, @PostMapping 등을 사용하는 것이 권장됩니다.

📌 기존 방식 (Spring Boot 2.x)

@RestController
@RequestMapping("/api")
public class ApiController {
    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello() {
        return "Hello Spring Boot 2!";
    }
}

📌 변경 후 (Spring Boot 3.x)

@RestController
@RequestMapping("/api")
public class ApiController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello Spring Boot 3!";
    }
}

📌 @RequestMapping 대신 @GetMapping, @PostMapping을 사용하는 것이 Best Practice임.


✅ 2부 마무리

✅ 여기까지 Spring Boot 3.x에서의 코드 변경 사항과 마이그레이션 방법을 배웠습니다!
👉 "그렇다면, Spring Boot 프로젝트를 실무에서 어떻게 최적화할 수 있을까요?"
✅ 다음 회차에서 Spring Boot 프로젝트의 성능 최적화 & 운영 전략을 배워봅시다!

 

 

반응형