Spring & Spring boot

스프링 부트(Springboot)란?

jh4dev 2024. 7. 23. 11:07
<목차>

1. SpringBoot
2. Spring Boot 특징
3. Spring Framework 와 SpringBoot

What is 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 기반 애플리케이션을 손쉽게 만들 수 있게 해줍니다.
"JUST RUN" 할 수 있는 애플리케이션을 만들 수 있습니다.

Spring Boot는 Spring 플랫폼과 서드 파티 라이브러리에 대해 의견이 반영된 접근 방식을 취하여, 최소한의 번거로움으로 시작할 수 있게 해줍니다. 대부분의 Spring Boot 애플리케이션은 최소한의 Spring 설정만 필요합니다.

 

 

Spring Boot

 

spring.io

 


[Spring Boot 의 특징]

공식 문서 기준으로 특징에 대해 살펴보자.

 

  • Create stand-alone Spring applications
    • 스프링 부트는 애플리케이션을 독립적으로 실행할 수 있게 해준다.
      즉, 외부 서버에 배포할 필요 없이, 내장 서버를 통해 바로 실행할 수 있으며, 이를 통해 개발 및 배포 과정이 단순해진다.
  • Embed Tomcat, Jetty or Undertow directly
    • 위 내용에 이어지는 내용이다.
    • 스프링 부트는 Tomcat, Jetty, Undertow 와 같은 서버를 애플리케이션 내부에 직접 포함하고 있으며, 이를 통해 별도의 War 파일을 생성하고 외부 서버에 배포할 필요가 없으며, Jar 파일로 패키징하여 배포할 수 있다.
    • 그렇다고 War 파일로 배포할 수 없는 것은 아니다.
  • Provide opinionated 'starter' dependencies to simplify your build configuration
    • 스프링 부트의 매우 중요한 특징이다.
    • 스프링 부트는, 특정 기능을 쉽게 추가할 수 있도록 미리 정의된 의존성 모음 "starter" 를 제공한다.
      Spring Framework 를 사용하며 가질 수 있는 큰 불편함 중 하나로, 의존성 관리가 있다.
      JDK버전, Spring 버전, WAS 버전 등에 따라 사용하려는 라이브러리의 버전 또한 다른 경우가 있다.
      Spring Boot 에서는, 이를 "starter" 가 관리함으로써, 개발자는 빌드 구성이 단순해지고 개발 속도를 올릴 수 있다.
  • Automatically configure Spring and 3rd party libraries whenever possible
    • 스프링 부트는 애플리케이션의 다양한 설정을 자동으로 구성해준다.
      예를 들어, DB연결, Web서버 설정 등을 자동으로 구성하여, 개발자가 따로 설정하지 않고 비즈니스 로직에 집중할 수 있다.
  • Provice production-ready fetures such as metrics, helath checks, and externalized configuration
    • 스프링 부트는 프로덕션 환경에서 사용할 수 있는 다양한 기능을 제공한다.
    • metrics : 애플리케이션의 성능 및 상태를 모니터링
    • health checks : 애플리케이션의 상태를 확인
    • externalized configuration : 환경별 설정을 쉽게 관리
  • Absolutely no code generation and no requirement for XML configuration
    • 스프링 부트는 XML 설정 파일을 생성하지 않는다.
    • 대신, Java 설정 및 어노테이션 기반 구성을 사용하여, 개발자가 보다 직관적이고 간결하게 설정을 관리할 수 있다.

이처럼, Spring Boot 는 Spring Framework 의 복잡성을 줄이고, 개발자들이 보다 빠르고 쉽게 애플리케이션을 개발할 수 있도록 하는 프로젝트이다. Spring의 유연성과 확장성은 유지하되, 시작하는데 필요한 시간을 확실하게 줄여줄 수 있다.


[Spring Boot vs Spring]

  • 의존성 관리
    • Spring Framework 에서는 필요한 각 모듈의 의존성을 직접 설정해야 하며, 호환되는 버전을 명시해야 정상 동작하기에, 애플리케이션에서 사용하는 스프링 프레임워크나, 라이브러리의 버전을 상향해야 하는 상황에서는 연관된 다른 라이브러리의 버전 까지도 고려해야 한다.
    • 하지만, Spring Boot 에서는 spring-boot-starter 라는 의존성을 제공하여 이를 해결할 수 있다.
      각 라이브러리의 기능과 관련해 자주 사용되고 서로 호환되는 버전의 모듈 조합을 제공하고 있다.
    • spring-boot-starter 는 아래와 같은 의존성을 제공한다. 
      • spring-boot-starter-web
        스프링 MVC를 사용하는 RESTful 애플리케이션을 만들기 위한 의존성
      • 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
        스프링 프레임워크의 캐시 기능 제공
  • 자동 설정 (Auto Configuration)
    • Spring Boot는 스프링 프레임워크의 기능을 사용하기 위한 자동 설정을 지원한다.
      애플리케이션에 추가된 라이브러리를 실행하는데 필요한 환경 설정을 찾아주며, 프레임워크가 자동으로 관리한다.
  • 내장 WAS
    • 스프링 부트의 각 웹 애플리케이션에는 WAS가 있다.
    • 웹 애플리케이션을 개발할 때, 가장 기본이 되는 spring-boot-starter-web 내에 내장되어 있다.