프레임워크(Framework)/Spring

[Spring Boot] 스프링 부트란 무엇인가?

잇트루 2022. 10. 26. 20:29
반응형

스프링 부트(Spring Boot)

먼저, 스프링 프레임워크(Spring Framework)는 엔터프라이즈 애플리케이션을 개발하기 위한 핵심 기능을 제공하는 Spring Project 중 하나이다.

이후 등장한 스프링 부트(Spring Boot)는 스프링 프레임워크의 복잡한 설정으로 인한 문제점을 해결하기 위해 등장한 Spring Project 중 하나이다.

 

일반적으로 Spring이라고 한다면 Spring Framework를 나타낸다.

Sping Boot는 Spring을 더욱 간편하게 이용할 수 있는 도구 정도로 해석하면 된다.

 

Spring Boot를 사용하는 이유

  1. XML 기반의 복잡한 설계 방식을 사용하지 않는다.
  2. 의존 라이브러리를 자동으로 관리해 준다.
  3. 애플리케이션 설정을 자동으로 구성한다.
  4. 프로덕션(Production) 애플리케이션을 쉽게 빌드할 수 있다.
  5. 내장된 WAS를 통해 보다 쉽게 배포할 수 있다.

 

XML 기반의 복잡한 설계 방식

기존의 Spring Framework의 설계 방식은 XML 언어를 통해 다음과 같이 복잡한 설정을 해야 한다.

web.xml 예시

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-config/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-config/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>CORSFilter</filter-name>
        <filter-class>com.codestates.filter.CORSFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CORSFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

이러한 설정 파일뿐만 아니라 다른 설정 파일들도 필요로 한다.

 

하지만, Spring Boot는 다음과 같이 개선되어 기존의 Spring의 복잡한 설정에 대한 어려움으로부터 벗어날 수 있게 되었다.

Spring Boot의 구성 파일 예시

spring.h2.console.enabled=true
spring.h2.console.path=/console
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true

 

 

의존 라이브러리 자동 관리

Spring Boot 이전에는 애플리케이션에서 필요한 라이브러리를 사용하기 위해서는 필요한 라이브러리의 이름과 버전을 직접 추가해 주어야 했다.

그로 인해 라이브러리 간의 버전 불일치로 인한 빌드 및 실행 오류가 빈번하게 발생했다.

 

하지만 Spring Boot의 starter 모듈 구성 기능을 통해 의존 라이브러리를 수동으로 설정해야 하는 불편함이 사라졌다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'com.h2database:h2'
}

위 코드는 Spring Boot에서 웹 애플리케이션을 개발하기 위한 기본적인 의존 라이브러리 설정의 예시이다.

간단한 설정으로 데이터베이스와의 연동부터 애플리케이션에 대한 모든 테스트까지 진행할 수 있다.

implementation ‘라이브러리’ 문구만 작성하거나 수장하는 것으로 라이브러리 설정을 추가 및 제거할 수도 있다.

그러나 추가적으로 작성하거나 제거한 것을 적용하기 위해서는 Gradle 프로젝트를 reload 해야 한다.

 

다음은 위 코드의 의존 라이브러리 설정으로 인해 실제 애플리케이션에서 의존하는 라이브러리가 포함된 이미지이다.

4줄의 코드 작성으로 의존 라이브러리 설정을 통해 필요한 의존 라이브러리를 포함하고 있는 모습이다.

이처럼 Spring Boot를 사용하면 개발자가 의존 라이브러리를 직접 관리해야 하는 부담에서 벗어날 수 있다.

 

애플리케이션 설정 자동 구성

Spring Boot는 스타터(Starter) 모듈을 통해 설치되는 의존 라이브러리를 기반으로 애플리케이션의 설정을 자동으로 구성한다.

예를 들어 다음과 같은 의존 라이브러리 설정이 있다고 가정한다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'com.h2database:h2'
}

 

다음 코드는 Web 관련 starter 모듈이다.

implementation 'org.springframework.boot:spring-boot-starter-web'

Spring Boot는 해당 설정으로 애플리케이션이 웹 애플리케이션이라고 추측한 뒤, 웹 애플리케이션을 사용할 수 있도록 서블릿 컨테이너(기본: Tomcat) 설정을 자동으로 구성한다.

 

다음은 데이터베이스 관련 starter 모듈이다.

implementation 'org.springframework.boot:spring-boot-starter-jdbc'

마찬가지로 Spring Boot는 해당 설정으로 애플리케이션에 데이터베이스 연결이 필요하다고 추측하여 JDBC 설정을 자동으로 구성한다.

 

이처럼 Spring Boot는 애플리케이션에 대한 설정을 직접 해야 하는 번거로움을 최소화한다.

 

애플리케이션에 대한 설정을 활성화하기 위해서는 Spring 프로젝트의 Application 설정 파일에 어노테이션을 추가해야 한다.(spring boot initializr를 통해 프로젝트를 생성하면 기본으로 설정되어 있다.)

SpringExampleApplication.java

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

 

프로덕션(Production) 애플리케이션의 빌드

Spring Boot를 사용하면 개발한 애플리케이션 구현 코드를 쉽게 빌드하여 결과물을 얻을 수 있으며,

기존의 War 파일 형태로 WAS(Web Application Server)에 올릴 필요가 없다.

 

IntelliJ IDE에서 우측 Gradle 바를 클릭하면 해당 프로젝트에 대한 정보를 확인할 수 있다.

Tasks/build의 bootJar 파일을 더블 클릭하면 해당 프로젝트를 빌드하여 결과물을 얻을 수 있다.

 

빌드 파일은 프로젝트 내의 libs 폴더 안에 저장되며 빌드의 결과물인 Jar 파일을 얻게 된다.

Jar 파일은 즉시 실행 가능한 애플리케이션 실행 파일로 사용된다.

 

내장된 WAS를 통한 배포

Spring Boot는 Apache Tomcat이라는 WAS를 내장하고 있다.

따라서 별도의 WAS를 구축할 필요가 없으며, Spring Boot를 통해 빌드된 Jar 파일을 이용하여 웹 애플리케이션을 실행할 수 있다.

위 그림은 Spring Boot 기반의 웹 애플리케이션을 실행한 모습이다.

java -jar Jar파일.jar 명령어를 통해 애플리케이션을 실행할 수 있다.

 

Spring Boot는 기존에 개발자들이 직접 구성한 Sping에 대한 설정을 대신 처리해준다.

Spring 구성은 Spring에게 맡기고 비즈니스 로직에 집중할 수 있도록 해주는 것이다.

반응형