Spring-Boot/스프링부트 - 핵심 원리와 활용

4. 스프링 부트 스타터와 라이브러리 관리

PHM 2023. 5. 15. 15:46

1. 라이브러리 직접 관리

* 라이브러리 관리의 어려움 *

- 어떤 라이브러리를 사용할지 버전은 어떻게할지, 호환 문제를 고민해야 한다.

 

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

- 외부 라이브러리 버전 관리

- 스프링 부트 스타터 제공

 

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

- 개발자는 원하는 라이브러리만 고르고 라이브러리의 버전은 생략해도 된다.

 

dependency-management 버전 관리

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

- 참고로 `spring-boot-dependencies`는 스프링 부트 gradle 플러그인에서 사용하기 때문에 개발자의 눈에 의존관계로 보이지 않는다..

 

*참고 - 스프링 부트가 관리하지 않는 라이브러리*

- 스프링 부트가 관리하지 않는 외부 라이브러리도 있다.

- 특히 아직 잘 알려지지 않거나 대중적이지 않은 경우가 그러한데, 이때는 라이브러리의 버전을 직접 적어주어야 한다.

 

*정리*

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

    ㆍ이제 개발자는 스프링 부트 자체의 버전만 지정하면 된다.

- 그리고 스프링 부트가 해당 스프링 부트 버전에 맞는 각 라이브러리의 호환성을 테스트 했기 때문에 안전하게 사용할 수 있다. ( 물론 항상 100% 완벽할 수 는 없다. )

 

3. 스프링 부트 스타터

- `spring-boot-starter-web` 이 라이브러리 하나로 지금까지 직접 넣어 주었던 모든 라이브러리가 포함된다.

- 이것은 사용하기 편리하게 의존성을 모아둔 세트이다.

    ㆍ이것을 하나 포함하면 관련 의존성 세트가 한번에 들어온다.

    ㆍ스타터도 스타터를 가질 수 있다.

- 스프링과 웹을 사용하고 싶으면 `spring-boot-starter-web`

    ㆍ스프링 웹 MVC, 내장 톰캣, JSON 처리, 스프링 부트 관련, LOG, YML 등등

- 스프링과 JPA를 사용하고 싶으면 `spring-boot-starter-data-jpa`

    ㆍ스프링 데이터 JPA, 하이버네이트 등등

 

* 스프링 부트 스타터 - 이름 패턴 *

- `spring-boot-starter-*`

- 쉽게 찾게 도와줌

- 공식 : `spring-boot-starter-*`

- 비공식 : `thirdpartyproject-spring-boot-starter`

    ㆍex) `mybatis-spring-boot-starter`

 

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

- `spring-boot-starter` : 핵심 스타터, 자동 구성, 로깅, YAML

- `spring-boot-starter-jdbc` : JDBC, HikariCP 커넥션풀

- `spring-boot-starter-data-jpa` : 스프링 데이터 JPA, 하이버 네이트

- `spring-boot-starter-data-mongodb` : 스프링 데이터 몽고

- `spring-boot-starter-redis` : 스프링 데이터 Redis, Lettuce 클라이언트

- `spring-boot-starter-thymeleaf` : 타임리프 뷰와 웹 MVC
- `spring-boot-starter-web` : 웹 구축을 위한 스타터, RESTful, 스프링 MVC, 내장 톰캣

- `spring-boot-starter-validation` : 자바 빈 검증기(하이버네이트 Validator)

- `spring-boot-starter-batch` : 스프링 배치를 위한 스타터

 

라이브러리 버전 변경

- 외부 라이브러리의 버전을 변경하고 싶을 때 다음과 같은 형식으로 편리하게 변경할 수 있다.

    ㆍ`ext['tomcat.version'] = '10.1.4'`