티스토리 뷰

프로젝트를 처음 시작하면 어떤 라이브러리들을 사용할지 고민하고 선택해야 하는데, 여기에 버전까지 고민해야 한다. 더 심각한 문제는 각 라이브러리들끼리 호환이 잘 되는 버전도 있지만 잘 안되는 버전들도 있다는 점이다. 과거에는 이런 문제들 때문에 처음 프로젝트를 세팅하는데 상당히 많은 시간을 소비해야 했다.


스프링 부트는 라이브러리들을 편리하게 사용할 수 있는 다양한 기능들을 제공한다.

  • 외부 라이브러리 버전 관리
  • 스프링 부트 스타터 제공

라이브러리 직접 관리

스프링 부트가 편리한 라이브러리 관리 기능을 제공하기 전에는 직접 라이브러리를 하나하나 고르고 설정했었다. 웹 프로젝트를 하나 설정하기 위해서는 수 많은 라이브러리를 알아야 하고, 추가로 각각의 라이브러리의 버전까지 골라서 선택해야 한다. 여기서 눈에 보이지 않는 가장 어려운 문제는 각 라이브러리들 간에 서로 호환이 잘 되는 버전도 있지만 호환이 잘 안되는 버전도 있다는 점이다.


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

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: 핵심 스타터, 자동 구성, 로깅, YAML
  • spring-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: 타임리프 뷰와 웹 MVC
  • spring-boot-starter-web: 웹 구축을 위한 스타터, RESTful, 스프링 MVC, 내장 톰캣
  • spring-boot-starter-validation: 자바 빈 검증기(하이버네이트 Validator)
  • spring-boot-starter-batch : 스프링 배치를 위한 스타터

스프링 부트 스타터 공식 메뉴얼




Reference
김영한. 스프링 부트 - 핵심 원리와 활용. 인프런.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함