본문 바로가기
Spring Web MVC

스프링 부트는 무엇인가?

by DevNona 2025. 6. 13.

이번 포스팅에서 스프링 부트 공식 문서를 통해 스프링 부트는 무엇이며 어떤 기능을 하는 것인지 알아보겠습니다. 스프링 부트 3.5.0 버전의 공식 문서를 참고하여 작성합니다.

스프링 부트 개요

스프링 부트를 사용하면 실행 가능한 독립 실행형, 프로덕션 등급의 스프링 기반 애플리케이션을 만들 수 있도록 도와줍니다. 스프링 개발사 측에서 스프링 플랫폼과 서드-파티 라이브러리에 대한 주관적인 견해가 있기 때문에 최소한의 번거로움으로 시작할 수 있습니다. 대부분의 스프링 부트 에플리케이션들은 아주 약간의 스프링 설정만 필요합니다.

스프링 부트의 주요 목표는 다음과 같습니다:

  • 모든 스프링 개발에 있어 매우 빠르고 폭넓은 접근성을 갖춘 시작 환경을 제공한다.
  • 초기 설정이나 기본 동작은 명확하게 제공하되, 사용자의 요구사항이 달라지면 재빨리 대응한다.
  • 대규모 프로젝트에 공통적으로 필요한 다양한 비기능적 기능을 제공한다. (예를 들어, embedded server, security, metrics, health checks 그리고 externalized configuration).
  • 네이티브 이미지를 타겟으로 하지 않는 경우 코드 생성이 전혀 없고 XML 구성도 필요하지 않습니다.

Spring Boot로 개발하기

Build system

Spring Boot의 각 릴리스에서는 지원하는 종속성의 정리된 목록을 제공합니다. 실제로는 Spring Boot가 이를 관리하므로 빌드 구성에서 이러한 종속성에 대한 버전을 제공할 필요가 없습니다. Spring Boot 자체를 업그레이드하면 이러한 종속성도 일관된 방식으로 업그레이드됩니다.

추가로 스타터를 지원합니다. 스타터는 애플리케이션에 포함할 수 있는 편리한 종속성 설명자 세트입니다. 스타터에는 프로젝트를 신속하게 시작하고 일관되고 지원되는 관리형 전이적 종속성 집합을 갖는 데 필요한 많은 종속성이 포함되어 있습니다.

Auto-configuration

Spring Boot 자동 구성은 사용자가 추가한 jar 종속성에 따라 Spring 애플리케이션을 자동으로 구성하려고 시도합니다. 이를 통해 초기 기본 동작을 제공받습니다.

Using the @SpringBootApplication Annotation

많은 Spring Boot 개발자는 앱에서 자동 구성과 구성 요소 검사를 사용하고 "애플리케이션 클래스"에서 추가 구성을 정의할 수 있기를 원합니다. 단일 @SpringBootApplication 주석을 사용하여 다음 세 가지 기능을 활성화할 수 있습니다.

  • @EnableAutoConfiguration: Spring Boot의 자동 구성 메커니즘을 활성화합니다.
  • @ComponentScan: 애플리케이션이 있는 패키지에서 @Component 스캔을 활성화합니다.
  • @SpringBootConfiguration: 컨텍스트에서 추가 빈을 등록하거나 추가 구성 클래스를 가져올 수 있도록 합니다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

// Same as @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
@SpringBootApplication
public class MyApplication {

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

}

Core Features

SpringApplication

SpringApplication 클래스는 main() 메서드에서 시작되는 Spring 애플리케이션을 부트스트랩하는 편리한 방법을 제공합니다.

공식 문서를 보면 부트스트랩 외에도 실행과 SpringApplication 관련된 여러 설정을 할 수 있습니다.

Externalized Configuration

Spring Boot를 사용하면 구성을 외부화하여 다양한 환경에서 동일한 애플리케이션 코드로 작업할 수 있습니다. Java 속성 파일, YAML 파일, 환경 변수, 명령줄 인수를 포함한 다양한 외부 구성 소스를 사용할 수 있습니다.

