Spring Boot vs Spring Framework: 무엇이 다를까? 차이점부터 입문까지 완벽 정리

안녕하세요.

Spring Boot vs Spring Framework: 무엇이 다를까? 차이점부터 입문까지 완벽 정리 이미지 1

자바 백엔드 개발자의 길을 걷기 시작하면 반드시 마주하게 되는 두 이름이 있습니다. 바로 Spring FrameworkSpring Boot입니다. “스프링을 공부해야 하나요, 아니면 스프링 부트를 공부해야 하나요?” 혹은 “스프링 부트가 스프링의 다음 버전인가요?”와 같은 질문은 커뮤니티에서 끊이지 않는 단골 주제입니다.

결론부터 말씀드리면, 스프링 부트는 스프링 프레임워크를 대체하는 것이 아니라, 스프링 프레임워크를 훨씬 더 쉽고 빠르게 사용할 수 있게 도와주는 ‘도구 상자’와 같습니다. 오늘은 이 둘의 근본적인 차이점과 왜 현대의 자바 개발이 스프링 부트를 중심으로 돌아가는지 깊이 있게 파헤쳐 보겠습니다.


1. Spring Framework의 탄생과 고충

Spring Framework는 2000년대 초반, 당시 엔터프라이즈 자바 개발의 표준이었던 EJB(Enterprise JavaBeans)의 복잡성에 반기를 들며 등장했습니다. “순수한 자바 객체(POJO)를 사용해 가볍게 개발하자”는 철학은 혁명적이었고, IoC(제어의 역전)와 DI(의존성 주입)라는 개념을 통해 객체 지향적인 코드의 정수를 보여주었습니다.

하지만 시간이 흐르며 스프링 프레임워크 자체도 ‘비대함’이라는 문제에 직면하게 되었습니다. 프로젝트를 하나 시작하려면 설정해야 할 것이 너무나 많았습니다.

스프링 프레임워크의 고전적인 설정 방식

과거 스프링 프로젝트에서는 다음과 같은 XML 설정을 수백 줄씩 작성해야 했습니다.

<!-- 과거의 XML 기반 Spring 설정 예시 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/mydb" />
    <property name="username" value="root" />
    <property name="password" value="password" />
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath:mappers/*.xml" />
</bean>

<mvc:annotation-driven />
<context:component-scan base-package="com.example.controller" />

이런 설정 과정은 매우 고통스러웠고, 설정 오류 하나로 며칠을 허비하는 일도 빈번했습니다. 이를 두고 개발자들은 “설정 지옥(Configuration Hell)”이라고 불렀습니다.


2. Spring Boot의 등장: “설정보다는 관례(CoC)”

Spring Boot는 바로 이 ‘설정 지옥’을 해결하기 위해 2014년에 등장했습니다. 스프링 부트의 핵심 철학은 “Opinionated (자기주장이 강한)” 프레임워크라는 점입니다. “이런 라이브러리를 쓴다면 아마 이런 설정이 필요하겠지?”라고 프레임워크가 미리 판단해서 자동으로 설정해주는 것입니다.

2.1 자동 설정 (Auto Configuration)

스프링 부트 프로젝트의 메인 클래스에는 @SpringBootApplication이라는 어노테이션이 붙습니다. 이 어노테이션 하나가 수많은 XML 설정을 대신합니다. 클래스패스에 h2 라이브러리가 있으면 내장 DB를 자동으로 구성하고, spring-webmvc가 있으면 DispatcherServlet을 자동으로 등록합니다.

2.2 스타터 의존성 (Starter Dependencies)

이전에는 웹 개발을 위해 필요한 여러 라이브러리의 버전 궁합을 일일이 맞춰야 했습니다. 하지만 스프링 부트에서는 spring-boot-starter-web 하나만 추가하면 모든 관련 라이브러리가 최적의 버전으로 한꺼번에 로드됩니다.

2.3 내장 서버 (Embedded Server)

스프링 프레임워크 시절에는 WAS(Tomcat 등)를 별도로 설치하고 WAR 파일을 생성하여 배포해야 했습니다. 스프링 부트는 Tomcat을 내장하고 있어, 별도의 서버 설치 없이 main 메서드 실행만으로 웹 서비스를 시작할 수 있습니다.


3. Spring vs Spring Boot 핵심 비교

비교 항목Spring FrameworkSpring Boot
의존성 관리각 라이브러리의 버전을 직접 관리Starter를 통한 버전 자동 관리
설정 방식XML 또는 Java Config (복잡함)Auto Configuration (자동화)
WAS (서버)별도의 외장 WAS 설치 필요내장 서버(Tomcat 등) 탑재
배포 형태WAR 파일 형태 위주단독 실행 가능한 JAR 파일
목표엔터프라이즈 기능 제공Spring 기반 앱의 신속한 개발

4. 실무 코드 비교: Hello World 출력하기

두 프레임워크의 생산성 차이를 가장 잘 보여주는 것은 코드의 단순함입니다.

코드 예제 1: Spring Boot에서의 컨트롤러 작성

스프링 부트에서는 별도의 설정 파일 없이 어노테이션만으로 즉시 웹 API를 만들 수 있습니다.

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, Spring Boot!";
    }
}

이 코드를 작성하고 애플리케이션을 실행하면, 8080 포트로 서버가 즉시 뜹니다. 스프링 프레임워크였다면 이 5줄의 코드를 위해 수십 줄의 web.xmlservlet-context.xml 설정이 필요했을 것입니다.

코드 예제 2: Spring Boot 메인 클래스

모든 설정의 시작점입니다. @SpringBootApplication 어노테이션이 마법을 부리는 지점입니다.

@SpringBootApplication
public class MySimpleApplication {

    public static void main(String[] args) {
        SpringApplication.run(MySimpleApplication.class, args);
    }
}

5. 무엇을 배워야 할까요?

가장 많이 받는 질문인 “무엇을 먼저 배워야 하나요?”에 대한 제 답변은 “스프링 부트로 시작하되, 스프링의 원리를 파고들어라”입니다.

스프링 부트의 자동 설정(Magic) 뒤에는 결국 스프링 프레임워크의 핵심 기술인 DI, AOP 등이 숨어 있습니다. 부트로 빠르게 결과물을 만들어보며 흥미를 느끼고, 프로젝트가 커지면서 발생하는 복잡한 문제들을 해결하기 위해 스프링의 심오한 원리들을 하나씩 학습해 나가는 것이 가장 효율적인 로드맵입니다.


Spring Boot vs Spring Framework: 무엇이 다를까? 차이점부터 입문까지 완벽 정리 이미지 2

결론

Spring Boot는 Spring Framework의 복잡함을 걷어내고, 개발자가 ‘비즈니스 로직’에만 집중할 수 있게 해주는 최고의 파트너입니다. 오늘날 대부분의 신규 프로젝트가 스프링 부트로 시작되는 이유는 명확합니다. 빠르고, 강력하며, 안정적이기 때문입니다.

만약 여러분이 자바 개발자로 성공하고 싶다면, 스프링 부트라는 날개를 달고 실전 프로젝트에 뛰어들어 보시길 권장합니다. 다음 포스팅에서는 구체적으로 Spring Boot를 사용하면 좋은 5가지 이유에 대해 더욱 상세히 다뤄보겠습니다.

오늘의 글이 스프링의 세계에 첫발을 내딛는 여러분에게 작은 이정표가 되었기를 바랍니다. 감사합니다!

관련 글 보기