Spring Boot vs Spring Framework: 차이점 완벽 정리 (2026년 최신판)


왜 이 둘을 헷갈려 하는가?

자바 백엔드 개발을 시작하면 가장 먼저 마주치는 혼란 중 하나가 바로 “Spring Framework”와 “Spring Boot” 사이의 관계입니다. 채용공고에는 “Spring 경험자 우대”라고 쓰여 있고, 막상 실무에서는 “Spring Boot로 개발한다”는 말을 듣게 됩니다. 둘은 같은 것일까요, 다른 것일까요?

결론부터 말하자면, Spring Boot는 Spring Framework 위에서 동작하는 서브 프레임워크입니다. Spring Framework가 ‘레고 블록의 집합’이라면, Spring Boot는 ‘조립 설명서와 공구 세트가 포함된 레고 스타터 키트’라고 비유할 수 있습니다. 블록(Spring Framework)은 동일하지만, Spring Boot가 조립(설정)의 수고를 대폭 줄여주는 것입니다.

이 글에서는 Spring Framework와 Spring Boot의 핵심 차이점을 6가지 관점에서 팩트 기반으로 명확하게 정리합니다.


Spring Framework란 무엇인가?

Spring Framework는 2003년 Rod Johnson이 발표한 Java 플랫폼용 오픈소스 애플리케이션 프레임워크입니다. 핵심 철학은 제어의 역전(IoC, Inversion of Control)의존성 주입(DI, Dependency Injection) 입니다.

Spring Framework의 핵심 모듈 구성은 다음과 같습니다.

  • Spring Core: IoC 컨테이너, DI 기반의 핵심 모듈
  • Spring MVC: 웹 애플리케이션을 위한 Model-View-Controller 패턴 구현체
  • Spring Data: JPA, JDBC 등 데이터 접근 계층 추상화
  • Spring Security: 인증/인가 처리를 위한 보안 모듈
  • Spring AOP: 관점 지향 프로그래밍(트랜잭션, 로깅 등) 지원
  • Spring Batch: 대용량 배치 처리 지원

Spring Framework는 모든 것을 개발자가 직접 설정하고 조립하는 구조입니다. 강력하고 유연하지만, 그만큼 초기 설정 비용이 높고 XML 또는 Java Config 파일이 방대해지는 단점이 있었습니다.


Spring Boot란 무엇인가?

Spring Boot는 2014년 Pivotal(현 VMware)이 공개한 프레임워크로, Spring Framework의 복잡한 설정 문제를 해결하기 위해 탄생했습니다. 핵심 철학은 “Convention over Configuration” (설정보다 관례) 입니다.

Spring Boot의 세 가지 핵심 원칙은 다음과 같습니다.

  1. 자동 설정(Auto-Configuration): 클래스패스에 있는 라이브러리를 감지하여 자동으로 Bean을 등록합니다.
  2. 스타터 의존성(Starter Dependencies): spring-boot-starter-web, spring-boot-starter-data-jpa 등 목적별 의존성 묶음을 제공합니다.
  3. 내장 서버(Embedded Server): Tomcat, Jetty, Undertow 등 WAS가 내장되어 별도의 서버 설치 없이 java -jar로 실행 가능합니다.

현재 최신 버전은 Spring Boot 3.x (Spring Framework 6.x 기반) 이며, Java 17을 최소 요구 버전으로 합니다.


6가지 핵심 차이점 비교

1. 설정 방식 (Configuration)

가장 큰 차이점입니다. Spring Framework에서는 개발자가 모든 Bean을 직접 등록하고 설정해야 했습니다.

Spring Framework — DataSource 수동 설정 예시:

<!-- applicationContext.xml -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="root"/>
    <property name="password" value="password"/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="com.example.domain"/>
    <!-- ... 추가 설정 10줄 이상 ... -->
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

Spring Boot — DataSource 자동 설정 예시:

# application.yml — 이것이 전부입니다
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: password
  jpa:
    hibernate:
      ddl-auto: update

Spring Boot는 spring-boot-starter-data-jpa가 클래스패스에 존재하면 DataSource, EntityManagerFactory, TransactionManager를 자동으로 생성합니다. 개발자는 application.yml에 접속 정보만 입력하면 됩니다.


2. 의존성 관리 (Dependency Management)

