티스토리 뷰
스프링 부트는 스프링의 문제점이던 복잡한 세팅 문제를 해결하며 탄생한 스프링 프로젝트 중 하나다.
지난번 글에서 스프링 부트를 사용하면 코드가 얼마나 간결해지는지 알아봤었는데,
https://gnidinger.tistory.com/450
이번 글에선 다른 예를 들어서 간결함을 보기로 하자.
스프링 부트의 핵심 철학은 "구성은 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 파일을 이용해서 명령어 한 줄이면 서비스 가능한 웹 앱을 실행할 수 있다.
'Java+Spring > Spring' 카테고리의 다른 글
[Spring]Spring DI(Dependency Injection) (0) | 2022.08.12 |
---|---|
[Spring]DI - @Component, @Configuration, @Bean, 스프링 컨테이너 구성 (0) | 2022.08.12 |
[Spring]DI - 빈 스코프(Bean Scope), 싱글톤 컨테이너 (2) | 2022.08.12 |
[Spring]DI - 스프링 컨테이너(Container)와 빈(Bean) (0) | 2022.08.12 |
[Spring]아키텍처 (0) | 2022.08.10 |
[Spring]Spring Framework, Spring Triangle (0) | 2022.08.09 |
- Total
- Today
- Yesterday
- 중남미
- 알고리즘
- 리스트
- 지지
- 여행
- 기술면접
- 세계일주
- RX100M5
- 스프링
- 면접 준비
- 맛집
- 세모
- 유럽여행
- 야경
- 스트림
- Backjoon
- Python
- 백준
- Algorithm
- 세계여행
- 자바
- 유럽
- java
- 파이썬
- 남미
- 동적계획법
- 칼이사
- spring
- a6000
- BOJ
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |