1.2 스프링 부트 ( vs. 스프링과의 차이점)

김찬미·2024년 5월 28일
0

스프링 부트(Spring Boot)란?

스프링 부트(Spring Boot)는 스프링 프레임워크를 기반으로 한 서브 프로젝트로, 이를 개발자에게 제공함으로서 스프링 애플리케이션의 개발을 간소화하고 빠르게 설정할 수 있도록 도와준다.

앞에서 살펴본 것처럼 스프링 프레임워크는 다양한 기능을 제공하지만, 그만큼 설정이 복잡한 편이다. 개발을 하며 필요한 모듈들을 추가하다 보면 설정이 복잡해지는 문제를 해결해기 위해 등장한 것이 스프링 부트이다. 스프링 부트 공식 사이트에는 다음과 같은 문구가 적혀있다.

Spring Boot makes it easy to create stand-alone, production-grade Spring based Apllications that you can "just run". (스프링 부트를 이용하면 단독으로 실행 가능한 상용 수준의 스프링 기반 애플리케이션을 손쉽게 만들 수 있습니다.)

즉, 별도의 복잡한 설정을 하지 않아도 스프링 부트를 사용하면 개발이 쉬워진다는 뜻이다. 이어서 스프링 프레임워크와 비교했을 때에 스프링 부트가 가진 특징을 알아보자.


스프링 부트의 특징

- 의존성 관리

스프링 프레임워크에서는 개발에 필요한 각 모듈의 의존성을 직접 설정해야 했다. 또 호환되는 버전을 명시해야 정상 작동되었다. 애플리케이션에서 사용하는 스프링 프레임워크나 라이브러리의 버전을 올리는 상황에서는 연관된 다른 라이브러리의 버전까지 고려해야 하는 것이다.

하지만 스프링 부트에서는 이 같은 불편함을 해소하기 위해 'spring-boot-starter'라는 의존성을 제공한다. spring-boot-starter의 의존성은 여러 종류가 있고, 각 라이브러리의 기능과 관련해 자주 사용되고 서로 호환되는 버전의 모듈 조합을 제공한다. 이를 통해 개발자는 라이브러리 호환 문제를 해결할 수 있다.

많이 사용되는 spring-boot-starter 라이브러리를 간략하게 소개하자면 다음과 같다.

  • spring-boot-starter-web : 스프링 MVC를 사용하는 RESTful 애플리케이션을 만들기 위한 의존성이다. 기본으로 내장 톰캣(Tomcat)이 포함되어 있어 jar 형식으로 실행 가능. 웹 애플리케이션을 개발하기 위해 필요한 모든 의존성을 자동으로 가져온다.

  • spring-boot-starter-test : JUnit, Jupiter, Mockito 등의 테스트용 라이브러리를 포함한다.

  • spring-boot-starter-jdbc : HikariCP 커넥션 풀을 활용한 JDBC 기능을 제공한다.

  • spring-boot-starter-security : 스프링 시큐리티(인증, 권한, 인가 등) 기능을 제공한다.

  • spring-boot-starter-data-jpa : 하이버네이트를 활용한 JPA 기능을 제공한다.

  • spring-boot-starter-cache : 스프링 프레임워크의 캐시 기능을 지원한다.

'spring-boot-starter'의 여러 라이브러리를 함께 사용할 때는 의존성이 겹칠 수 있다. 이로 인해 버전 충돌이 발생할 수 있는데, 의존성 조합 충돌 문제가 없도록 'spring-boot-starter-parent'가 검증된 조합을 제공한다.


- 자동 설정

스프링 부트는 스프링 프레임워크의 기능을 사용하기 위한 자동 설정(Auto Configuration)을 지원한다. 자동 설정은 애플리케이션에 추가된 라이브러리를 실행하는 데 필요한 환경 설정을 알아서 찾아준다. 즉, 애플리케이션을 개발하는 데 필요한 의존성을 추가하면 프레임워크가 이를 자동으로 관리해준다.