Spring Framework에서는 사용하는 라이브러리 간의 버전 호환성을 개발자가 직접 관리해야 했습니다. Spring MVC, Hibernate, Jackson 등 수십 개의 라이브러리 버전이 서로 맞는지 확인하는 것은 상당한 노하우가 필요한 작업이었습니다.

Spring Boot는 스타터(Starter) 메커니즘과 BOM(Bill of Materials) 을 통해 이 문제를 해결합니다.

<!-- Spring Boot — 버전 명시 없이도 호환되는 버전이 자동 적용됨 -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!-- 버전 없음 — parent BOM이 관리 -->
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
</dependencies>

spring-boot-starter-web 하나를 추가하면 Spring MVC, Tomcat, Jackson, Validation 라이브러리가 검증된 호환 버전 조합으로 함께 설치됩니다.


3. 실행 환경 (Execution Environment)

구분 Spring Framework Spring Boot
WAS(웹서버) 외부 WAS 필요 (Tomcat, JBoss 등) 내장 WAS 포함 (Tomcat/Jetty/Undertow)
배포 방식 WAR 파일 → WAS에 배포 JAR 파일 → java -jar 단독 실행
실행 진입점 web.xmlDispatcherServlet main()SpringApplication.run()
클라우드 친화성 낮음 (외부 서버 의존) 높음 (컨테이너/도커 최적화)

Spring Boot의 내장 서버 방식은 Docker 컨테이너 기반의 클라우드 네이티브 환경에 매우 유리합니다. CI/CD 파이프라인에서 JAR 파일 하나만 배포하면 되므로 운영 복잡도가 크게 줄어듭니다.


4. 애플리케이션 진단 (Actuator)

Spring Boot만의 독보적인 기능 중 하나가 Spring Boot Actuator입니다.

spring-boot-starter-actuator를 추가하면 별도 개발 없이 다음 엔드포인트가 즉시 활성화됩니다.

  • /actuator/health — 서비스 상태 확인
  • /actuator/metrics — JVM 메모리, CPU, HTTP 요청 통계
  • /actuator/env — 현재 적용된 환경 변수
  • /actuator/loggers — 런타임 로그 레벨 변경
  • /actuator/threaddump — 스레드 덤프

Spring Framework 순수 사용 시에는 이 모든 기능을 직접 구현해야 합니다.


5. Spring Boot 3.x / Spring Framework 6의 주요 변화

2022년 말 출시된 Spring Boot 3.0(Spring Framework 6.0 기반)은 단순한 버전 업이 아닌 패러다임 전환을 가져왔습니다.

마이그레이션 시 반드시 알아야 할 Breaking Changes:

  • Java 17 최소 요구: Java 8/11 지원 종료, Java 17이 최소 버전
  • Jakarta EE 9+ 전환: javax.* 패키지가 모두 jakarta.*로 변경
    • javax.servletjakarta.servlet
    • javax.persistencejakarta.persistence
    • javax.validationjakarta.validation
  • WebSecurityConfigurerAdapter 제거: Spring Security 설정 방식이 SecurityFilterChain Bean 방식으로 완전 전환
  • GraalVM Native Image 공식 지원: AOT(Ahead-of-Time) 컴파일로 JVM 없이 네이티브 실행 파일 생성 가능
  • Observability 강화: Micrometer 기반 메트릭 수집, OpenTelemetry 네이티브 지원
// Spring Boot 2.x 방식 (Deprecated → 3.x에서 제거됨)
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/admin").hasRole("ADMIN");
    }
}

// Spring Boot 3.x 방식 (현재 권장)
@Configuration
public class SecurityConfig {
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(auth ->
            auth.requestMatchers("/admin").hasRole("ADMIN")
        );
        return http.build();
    }
}

6. 언제 무엇을 선택해야 하는가?

상황 권장 선택 이유
신규 REST API / 마이크로서비스 개발 Spring Boot 빠른 개발, 내장 서버, 클라우드 친화적
스타트업 / MVP / PoC Spring Boot 설정 최소화, 빠른 프로토타이핑
기존 레거시 시스템 유지보수 Spring Framework 기존 XML 설정 기반 인프라 호환
대규모 엔터프라이즈 (세밀한 제어 필요) Spring Framework 설정 완전 커스터마이징 가능
Docker / Kubernetes 환경 Spring Boot JAR 패키징, 내장 서버 최적화
금융권 레거시 연동 (WAS 고정) Spring Framework JBoss/WebLogic 등 외부 WAS 배포 필수 시

Spring Boot Auto-Configuration 동작 원리

Spring Boot의 자동 설정이 마법처럼 작동하는 것처럼 보이지만, 내부 원리는 명확합니다.

  1. @SpringBootApplication 어노테이션 안에 @EnableAutoConfiguration이 포함되어 있습니다.
  2. Spring Boot는 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 파일에 등록된 수백 개의 AutoConfiguration 클래스 목록을 읽어들입니다.
  3. AutoConfiguration 클래스는 @ConditionalOnClass, @ConditionalOnMissingBean 등의 조건부 어노테이션으로 클래스패스에 해당 라이브러리가 있을 때만 동작합니다.
// Spring Boot 내부 DataSourceAutoConfiguration 동작 방식 (개념 예시)
@AutoConfiguration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@ConditionalOnMissingBean(type = "io.r2dbc.spi.ConnectionFactory")
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration {
    // DataSource Bean이 없을 때만 자동 생성
    @Bean
    @ConditionalOnMissingBean
    public DataSource dataSource(DataSourceProperties properties) {
        return properties.initializeDataSourceBuilder().build();
    }
}

핵심은 “개발자가 직접 Bean을 등록하면 자동 설정은 물러난다” 는 점입니다. 즉, 자동 설정은 기본값을 제공할 뿐, 커스터마이징이 항상 우선순위를 가집니다.


마무리: Spring의 생태계는 계속 진화한다

Spring Framework와 Spring Boot는 경쟁 관계가 아닌 계층적 협력 관계입니다. 대부분의 신규 프로젝트에서 Spring Boot는 사실상 표준으로 자리 잡았지만, 그 기반에는 언제나 Spring Framework의 견고한 철학이 깔려 있습니다.

2026년 현재, Spring 생태계는 GraalVM Native Image, Virtual Threads(Project Loom), Spring AI 등 새로운 기술과의 통합을 통해 빠르게 진화하고 있습니다. Spring의 핵심 개념을 탄탄히 이해한 위에서 Spring Boot의 편리함을 활용하는 것이 가장 이상적인 접근 방식입니다.


'Spring 실전 가이드' 시리즈 (1부작)

  1. 1부. Spring Boot vs Spring Framework: 차이점 완벽 정리 (2026년 최신판) 현재 글

자주 묻는 질문

Q.Spring Boot를 쓰면 Spring Framework를 몰라도 되나요?
A.아닙니다. Spring Boot는 Spring Framework의 설정을 자동화해줄 뿐, 내부는 여전히 Spring Framework가 동작합니다. DI, IoC, AOP, 트랜잭션 관리 등 Spring Framework의 핵심 개념을 이해해야 Spring Boot도 제대로 사용할 수 있습니다. 특히 문제 발생 시 디버깅은 Spring Framework 수준의 지식이 필수입니다.
Q.Spring Boot 3.x로 마이그레이션할 때 가장 큰 작업은 무엇인가요?
A.javax.* → jakarta.* 패키지 전환이 가장 광범위한 변경입니다. import 문뿐 아니라 커스텀 필터, 인터셉터, JPA 엔티티의 어노테이션까지 전부 영향을 받습니다. 특히 Hibernate 5 → 6 업그레이드와 함께 진행되는 경우 hbm2ddl 설정 변경도 확인이 필요합니다.
Q.금융권 시스템에서 Spring Boot를 사용할 수 있나요?
A.충분히 가능합니다. 단, 일부 금융기관에서는 외부 WAS(WebLogic, JEUS 등)에 WAR 파일로 배포하는 정책을 유지하는 경우가 있습니다. 이 경우에도 Spring Boot는 SpringBootServletInitializer를 상속하여 WAR 배포가 가능하며, 내장 서버를 비활성화하고 외부 WAS를 사용하는 방식도 공식 지원합니다.
#개발#Java#Spring#SpringBoot#백엔드

관련 글

타입스크립트 vs 자바스크립트, 2026년 개발 생태계의 승자와 선택 기준은?
2026.05.30
효율적인 협업을 위한 Git 브랜칭 전략: Git Flow vs GitHub Flow vs Trunk-based
2026.05.26
데이터 모델의 이해
2023.11.28
오라클 ntile을 이용한 균등 배정하는 방법
2023.11.20
데이터 모델링 속성 특성, 구성방식에 따른 분류
2023.11.07
오라클 redo, alert, archive, trace 로그
2023.08.13

Written by@[namu]
모바일, 스마트폰, 금융, 재테크, 생활 정보 등