Hello

스프링 프레임워크 vs 스프링 부트

by 볼빵빵오춘기

스프링 프레임워크(Spring Framework)

  • 스프링 프레임워크는 자바 플랫폼을 위한 종합적인 애플리케이션 프레임워크
  • 다양한 엔터프라이즈 애플리케이션을 개발하는 데 필요한 풍부한 기능을 제공

 

주요 특징

  • IoC 컨테이너: 객체의 생성과 의존성 관리를 책임지는 핵심 컴포넌트
  • AOP: 관점 지향 프로그래밍을 통해 공통 관심사(예: 로깅, 트랜잭션)를 모듈화
  • 데이터 접근: JDBC, JPA, Hibernate 등의 데이터 접근 기술을 지원
  • 트랜잭션 관리: 선언적 트랜잭션 관리를 제공
  • 웹 프레임워크: Spring MVC를 통해 웹 애플리케이션을 개발
  • 보안: Spring Security를 통해 인증 및 권한 부여 기능을 제공

 

스프링 부트(Spring Boot)

  • 스프링 부트는 스프링 프레임워크를 기반으로 한 확장 프로젝트
  • 스프링 애플리케이션의 초기 설정과 개발을 더 쉽고 빠르게 할 수 있도록 도와줌.
  • 설정을 최소화하고, 기본 설정을 제공하여 개발자가 더 중요한 비즈니스 로직에 집중할 수 있게 함.

 

주요 특징

  • 자동 설정: 대부분의 설정을 자동으로 처리하여 개발자가 설정 파일을 작성할 필요를 줄여줌.
  • 독립 실행형 애플리케이션: 내장 웹 서버(예: Tomcat, Jetty)를 통해 별도의 서버 배포 없이 애플리케이션을 실행할 수 있음.
  • 스타터 의존성: 특정 기능을 쉽게 사용할 수 있도록 필요한 의존성을 하나의 패키지로 제공하는 스타터 의존성.
  • 프로덕션 준비 기능: 모니터링, 메트릭, 외부 설정과 같은 프로덕션 준비 기능을 기본 제공.
  • Spring Initializr: 스프링 부트 프로젝트를 쉽게 시작할 수 있는 웹 기반 도구.

 

스프링 프레임워크와 스프링 부트의 비교

특징 스프링 프레임워크 스프링 부트
설정 XML 또는 자바 기반 설정 자동 설정, 최소 설정 필요
시작 복잡도 많은 설정이 필요할 수 있음 간단한 시작, 빠른 설정
애플리케이션 타입 전통적인 웹 애플리케이션, 엔터프라이즈 애플리케이션 독립 실행형 애플리케이션, 마이크로서비스
내장 서버 별도의 서버 필요 내장 서버 제공(Tomcat, Jetty 등)
의존성 관리 수동으로 설정해야 함 스타터 의존성으로 간편한 관리
배포 WAR 파일로 서버에 배포 JAR 파일로 독립 실행 가능
생산성 설정 및 초기 설정이 복잡할 수 있음 빠른 개발, 초기 설정이 간단
프로덕션 준비 기능 별도 설정 필요 기본 제공 (모니터링, 메트릭 등)

 

설정 비교 예시

스프링 프레임워크 애플리케이션 설정 (XML)

<!-- applicationContext.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="repository" class="com.example.Repository"/>
    <bean id="service" class="com.example.Service">
        <constructor-arg ref="repository"/>
    </bean>

</beans>

 

스프링 부트 애플리케이션 설정 (Java Config) & 스프링 부트 애플리케이션의 종속성 설정 (Maven)

// MainApplication.java
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
}
<!-- pom.xml -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

 

정리하자면

  • 스프링 프레임워크는 다양한 엔터프라이즈 애플리케이션 개발을 위한 풍부한 기능을 제공하며, 세밀한 설정과 제어가 가능하지만 초기 설정이 복잡
  • 스프링 부트는 스프링 프레임워크를 기반으로 하여, 설정을 최소화하고 간편한 시작을 지원하며, 독립 실행형 애플리케이션 개발에 최적화되어 있다. 스프링 부트는 빠른 개발과 생산성을 중시하는 프로젝트에 적합

 

시작 복잡도 비교 예시

스프링 프레임 워크 시작 복잡도 예시

스프링 프레임 워크 시작 복잡도 예시 프로젝트 구조

  • Maven 의존성 (pom.xml)
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.9</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.9</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

 

 

  • Spring 설정 파일 (web.xml)
<!-- web.xml -->
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

 

  • Spring 설정 파일 (spring-servlet.xml)
<!-- spring-servlet.xml -->
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <context:component-scan base-package="com.example" />
    <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

 

 

  • 컨트롤러 클래스 (HelloController.java)
// HelloController.java
package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @RequestMapping("/hello")
    @ResponseBody
    public String sayHello() {
        return "Hello, World!";
    }
}

 

스프링 부트 시작 복잡도 예시

스프링 부트 시작 복잡도 예시 프로젝트 구조

 

  • Maven 의존성 (pom.xml)
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

 

  • Spring Boot 애플리케이션 클래스 (DemoApplication.java)
// DemoApplication.java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

 

  • 컨트롤러 클래스 (HelloController.java)
// HelloController.java
package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

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

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기