DEV/SpringBoot

[Spring/SpringBoot] 스프링(Spring) vs 스프링부트(Spring Boot) 차이

강한 2026. 9. 10. 21:38

스프링 프레임워크와 스프링부트가 정확히 뭐가 다른지, 설정 방식과 서버 구동 방식을 중심으로 간단히 정리했습니다.


정리

스프링(Spring Framework)은 자바 기반 애플리케이션 개발을 위한 프레임워크로, DI, AOP, MVC 등 다양한 기능을 제공합니다.

  • DI: 객체가 필요한 걸 직접 만들지 않고 밖에서 넣어주는 것
    → “필요한 부품을 내가 직접 만드는 게 아니라 외부에서 받아서 사용하는 것”
  • AOP: 여러 곳에서 반복되는 기능을 따로 빼서 필요한 곳에 자동으로 적용하는 것
    → “로그나 트랜잭션 같은 공통 기능을 비즈니스 코드와 분리하는 것”
  • MVC: 프로그램 역할을 Controller / Model / View로 나눠서 관리하는 것
     Controller = 요청 처리, Model = 데이터·로직, View = 화면

스프링부트(Spring Boot)는 스프링을 기반으로 복잡한 설정을 자동화하고, 빠르게 애플리케이션을 개발할 수 있도록 지원하는 도구입니다.
따라서 스프링부트가 스프링을 대체하는 것이 아니라, 스프링을 보다 편리하게 사용할 수 있도록 도와주는 기술이라고 볼 수 있습니다.

 

차이 1. 설정 방식

**스프링(전통 방식)**은 필요한 빈(Bean)과 설정을 개발자가 직접 XML이나 @Configuration 클래스로 하나하나 등록해줘야 했습니다.

 
xml
<!-- 예전 스프링: applicationContext.xml -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="root"/>
</bean>

스프링부트는 클래스패스에 어떤 라이브러리가 있는지 보고 필요한 설정을 알아서 잡아줍니다(자동 구성, Auto Configuration). application.yml에 값만 몇 줄 적으면 끝입니다.

 
yaml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root

차이 2. 서버 구동 방식

스프링(전통 방식)으로 만든 웹 애플리케이션은 톰캣 같은 외부 WAS(Web Application Server)에 war 파일을 배포해서 실행하는 구조가 일반적이었습니다. 서버 설치와 설정을 따로 해야 했습니다.

스프링부트는 톰캣을 **내장(embedded)**하고 있어서, main() 메서드 하나만 실행하면 그 자체로 웹 서버가 됩니다.

 
java
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args); // 이 한 줄로 내장 톰캣이 뜸
    }
}

차이 3. 의존성 관리

스프링에서는 필요한 라이브러리마다 버전을 다 맞춰가며 하나씩 추가해야 했고, 버전 호환 문제가 자주 발생했습니다.

스프링부트는 스타터(starter) 의존성으로 관련 라이브러리를 한 번에, 서로 호환되는 버전으로 묶어서 제공합니다.

 
gradle
implementation 'org.springframework.boot:spring-boot-starter-web'
// 이 한 줄이 톰캣, 스프링 MVC, Jackson 등을 다 알아서 끌고 옴

정리하면

설정 개발자가 직접 (XML/Config 클래스) 자동 구성
서버 외부 WAS에 배포 내장 톰캣
의존성 개별 추가 스타터로 묶음
목적 프레임워크 자체 스프링을 빠르게 쓰기 위한 도구