1. 라이브러리 관리의 어려움
    1. 처음 프로젝트 생성 시 어떤 라이브러리 사용할 지 선택해야함
    2. 라이브러리를 선정하면서 버전을 고려하게 되는데, 각 라이브러리별로 참조하는 라이브러리버전 또한 고려해야함
    3. 즉, 사용하려는 라이브러리가 의존하는 라이브러리 정보까지 파악해야하는 어려움 가짐
  2. 스프링부트의 라이브러리 편의성
    1. 어떤 프로젝트를 생성하고자 한다면, 그 프로젝트에 필요한 필수 라이브러리를 버전을 맞춰 자동으로 gradle의존에 주입
    2. 예를 들어 spring web 프로젝트를 생성시 필요한 tomcat, mvc, json 라이브러리 등을 호환이 가능한 버전으로 추가해줌
    3. 또한 특정 라이브러리 추가하더라도, 현재 사용되는 라이브러리에서 최적의 버전을 자동으로 맞춤
    4. plugins
      1. 간단하게는 gradle에서 사용하는 라이브러리? 플러그인?
      2. gradle이 사용하는 라이브러리 정도로 이해
    5. io.spring.dependency-management
      1. Bom정보를 활용하여 의존성을 주입
      2. 스프링부트에서는 해당 플러그인을 활용하여 의존성의 버전을 관리함
      3. 스프링부트가 지원하는 라이브러리에 대해서는 버전을 지정하지 않더라도 스프링부트 버전에 맞는 라이브러리 버전을 의존성으로 주입해줌
      4. 스프링부트가 지원하지 않는 라이브러리의 경우 버전을 직접 작성해야함 → 예)MyBatis
    6. Bom
      1. 자재 명세서(Bill of materials)
      2. 스프링부트에서 지원하는 라이브러리의 버전을 명시한 파일
      3. 사용한 스프링부트의 버전을 참고하여 Bom파일에서 사용하는 스프링부트의 버전에 맞는 라이브러리 참고
  3. 스프링부트 스타터
    1. 프로젝트를 만들면 많은 라이브러리가 필요하게 됨(tomcat, json 바인더, log 등)
    2. 개발자 입장에서는 프로젝트를 시작하기 위해 많은 라이브러리를 알고 있어야하고 대중적인 라이브러리를 자동으로 추가해줬으면 하는 생각
    3. 스프링부트는 이를 위해 특정 프로젝트를 시작하는데 필요한 관련 라이브러리를 모은 스프링부트 스타터 제공
    4. spring-boot-starter-web의 경우 스프링부트 웹 프로젝트를 시작하려고 하면, 스프링부트 웹과 관련된 필수 라이브러리를 자동으로 추가
    5. 이름 패턴
      1. spring-boot-starter-* 형식
      2. 스프링부트 공식 지원: spring-boot-starter-*
      3. 스프링부트 지원X: mybatis-spring-boot-starter
  4. 라이브러리 버전 변경
    1. 스타터 패키지의 경우 스프링부트에서 테스트를 많이 수행한 신뢰도 높은 라이브러리이지만
    2. 어쩔 수 없이 버전을 변경하고자 하는 경우도 있음
    3. ext['tomcat.version'] = 10.1.4 형식으로 작성함
    4. 여기서 ‘tomcat.version’과 같은 변수는 아래 링크 참조
    5. https://docs.spring.io/spring-boot/docs/current/reference/html/dependency-versions.html#appendix.dependency-versions.properties