스프링 부트 공식 문서에서는 아래와 같이 설명함
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run". We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.
"Spring Boot는 단독 실행되는, 상용화 가능한 수준의 스프링 기반 애플리케이션을 쉽게 만들어 낼 수 있습니다. 최소한의 설정으로 스프링 플랫폼과 서드파티 라이브러리들을 사용할 수 있도록 하고 있습니다."
즉, 스프링 기반 애플리케이션을 쉽게 만들도록 도와줌
Automatic config for spring functionality
"스프링 기능을 위한 자동 설정을 지원한다."
Enable auto-configuration of the Spring Application Context, attempting to guess and configure beans that you are likely to need. Auto-configuration classes are usually applied based on your classpath and what beans you have defined.
"당신이 필요할 것 같은 빈들을 추측하고 설정하여 스프링 application context의 auto-configuration을 가능하게 한다. auto-configuration 클래스들은 대게 classpath와 당신이 정의한 빈을 바탕으로 적용된다. "
이름 | 역할 |
---|---|
@SpringBootConfiguration | Spring boot의 설정을 나타내는 어노테이션으로, Spring의 @Configuration을 대체 |
@EnableAutoConfiguration | 자동 설정의 핵심 어노테이션으로, 클래스 경로에 지정된 내용을 기반으로 설정 자동화를 수행 |
@ComponentScan | basePackages 프로퍼티 값에 별도의 경로를 설정하지 않으면 해당 어노테이션이 위치한 패키지가 루트 경로가 되어 빈으로 등록할 클래스들을 탐색 |
1. @ComponentScan
2. @EnableAutoConfiguration
즉, @EnableAutoConfiguration에 의해 spring.factories 안에 들어있는 수많은 자동 설정들이 조건에 따라 적용이 되어 수 많은 Bean이 생성되고, 자동 설정이 되는 것
이름 | 역할 |
---|---|
META-INF/spring.factories | 자동 설정 타깃 클래스 목록, 이곳에 선언된 클래스들이 @EnableAutoConfiguration 사용 시 자동 설정 타깃이 됨 |
META-INF/spring-configuration-metadata.json | 자동 설정에 사용할 프로퍼티 정의 파일. 미리 구현되어 있는 자동 설정에 프로퍼티만 주입해주면 됨. 별도의 환경설정 필요 없음 |
org/springframework/boot/autoconfigure | 미리 구현해놓은 자동 설정 리스트. 이름은 '{특정 설정의 이름}AutoConfiguration' 형식으로 지정되어 있으며 모두 자바 설정 방식을 따르고 있음 |
※ Spring을 사용했다면 수많은 bean과 설정 파일을 개발자가 직접 하나하나 등록해줘야 함
(1) Spring-boot-starter
웹 어플리케이션을 개발할 때 spring-web, spring-webmvc, jackson-databind 등과 같은 의존성이 필요함. 즉, Spring으로 웹 어플리케이션 개발 시 위와 같은 의존성들을 일일이 찾고, 호환되는 버전에 맞춰 의존성을 추가하는 번거로움이 존재. Spring Boot는 이런 번거로움을 줄이기 위해 Spring boot Starter라고 불리는 것을 도입.
starter-web은 spring-web, spring-webmvc, jackson-databind로 이루어져 있고, 의존성에 spring-boot-starter-web만 적어주면 web과 관련된 의존성들을 추가할 수 있음
(2) io.spring.dependency-management
스프링부트의 의존성을 관리해주는 플러그인, dependency manager가 관리하는 프로젝트들은 알아서 버전 관리를 해줌. 따라서 build 설정에 dependency에 대한 버전을 명시할 필요가 없음. Spring Boot 자체를 업그레이드하면 하위 종속성들도 일관된 방식으로 업그레이드됨. (직접 버전을 명시하는 경우 해당 버전으로 오버라이딩)
즉, Spring Boot의 dependency-management를 이용하여 단 한 줄로 수많은 프로젝트의 버전을 충돌 없이 관리할 수 있게 됨
Not War, Just Jar
WAR란?
- 웹 애플리케이션을 압축해 저장해놓은 파일
- Tomcat과 같은 WAS에서 돌아감
- 단독으로 실행은 불가하며 서버 컨테이너(was)에 의해 실행되어야 하므로 배포디스크립터(web.xml)가 담겨있음
- 실행 조건 : Spring으로 개발한 프로젝트를 배포하기 위해서는 WAR 파일과 WAS가 필요
--> 그렇기에, WAS 설정이 필요함
JAR란?
- Java ARchive
- 하나의 Application 기능이 가능하도록 java 파일을 압축하고 지원
- 엔터프라이즈 Java Bean(클래스 파일)과 EJB 전개 디스크립터를 포함한 EJB 모듈은 .jar 확장을 사용하여 JAR 파일로 압축
- 실행 조건 : Java 설치
즉, 스프링 부트가 Tomcat을 내장하면서, Servlet Container에 종속되던 Web Application의 문제를 해결하였음