SpringBoot - 스타터와 라이브러리 관리

Kwon Yongho·2023년 6월 30일
0

Spring

목록 보기
31/37
post-thumbnail
  1. 라이브러리 직접 관리
  2. 스프링 부트 라이브러리 버전 관리
  3. 스프링 부트 스타터

1. 라이브러리 직접 관리

  • 프로젝트를 처음 시작하면 어떤 라이브러리들을 사용할지 고민하고 선택해야 한다. 예를 들어서 스프링
    WEB, 내장 톰캣, JSON 처리기, 로거 등등 수 많은 라이브러리를 선택해야 한다.
  • 라이브러리의 버전까지 고민해야 한다. 더 심각한 문제는 각 라이브러리들끼리 호환이 잘 되는 버전도
    있지만 잘 안되는 버전들도 있다.

스프링 부트 라이브러리 기능 제공

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

스프링 부트 쓰기 전
build.gradle

    dependencies {
        //1. 라이브러리 직접 지정
        //스프링 웹 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'
    }
  • 스프링으로 웹 애플리케이션을 실행하려면 생각보다 수 많은 라이브러리가 필요하다.
  • 스프링 웹 MVC, 내장 톰캣, JSON 처리, 스프링 부트 관련, LOG, YML 등등 다양한 라이브러리가 사용된다.
  • 여기서 눈에 보이지 않는 가장 어려운 문제는 각 라이브러리들 간에 서로 호환이 잘 되는 버전도 있지만 호환이 잘 안되는 버전도 있다는 점이다.

2. 스프링 부트 라이브러리 버전 관리

스프링 부트는 개발자 대신에 수 많은 라이브러리의 버전을 직접 관리해준다.

build.gradle - plugins 수정

    plugins {
        id 'org.springframework.boot' version '3.0.2'
        id 'io.spring.dependency-management' version '1.1.0' //추가
        id 'java'
    }
    dependencies {
        //2. 스프링 부트 라이브러리 버전 관리
        //스프링 웹, 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'
    }
  • 라이브러리를 보면 버전 정보가 모두 제거되었다.

dependency-management 버전 관리
io.spring.dependency-management플러그인을 사용하면 spring-boot-dependencies에 있는 다음 bom 정보를 참고한다.

버전 정보 bom
https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-dependencies/build.gradle

  • 해당 build.gradle문서안에 보면 bom 이라는 항목이 있다.
  • 각각의 라이브러리에 대한 버전이 명시되어 있는 것을 확인할 수 있다.
  • 물론 현재 프로젝트에서 지정한 스프링 부트 버전을 참고한다.

BOM(Bill of materials)
자재 명세서(Bill of materials)란 제품구성하는 모든 부품들에 대한 목록이다.
부품이 복잡한 요소들로 구성된 조립품인 경우는 계층적인 구조로 작성될 수 있다.

스프링 부트가 제공하는 버전 관리는 스프링 자신을 포함해서 수 많은 외부 라이브러리의 버전을 최적화
해서 관리해준다.

3. 스프링 부트 스타터

스프링 부트는 이런 문제를 해결하기 위해 프로젝트를 시작하는데 필요한 관련 라이브러리를 모아둔 스프링 부트 스타터를 제공한다.

build.gradle

    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
    }
  • spring-boot-starter-web이 라이브러리 하나로 지금까지 우리가 직접 넣어주었던 모든 라이브러리가 포함된다.
  • 스프링과 웹을 사용하고 싶으면 spring-boot-starter-web
    • 스프링 웹 MVC, 내장 톰캣, JSON 처리, 스프링 부트 관련, LOG, YML 등등
  • 스프링과 JPA를 사용하고 싶으면 spring-boot-starter-data-jpa
    • 스프링 데이터 JPA, 하이버네이트 등등

스프링 부트 스타터 - 자주 사용하는 것 위주

  • 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: 스프링 배치를 위한 스타터

공식 메뉴얼
https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using.build-systems.starters

0개의 댓글