티스토리 뷰

Java+Spring/Spring

[Spring]Spring Boot

Vagabund.Gni 2022. 8. 10. 15:48
728x90
반응형

스프링 부트는 스프링의 문제점이던 복잡한 세팅 문제를 해결하며 탄생한 스프링 프로젝트 중 하나다.

 

지난번 글에서 스프링 부트를 사용하면 코드가 얼마나 간결해지는지 알아봤었는데,

 

https://gnidinger.tistory.com/450

 

[Spring]Spring Framework, Spring Triangle

Spring Framework, 혹은 Spring은 Java/Kotlin을 기반으로 한 오픈소스 웹 프레임워크이다. 특히나 엔터프라이즈급 애플리케이션 개발에 필요한 기능이 종합적으로 포함되어 있는데, 대한민국 전자정부

gnidinger.tistory.com

이번 글에선 다른 예를 들어서 간결함을 보기로 하자.

 

스프링 부트의 핵심 철학은 "구성은 Spring에게 맡겨버리고 비즈니스 로직에만 집중하자"인데,

 

아래의 다섯 가지 이유 덕분에 이 철학이 실현 가능해진다.

 

  • XML 기반의 복잡한 설계 방식 지양
  • 의존 라이브러리의 자동 관리
  • 애플리케이션 설정의 자동 구성
  • 프로덕션급 애플리케이션의 손쉬운 빌드
  • 내장된 WAS 통한 손쉬운 배포

하나씩 살펴보기로 하자.

 

1. XML 기반의 복잡한 설계 방식 지양

 

스프링을 사용해서 개발을 진행할 때 가장 어려웠던 점은 복잡한 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>

위 XML 파일은 애플리케이션의 기본 구조를 잡는 MVC 설정 파일인데,

 

보다시피 매우 길고 복잡하다.

 

이는 스프링의 큰 단점으로 한동안 작용했었는데, 스프링 부트가 탄생하며 상황이 달라진다.

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

위 복잡한 설정이 단 네 줄로 끝나는 것이다.

 

이처럼 복잡한 XML 기반의 설계를 피할 수 있다는 것이 스프링 부트의 가장 큰 장점이다.

 

2. 의존 라이브러리의 자동 관리

 

스프링 부트 이전에는 앱에 필요한 라이브러리를 위해 이름과 버전을 일일이 추가해야 했다.

 

이 때문에 라이브러리 간의 버전 불일치로 오류가 빈번하게 발생했으며, 개발 생산성을 떨어뜨렸다.

 

하지만 스프링 부트의 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'
}

위 코드는 웹 앱 개발을 위한 기본적인 의존 라이브러리 설정이다.

 

단 네 줄의 설정만으로 DB와의 연동은 물론 앱에 대한 테스트까지 진행할 수 있다.

 

위 그림은 네 줄의 라이브러리 설정으로 불러올 수 있는 의존 라이브러리를 나타낸다.

 

의존 라이브러리를 직접 관리해야 하는 부담에서 벗어났다고 할 수 있다.

 

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

 

스프링 부트는 위에서 살펴본 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'
}

implementation 'org.springframework.boot:spring-boot-starter-web' 부분은 이 앱이 웹 앱이라는 것을 나타낸다.

 

스프링 부트는 이를 바탕으로 웹 앱을 띄울 서블릿 컨테이너(Tomcat) 설정을 자동으로 구성한다.

 

implementation 'org.springframework.boot:spring-boot-starter-jdbc' 와 같은 스타터가 존재한다면

 

스프링 부트는 앱에 데이터베이스 연결이 필요하다고 추측한 뒤, JDBC(Java Database Connectivity) 설정을 구성한다.

 

이와 같이 스프링 부트는 앱에 대한 설정도 맡아서 해주는데, 이를 위해선 애너테이션 하나만 입력하면 된다.

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

 

4. 프로덕션급 애플리케이션의 손쉬운 빌드

 

스프링 부트에서는 앱 구현 코드를 손쉽게 빌드하고 작업물을 WAR형태로 WAS에 올릴 필요가 없다.

 

스프링 부트를 통해 jar 파일로 빌드하면 바로 시작할 수 있는 실행파일이 만들어지기 때문이다.

 

  • WAS(Web Application Server, 혹은 서블릿 컨테이너)
    구현된 코드를 개발자가 먼저 WAR(Web application ARchive) 파일 형태로 빌드하고, 나온 결과물을 실제 웹 애플리케이션으로 실행되게 해주는 서버

 

5. 내장된 WAS를 통한 손쉬운 배포

 

Spring Boot는 Apache Tomcat이라는 WAS를 내장하고 있기 때문에 별도의 WAS를 구축할 필요가 없으며,

 

jar 파일을 이용해서 명령어 한 줄이면 서비스 가능한 웹 앱을 실행할 수 있다.

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함