티스토리 뷰

🎯 서론

Spring Boot는 Java 기반의 웹 애플리케이션 개발을 쉽고 빠르게 할 수 있도록 도와주는 강력한 프레임워크입니다.
🌟 2022년 말 Spring Boot 3.0이 출시된 이후, 현재 2025년까지 꾸준한 업데이트가 이루어졌으며, Spring Boot 2.x에서 3.x로 업그레이드하면서 많은 변화가 있었습니다.

🔥 이번 포스팅에서는 Spring Boot 3.x와 2.x의 차이점을 비교하고,
기존 프로젝트를 Spring Boot 3.x로 업그레이드하는 방법을 초보자도 쉽게 따라 할 수 있도록 자세히 설명하겠습니다!


📌 1. 주요 변경 사항 한눈에 보기

⚡ 변경 사항🏛 Spring Boot 2.x🚀 Spring Boot 3.x

🔧 Java 지원 버전 Java 8, 11, 17 Java 17 이상 (Java 21 권장)
📦 패키지 변경 javax 패키지 사용 jakarta 패키지 사용
🔐 Spring Security WebSecurityConfigurerAdapter 사용 SecurityFilterChain 사용
🌐 네이티브 이미지 미지원 GraalVM 네이티브 이미지 지원
⚙ API 변경 일부 메서드, 설정 변경 최신 버전에 맞게 리팩토링 필요
📊 Observability ❌ 기본 미지원 ✅ Micrometer & OpenTelemetry 지원

 

📌 요약:
💡 Java 17 이상 필요, javax → jakarta 변경, Spring Security 설정 방식 변경,
🔥 GraalVM 네이티브 이미지 지원으로 실행 속도 최적화!


🏗 2. Java 버전 업그레이드 (Java 17 이상 필요!)

Spring Boot 3.x는 Java 17 이상이 필수!
Java 8, 11, 16을 사용 중이라면 먼저 Java 17 또는 21로 업그레이드하세요!

Java 버전 확인 방법

java -version

📢 결과가 다음과 같이 나와야 합니다.

openjdk version "17.0.8" 2025-01-01

📌 Java 8이나 11이 표시된다면, Java 17 이상으로 업그레이드하세요!

💻 Java 17 설치 (Mac)

brew install openjdk@17

🖥 Java 17 설치 (Windows)

🔗 OpenJDK 다운로드에서 최신 LTS 버전(Java 17 or 21)을 다운로드하고 설치하세요.


🔄 3. javax → jakarta 패키지 변경 (중요!)

Spring Boot 3.x에서는 Jakarta EE 10을 사용하여 기존 javax 패키지가 jakarta로 변경되었습니다.

🔽 변경 전 (Spring Boot 2.x)

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class User {
    @Id
    private Long id;
    private String name;
}

🔼 변경 후 (Spring Boot 3.x)

import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class User {
    @Id
    private Long id;
    private String name;
}

해야 할 일:
🛠 코드에서 javax 패키지를 찾아 모두 jakarta로 변경하세요!


🔐 4. Spring Security 변경 (WebSecurityConfigurerAdapter 제거됨!)

Spring Boot 3.x에서는 Spring Security 6.x가 적용되면서,
❌ WebSecurityConfigurerAdapter가 완전히 제거되었습니다!
✅ 이제 SecurityFilterChain을 사용해야 합니다.

🔽 변경 전 (Spring Boot 2.x)

import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .anyRequest().authenticated();
    }
}

🔼 변경 후 (Spring Boot 3.x)

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.context.annotation.Bean;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/public/**").permitAll()
                .anyRequest().authenticated()
            )
            .formLogin(withDefaults());

        return http.build();
    }
}

해야 할 일:
🔄 WebSecurityConfigurerAdapter를 제거하고, SecurityFilterChain으로 변경하세요!


🚀 5. GraalVM 네이티브 이미지 지원 (서버리스 최적화!)

Spring Boot 3.x에서는 GraalVM을 활용한 네이티브 이미지 빌드가 가능합니다.
💡 네이티브 이미지는 실행 속도가 빠르고, 메모리 사용량이 적어 클라우드 환경에서 유리합니다.

💻 네이티브 이미지 빌드 방법

./mvnw -Pnative native:compile

장점:
⚡ 서버리스 환경에서 실행 속도 향상
🖥 메모리 사용량 절감


📊 6. Observability 지원 (Micrometer & OpenTelemetry)

Spring Boot 3.x에서는 Observability(관찰 가능성) 기능이 추가되었습니다.
Micrometer와 OpenTelemetry를 통해 애플리케이션 상태를 모니터링할 수 있습니다.

🛠 예제 코드

@Bean
MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
    return registry -> registry.config().commonTags("application", "my-app");
}

장점:
📊 시스템 성능 모니터링 가능
🔍 클라우드 네이티브 환경에서 활용 가능


🏁 7. Spring Boot 2.x → 3.x 업그레이드 체크리스트

1단계: build.gradle 또는 pom.xml 수정
2단계: Java 버전 확인 (Java 17 이상)
3단계: javax → jakarta 패키지 변경
4단계: Spring Security 설정 변경
5단계: GraalVM 네이티브 이미지 빌드 테스트


🎯 결론

Spring Boot 3.x는 더 빠르고, 가벼우며, 클라우드 친화적인 개발을 지원합니다.
Spring Boot 2.x에서 업그레이드하려면 Java 17 이상 사용, javax → jakarta 패키지 변경, Spring Security 설정 변경 등의 작업이 필요합니다.
지금 바로 프로젝트를 Spring Boot 3.x로 업그레이드하여 최신 기능을 활용해 보세요! 🚀


🔥 Spring Boot 3.x로 업그레이드할 준비 되셨나요?
📢 궁금한 점은 댓글로 남겨주세요! 😊