자동 설정은 보통 스프링 부트가 클래스패스(classpath)에 존재하는 라이브러리들을 스캔하여 기본적인 설정을 적용한다. 예를 들어, 스프링 부트 프로젝트를 생성했을 때의 메인 애플리케이션 코드를 보자.

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

@SpringBootApplication
public class TestApplication {

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

}

여기서 @SpringBootApplication는 자동 구성을 해주는 어노테이션으로, 기능 위주로 보았을 때 크게 세개의 어노테이션을 하나로 합쳐 놓은 인터페이스라고 볼 수 있다.

  • @SpringBootConfiguration
  • @ComponentScan
  • @EnableAutoConfiguration

스프링 부트 애플리케이션이 실행되면

  1. @ComponentScan 어노테이션이 *@Component 시리즈 어노테이션이 붙은 클래스를 발견해 빈을 등록한다.
  2. @EnableAutoConfiguration 어노테이션을 통해 다양한 자동 설정이 일부 조건을 거쳐 적용된다.

@Component 시리즈 어노테이션은 다음과 같다

  • @Controller
  • @RestController
  • @Service
  • @Repository
  • @Configuration

정리

  1. @SpringBootApplication이 붙은 애플리케이션을 실행
  2. @Component 어노테이션이 있는 클래스들을 스캔해서 Bean으로 등록 (Bean 등록 1단계)
  3. @EnableAutoConfiguration에 의해 spring.factories 안에 들어있는 수많은 자동 설정이 조건에 따라 적용 (Bean 등록 2단계)
  4. 많은 Bean들이 자동으로 생성되고 애플리케이션이 구동된다.

- 내장 WAS

스프링 부트의 각 웹 애플리케이션에는 내장 WAS(Web Application Server)가 존재한다. 내장 WAS란 애플리케이션을 실행하는 데 필요한 서버를 애플리케이션에 내장시키는 기능이다. 이 기능은 애플리케이션을 실행하기 위해 별도의 외부 서버를 설치하거나 구성할 필요 없이 스프링 부트로 개발된 애플리케이션을 간단하게 실행할 수 있도록 도와준다.

내장 WAS의 주요 특징

  1. 자동 설정 : 스프링 부트는 내장 WAS를 사용하는 애플리케이션을 위한 자동 설정을 제공한다. 이를 통해 개발자는 별도의 설정 없이도 내장 WAS를 사용할 수 있다.

  2. Tomcat, Jetty, Undertow : 스프링 부트는 기본적으로 Tomcat, Jetty, Undertow 등의 내장 웹 서버를 제공합니다. 'spring-boot-starter-seb'의 경우 톰캣(Tomcat)을 내장하고 있지만 필요에 따라서는 다른 웹 서버로 대체할 수도 있다. 자동 설정 기능은 톰캣에도 적용되므로 특별한 설정 없이도 톰캣을 실행할 수 있다.

  3. 편리한 배포 : 내장 WAS를 사용하면 애플리케이션을 배포할 때 별도의 웹 서버 설정이 필요하지 않다. 애플리케이션을 JAR 파일로 패키징하고 실행하면 된다.

  4. 개발 환경에서의 편의성: 내장 WAS를 사용하면 개발 환경에서 애플리케이션을 빠르게 실행하고 테스트할 수 있다. 외부 서버를 설치하고 설정할 필요가 없으므로 개발 생산성이 향상된다.

내장 WAS를 사용하는 것은 개발과 배포 과정을 단순화시키고, 생산성과 확장성 향상 등의 이점을 제공한다. 따라서 많은 스프링 부트 기반의 프로젝트에서 내장 WAS를 사용하여 애플리케이션을 개발하고 배포한다.


모니터링

개발이 끝나고 서비스를 운영하는 시기에는 해당 시스템이 사용하는 스레드, 메모리, 세션 등의 주요 요소들을 모니터링해야 한다. 스프링 부트에는 스프링 부트 액추에이터(Spring Boot Actuator)라는 자체 모니터링 도구가 있다. 이러한 액추에이터에 관해서는 책 기준 11장에서 다룰 예정.

profile
백엔드 개발자

0개의 댓글

관련 채용 정보