티스토리 뷰
프로젝트를 처음 시작하면 어떤 라이브러리들을 사용할지 고민하고 선택해야 하는데, 여기에 버전까지 고민해야 한다. 더 심각한 문제는 각 라이브러리들끼리 호환이 잘 되는 버전도 있지만 잘 안되는 버전들도 있다는 점이다. 과거에는 이런 문제들 때문에 처음 프로젝트를 세팅하는데 상당히 많은 시간을 소비해야 했다.
스프링 부트는 라이브러리들을 편리하게 사용할 수 있는 다양한 기능들을 제공한다.
- 외부 라이브러리 버전 관리
- 스프링 부트 스타터 제공
라이브러리 직접 관리
스프링 부트가 편리한 라이브러리 관리 기능을 제공하기 전에는 직접 라이브러리를 하나하나 고르고 설정했었다. 웹 프로젝트를 하나 설정하기 위해서는 수 많은 라이브러리를 알아야 하고, 추가로 각각의 라이브러리의 버전까지 골라서 선택해야 한다. 여기서 눈에 보이지 않는 가장 어려운 문제는 각 라이브러리들 간에 서로 호환이 잘 되는 버전도 있지만 호환이 잘 안되는 버전도 있다는 점이다.
build.gradle
plugins {
id 'org.springframework.boot' version '3.0.2'
id 'java'
}
group = 'com.hyuuny'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
//스프링 웹 MVC
implementation 'org.springframework:spring-webmvc:6.0.4'
//내장 톰캣
implementation 'org.apache.tomcat.embed:tomcat-embed-core:10.1.5'
//JSON 처리
implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.1'
//스프링 부트 관련
implementation 'org.springframework.boot:spring-boot:3.0.2'
implementation 'org.springframework.boot:spring-boot-autoconfigure:3.0.2'
//LOG 관련
implementation 'ch.qos.logback:logback-classic:1.4.5'
implementation 'org.apache.logging.log4j:log4j-to-slf4j:2.19.0'
implementation 'org.slf4j:jul-to-slf4j:2.0.6'
//YML 관련
implementation 'org.yaml:snakeyaml:1.33'
}
tasks.named('test') {
useJUnitPlatform()
}
- 스프링으로 웹 애플리케이션을 실행하려면 생각보다 수 많은 라이브러리가 필요하다.
- 스프링 웹 MVC, 내장 톰캣, JSON 처리, 스프링 부트 관련, LOG, YML 등등 다양한 라이브러리가 사용된다.
스프링 부트 라이브러리 버전 관리
버전 관리 기능을 사용하려면 io.spring.dependency-management
플러그인을 사용해야 하는데, 이는 프로젝트를 생성하면 자동으로 등록되어 있다.
build.gradle
plugins {
id 'org.springframework.boot' version '3.0.2'
id 'io.spring.dependency-management' version '1.1.0'
id 'java'
}
group = 'com.hyuuny'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
//스프링 웹, MVC
implementation 'org.springframework:spring-webmvc'
//내장 톰캣
implementation 'org.apache.tomcat.embed:tomcat-embed-core'
//JSON 처리
implementation 'com.fasterxml.jackson.core:jackson-databind'
//스프링 부트 관련
implementation 'org.springframework.boot:spring-boot'
implementation 'org.springframework.boot:spring-boot-autoconfigure'
//LOG 관련
implementation 'ch.qos.logback:logback-classic'
implementation 'org.apache.logging.log4j:log4j-to-slf4j'
implementation 'org.slf4j:jul-to-slf4j'
//YML 관련
implementation 'org.yaml:snakeyaml'
}
tasks.named('test') {
useJUnitPlatform()
}
- 라이브러리의 버전 정보가 모두 제거되었다.
external libraries
를 확인해보면 스프링 부트 버전(3.0.2)에 맞게 최적화된 라이브러리 버전이 들어온 것을 확인할 수 있다.io.spring.dependency-management
플러그인을 사용하면spring-boot-dependencies
에 있는 bom 정보를 참고한다.spring-boot-dependencies
는 스프링 부트 gradle 플러그인에서 사용하기 때문에 개발자의 눈에 의존관계로 보이지는 않는다.
버전 정보 bom
- build.gradle 문서
- 해당 build.gradle 문서안에 보면 bom 이라는 항목이 있다.
- 각각의 라이브러리에 대한 버전이 명시되어 있는 것을 확인할 수 있다.
- 스프링부트 버전에 맞는 각 라이브러리 버전을 최적화 해놓았다.
- 스프링 부트가 관리하는 외부 라이브러리 버전을 확인
스프링 부트 스타터
스프링 부트는 프로젝트를 시작하는데 필요한 관련 라이브러리를 모아둔 스프링 부트 스타터를 제공한다.
build.gradle
plugins {
id 'org.springframework.boot' version '3.0.2'
id 'io.spring.dependency-management' version '1.1.0'
id 'java'
}
group = 'com.hyuuny'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
tasks.named('test') {
useJUnitPlatform()
}
spring-boot-starter-web
라이브러리 하나로 지금까지 위에서 직접 넣어주었던 모든 라이브러리가 포함된다.- 마찬가지로
external libraries
를 확인해보면 스프링 부트 버전에 맞게 최적화된 라이브러리 버전이 들어온 것을 확인할 수 있다. - 이것은 사용하기 편리하게 의존성을 모아둔 세트이다.
- 이것을 하나 포함하면 관련 의존성 세트가 한번에 들어온다.
- 스타터도 스타터를 가질 수 있다.
스프링 부트 스타터 - 자주 사용하는 것 위주
spring-boot-starter
: 핵심 스타터, 자동 구성, 로깅, YAMLspring-boot-starter-jdbc
: JDBC, HikariCP 커넥션풀spring-boot-starter-data-jpa
: 스프링 데이터 JPA, 하이버네이트spring-boot-starter-data-mongodb
: 스프링 데이터 몽고spring-boot-starter-data-redis
: 스프링 데이터 Redis, Lettuce 클라이언트spring-boot-starter-thymeleaf
: 타임리프 뷰와 웹 MVCspring-boot-starter-web
: 웹 구축을 위한 스타터, RESTful, 스프링 MVC, 내장 톰캣spring-boot-starter-validation
: 자바 빈 검증기(하이버네이트 Validator)spring-boot-starter-batch
: 스프링 배치를 위한 스타터
Reference
김영한. 스프링 부트 - 핵심 원리와 활용. 인프런.
'Spring' 카테고리의 다른 글
[Spring] 외부설정과 프로필 2 (0) | 2023.04.03 |
---|---|
[Spring] 외부설정과 프로필 1 (0) | 2023.04.02 |
[Spring] 스프링 부트 내장 톰캣 (0) | 2023.03.12 |
[Spring] WAR VS JAR (0) | 2023.03.10 |
[Spring] 트랜잭션 전파 옵션 REQUIRES_NEW를 사용해서 문제를 해결해보자 (0) | 2022.11.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 문자열
- Real MySQL
- 정렬
- mysql 8.0
- Algorithm
- 그리디
- Spring
- 노마드코더
- 북클럽
- 데이터베이스
- 알고리즘
- 스프링 부트
- 코틀린
- 인프런
- 스프링부트
- spring boot
- 코테
- 자료구조
- 노마드
- 릿코드
- 파이썬
- 리팩토링
- leetcode
- 김영한
- MySQL
- 구현
- kotlin
- 백준
- 스프링
- webflux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함