2026-06-14 21:06
자바 백엔드 개발을 시작하면 가장 먼저 마주치는 혼란 중 하나가 바로 “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는 2003년 Rod Johnson이 발표한 Java 플랫폼용 오픈소스 애플리케이션 프레임워크입니다. 핵심 철학은 제어의 역전(IoC, Inversion of Control) 과 의존성 주입(DI, Dependency Injection) 입니다.
Spring Framework의 핵심 모듈 구성은 다음과 같습니다.
Spring Framework는 모든 것을 개발자가 직접 설정하고 조립하는 구조입니다. 강력하고 유연하지만, 그만큼 초기 설정 비용이 높고 XML 또는 Java Config 파일이 방대해지는 단점이 있었습니다.
Spring Boot는 2014년 Pivotal(현 VMware)이 공개한 프레임워크로, Spring Framework의 복잡한 설정 문제를 해결하기 위해 탄생했습니다. 핵심 철학은 “Convention over Configuration” (설정보다 관례) 입니다.
Spring Boot의 세 가지 핵심 원칙은 다음과 같습니다.
spring-boot-starter-web, spring-boot-starter-data-jpa 등 목적별 의존성 묶음을 제공합니다.java -jar로 실행 가능합니다.현재 최신 버전은 Spring Boot 3.x (Spring Framework 6.x 기반) 이며, Java 17을 최소 요구 버전으로 합니다.
가장 큰 차이점입니다. 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: updateSpring Boot는 spring-boot-starter-data-jpa가 클래스패스에 존재하면 DataSource, EntityManagerFactory, TransactionManager를 자동으로 생성합니다. 개발자는 application.yml에 접속 정보만 입력하면 됩니다.
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 라이브러리가 검증된 호환 버전 조합으로 함께 설치됩니다.
| 구분 | Spring Framework | Spring Boot |
|---|---|---|
| WAS(웹서버) | 외부 WAS 필요 (Tomcat, JBoss 등) | 내장 WAS 포함 (Tomcat/Jetty/Undertow) |
| 배포 방식 | WAR 파일 → WAS에 배포 | JAR 파일 → java -jar 단독 실행 |
| 실행 진입점 | web.xml → DispatcherServlet |
main() → SpringApplication.run() |
| 클라우드 친화성 | 낮음 (외부 서버 의존) | 높음 (컨테이너/도커 최적화) |
Spring Boot의 내장 서버 방식은 Docker 컨테이너 기반의 클라우드 네이티브 환경에 매우 유리합니다. CI/CD 파이프라인에서 JAR 파일 하나만 배포하면 되므로 운영 복잡도가 크게 줄어듭니다.
Spring Boot만의 독보적인 기능 중 하나가 Spring Boot Actuator입니다.
spring-boot-starter-actuator를 추가하면 별도 개발 없이 다음 엔드포인트가 즉시 활성화됩니다.
/actuator/health — 서비스 상태 확인/actuator/metrics — JVM 메모리, CPU, HTTP 요청 통계/actuator/env — 현재 적용된 환경 변수/actuator/loggers — 런타임 로그 레벨 변경/actuator/threaddump — 스레드 덤프Spring Framework 순수 사용 시에는 이 모든 기능을 직접 구현해야 합니다.
2022년 말 출시된 Spring Boot 3.0(Spring Framework 6.0 기반)은 단순한 버전 업이 아닌 패러다임 전환을 가져왔습니다.
마이그레이션 시 반드시 알아야 할 Breaking Changes:
javax.* 패키지가 모두 jakarta.*로 변경
javax.servlet → jakarta.servletjavax.persistence → jakarta.persistencejavax.validation → jakarta.validationSecurityFilterChain Bean 방식으로 완전 전환// 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();
}
}| 상황 | 권장 선택 | 이유 |
|---|---|---|
| 신규 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의 자동 설정이 마법처럼 작동하는 것처럼 보이지만, 내부 원리는 명확합니다.
@SpringBootApplication 어노테이션 안에 @EnableAutoConfiguration이 포함되어 있습니다.META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 파일에 등록된 수백 개의 AutoConfiguration 클래스 목록을 읽어들입니다.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 Framework와 Spring Boot는 경쟁 관계가 아닌 계층적 협력 관계입니다. 대부분의 신규 프로젝트에서 Spring Boot는 사실상 표준으로 자리 잡았지만, 그 기반에는 언제나 Spring Framework의 견고한 철학이 깔려 있습니다.
2026년 현재, Spring 생태계는 GraalVM Native Image, Virtual Threads(Project Loom), Spring AI 등 새로운 기술과의 통합을 통해 빠르게 진화하고 있습니다. Spring의 핵심 개념을 탄탄히 이해한 위에서 Spring Boot의 편리함을 활용하는 것이 가장 이상적인 접근 방식입니다.