스프링(Spring)과 스프링 부트(Spring Boot)의 차이

Kim Sung Kyu·2021년 5월 8일
0

Spring🌱

목록 보기
2/3
post-thumbnail

스프링 부트(Spring Boot)란?

스프링 부트 공식 문서에서는 아래와 같이 설명함

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는 단독 실행되는, 상용화 가능한 수준의 스프링 기반 애플리케이션을 쉽게 만들어 낼 수 있습니다. 최소한의 설정으로 스프링 플랫폼과 서드파티 라이브러리들을 사용할 수 있도록 하고 있습니다."

즉, 스프링 기반 애플리케이션쉽게 만들도록 도와줌


스프링 부트(Spring Boot)의 특징

Auto Configuration(자동 설정)

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와 당신이 정의한 빈을 바탕으로 적용된다. "

자동 설정 관련 어노테이션

이름역할
@SpringBootConfigurationSpring boot의 설정을 나타내는 어노테이션으로, Spring의 @Configuration을 대체
@EnableAutoConfiguration자동 설정의 핵심 어노테이션으로, 클래스 경로에 지정된 내용을 기반으로 설정 자동화를 수행
@ComponentScanbasePackages 프로퍼티 값에 별도의 경로를 설정하지 않으면 해당 어노테이션이 위치한 패키지가 루트 경로가 되어 빈으로 등록할 클래스들을 탐색

Spring Boot가 Bean을 등록하는 과정

1. @ComponentScan

  • Spring과 마찬가지로 component-scan을 통해 component를 찾고 bean 생성을 진행
    이 과정에서 우리가 설정한 bean들이 생성됨
  • @component 어노테이션을 선언한 클래스들(Controller, RestController, Service, Repository, @Configuration에 등록한 @Bean 등)

2. @EnableAutoConfiguration

  • @EnableAutoConfiguration으로 추가적인 Bean들을 읽어서 등록
  • 메인 클래스(@SpringBootApplication)를 실행하면, @EnableAutoConfiguration에 의해 spring.factories 안에 들어있는 수많은 자동 설정들이 조건에 따라 적용이 되어 수많은 Bean이 생성, 스프링 부트 애플리케이션이 실행

즉, @EnableAutoConfiguration에 의해 spring.factories 안에 들어있는 수많은 자동 설정들이 조건에 따라 적용이 되어 수 많은 Bean이 생성되고, 자동 설정이 되는 것

Bean의 등록과 자동 설정에 필요한 파일

  • 모두 Spring-boot-AutoConfiguration에 미리 정의되어 있음
  • 지정된 프로퍼티 값을 사용하여 설정 클래스 내부의 값들을 변경 가능
이름역할
META-INF/spring.factories자동 설정 타깃 클래스 목록, 이곳에 선언된 클래스들이 @EnableAutoConfiguration 사용 시 자동 설정 타깃이 됨
META-INF/spring-configuration-metadata.json자동 설정에 사용할 프로퍼티 정의 파일. 미리 구현되어 있는 자동 설정에 프로퍼티만 주입해주면 됨. 별도의 환경설정 필요 없음
org/springframework/boot/autoconfigure미리 구현해놓은 자동 설정 리스트. 이름은 '{특정 설정의 이름}AutoConfiguration' 형식으로 지정되어 있으며 모두 자바 설정 방식을 따르고 있음
※ Spring을 사용했다면 수많은 bean과 설정 파일을 개발자가 직접 하나하나 등록해줘야 함

Easy dependency Management(쉬운 의존성 관리)

(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를 이용하여 단 한 줄로 수많은 프로젝트의 버전을 충돌 없이 관리할 수 있게 됨


Embedded Servlet Container Support(내장 서블릿 컨테이너) = 내장 서버

Not War, Just Jar

  • Spring을 이용한 프로젝트 : WAR(Web application ARchive)파일로 배포할 수 있음

WAR란?

  • 웹 애플리케이션을 압축해 저장해놓은 파일
  • Tomcat과 같은 WAS에서 돌아감
  • 단독으로 실행은 불가하며 서버 컨테이너(was)에 의해 실행되어야 하므로 배포디스크립터(web.xml)가 담겨있음
  • 실행 조건 : Spring으로 개발한 프로젝트를 배포하기 위해서는 WAR 파일과 WAS가 필요
    --> 그렇기에, WAS 설정이 필요함

  • Spring Boot를 이용한 프로젝트 : 스프링 부트 내부에 Tomcat이나 Jetty같은 내장 서버를 가지고 있기 때문에 JAR파일로 배포가능, Spring Boot로 개발한 프로젝트를 배포하기 위해서는 단순히 JAR파일만 필요

JAR란?

  • Java ARchive
  • 하나의 Application 기능이 가능하도록 java 파일을 압축하고 지원
  • 엔터프라이즈 Java Bean(클래스 파일)과 EJB 전개 디스크립터를 포함한 EJB 모듈은 .jar 확장을 사용하여 JAR 파일로 압축
  • 실행 조건 : Java 설치

즉, 스프링 부트가 Tomcat을 내장하면서, Servlet Container에 종속되던 Web Application의 문제를 해결하였음



참고

profile
꿈꾸던 내가 될꺼야😃

0개의 댓글