외부 설정 파일의 값을 가져오는 @Value 어노테이션도 이 기능을 통해 사용하는 것입니다.

Profiles

Spring Profiles는 애플리케이션 구성의 일부를 분리하고 특정 환경에서만 사용할 수 있도록 하는 방법을 제공합니다.

개발 환경과 프로덕션 환경을 나누거나 할 때 사용하는 기능입니다.

Logging

Spring Boot는 모든 내부 로깅에 Commons Logging을 사용하지만 기본 로그 구현은 그대로 둡니다. Java Util Logging, Log4j2 및 Logback에 대한 기본 구성이 제공됩니다. 기본적으로 스타터를 사용하는 경우 로깅에는 Logback이 사용됩니다.

NOTE
Commons Logging은 Java에서 로깅에 사용하는 추상화 라이브러리입니다. 다양한 로깅 프레임워크(SLF4J, Log4j, java.util.loggin 등)를 직접 의존하지 않고 사용할 수 있도록 중간 계층 역할을 합니다.

이외의 Core Features

이외에도 Spring Boot는 AOP, JSON, Task Execution and Scheduling에 대한 auto-configuration을 제공합니다.

Servlet Web Applications

서블릿 기반 웹 애플리케이션을 구축하려면 Spring MVC 또는 Jersey에 대한 Spring Boot의 auto-configuration을 활용할 수 있습니다.

서블릿 뿐만 아니라 다양한 기술에 대해 Spring Boot의 auto-configuration을 활용할 수 있지만 대표적으로 사용하는 Servlet Web Applications에 알아보겠습니다.

Spring MVC Auto-configuration

Spring Boot는 대부분 애플리케이션과 잘 작동하는 Spring MVC에 대한 자동 구성을 제공합니다. 이는 @EnableWebMvc의 필요성을 대체하며, 둘은 함께 사용될 수 없습니다. Spring MVC의 기본값 외에도 자동 구성은 다음과 같은 기능을 제공합니다.

  • ContentNegotiatingViewResolver 및 BeanNameViewResolver 빈을 포함합니다.
  • WebJars 지원을 포함한 정적 리소스 제공 지원
  • Converter, GenericConverter, Formatter 빈의 자동 등록
  • HttpMessageConverters 지원
  • MessageCodesResolver 자동 등록
  • 정적 index.html 지원
  • ConfigurableWebBindingInitializer 빈의 자동 사용

Embedded Servlet Container Support

서블릿 애플리케이션의 경우, Spring Boot는 내장된 Tomcat, Jetty, Undertow 서버에 대한 지원을 포함합니다. 대부분의 개발자는 적절한 스타터를 사용하여 완전히 구성된 인스턴스를 얻습니다. 기본적으로 내장된 서버는 포트 8080에서 HTTP 요청을 수신합니다.

Servlets, Filters, and Listeners

내장된 서블릿 컨테이너를 사용하는 경우 Spring 빈을 사용하거나 서블릿 구성 요소를 스캔하여 서블릿 사양에서 서블릿, 필터 및 모든 리스너(예: HttpSessionListener)를 등록할 수 있습니다.

Registering Servlets, Filters, and Listeners as Spring Beans

Spring 빈인 모든 Servlet, Filter 또는 servlet *Listener 인스턴스는 내장된 컨테이너에 등록됩니다. 이 기능은 구성 중에 application.properties에서 값을 참조하려는 경우에 특히 편리할 수 있습니다.

결론

스프링 부트는 다양한 영역에서 시작 환경에 대한 auto-configuration을 통해 빠른 개발을 시작하게 해주며 사용자의 요구사항에 따라 유연하게 설정을 바꿀 수 있도록 합니다.

'Spring Web MVC' 카테고리의 다른 글

Special Bean Types  (0) 2025.06.18
Context Hierarchy  (0) 2025.06.17
DispatcherServlet과 스프링 부트와 관계  (0) 2025.06.15