본문 바로가기
Web/Spring

[Spring] Spring vs Spring Boot (2)

by 희조당 2022. 8. 23.
728x90

✍️ 학습 목표

  • 스프링이란?
  • 스프링 부트란?
  • 차이점

📌 스프링 부트란?

스프링의 등장만으로 큰 변화를 가져왔지만 개발자들은 여전히 불편한 점이 있었는데 바로 복잡한 환경 설정이다.

다양한 라이브러리와 기술을 지원하면서 덩달아 개발자가 처리해야 하는 설정도 많아지고 복잡해진 것이다.

스프링 부트는 이 문제를 해결하고자 등장했다.

 

다음 항목들은 내가 생각하는 가장 중요한 기능이자 스프링과의 차이점이라고 생각한다.

  • Auto Configuration
  • Easy Dependency Management
  • Embedded Server

이 3가지 기능들 외에도 라이브러리 버전 자동 관리, 인메모리 데이터베이스(H2), 테스트 환경 제공 등 스프링에는 없던 다양한 기능들을 추가함으로 더 편한 개발 환경을 제공한다.

즉, 최소한의 번거로움으로 스프링 기반의 서비스를 쉽게 만들 수 있도록 하는 프레임워크이다.

📌 기능과 차이점

스프링 부트의 기능들의 출발점은 기존 스프링이 가지고 있던 문제들을 해결하기 위한 것이다.

즉, 기능들이 결국 차이점이라는 의미이다. 적당히 자세하게 살펴보자.

 

✔️ Auto Configuration - 자동 설정

스프링 부트 공식 문서에서 말하는 auto configuration은 다음과 같다. 

Automatic config for spring functionality
Opinionated ‘starter' dependencies to simplify build and application configuration

 

1️⃣ 자동 설정 지원

스프링 부트로 프로젝트를 생성하고 main에 가게 되면 @SpringBootApplication이라는 어노테이션이 보인다.

이 어노테이션의 구현부를 가보면 3가지 어노테이션들을 확인할 수 있다.

  • @SpringBootConfiguration : 스프링 부트의 설정을 나타낸다.
  • @EnableAutoConfiguration : 자동 설정 어노테이션
  • @ComponentScan : 빈으로 등록할 클래스들을 탐색한다.

여기 보이는 @EnableAutoConfiguration과 @ComponentScan이 빈 생성을 담당한다.

2가지 절차를 통해서 빈을 생성하는데, @ComponentScan으로 컴포넌트들의 정보를 모으고 @EnableAutoConfiguration로 spring.factories 안에 들어있는 자동 설정 조건에 맞는 빈들을 생성하고 설정한다.

 

2️⃣ Starter 의존성으로 간단해진 빌드와 설정

스프링 부트에서 starter는 dependency 설정을 자동화해주는 모듈이다.

기존 스프링으로 웹 애플리케이션을 개발할 때 Spring MVC를 추가하고 관련 설정을 직접 생성하고 관리했다.

여러 웹 애플리케이션을 만든다면 이런 과정들이 반복되었을 것이다.

// Example
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web',
version: '2.3.1.RELEASE'

스프링 부트에서는 starter 의존성으로 위와 같은 코드 한 줄로 반복되는 작업을 해결해주었다.


✔️ Easy Dependency Management - 쉬운 의존성 관리

1️⃣ Spring boot Starter

기존 스프링에선 웹 개발을 위해서 spring-web, spring-webmvc, jackson-databind 등과 같은 의존성들을 버전까지 따져가면서 하나하나 추가했다. 이런 불편함을 해결하기 위해서 도입한 것이 바로 Spring boot Starter이다.

단순히 spring-boot-starter-web 한 줄만 적어주면 관련된 의존성을 모두 추가해준다.

// Example
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web',
version: '2.3.1.RELEASE'

2️⃣ io.spring.dependency-management

기존 스프링에는 버전마저 하나하나 관리해줘야 했던 불편함이 존재했다.

스프링 부트에 의존성을 관리해주는 플러그인이 도입되면서 개발자가 겪는 불편함을 해소해주었다.

따라서 build 설정에 dependency에 대한 버전은 오버라이딩하는 경우가 아니라면 굳이 명시할 필요가 없어졌다.

// Example
plugins { id "io.spring.dependency-management" version "1.0.9.RELEASE" }

✔️ Embedded Server - 내장 서버

스프링에서 개발한 프로젝트를 배포하기 위해서는 war파일과 실행시킬 WAS가 필요했다.

하지만 스프링 부트로 넘어오게 되면서 Tomcat이나 Jetty와 같은 WAS를 내장하게 되면서 jar 파일로 쉽게 배포할 수 있게 되었다. 또, WAS의 버전을 관리해야 하는 불편함도 해결해주었다.

 

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

[Spring] Spring의 DB 접근 기술  (0) 2022.08.23
[Spring] Spring의 핵심 : IoC, DI (23.05.16 updated)  (0) 2022.08.23
[Spring] Spring vs Spring Boot (1)  (0) 2022.08.19
[Spring] Spring Data JPA (2)  (0) 2022.08.13
[Spring] Spring Data JPA란?  (0) 2022.08.13

댓글