더북(TheBook)

이런 방법으로 사용하면 group, module, version 속성은 의존성을 명시적으로 지정한다. 이 방법 말고도 그레이들 빌드 명세에 의존성을 선언하는 방법처럼 콜론으로 구분된 형식으로 의존성을 더 간결하게 선언할 수도 있다.


@Grab("com.h2database:h2:1.4.192")

이 두 가지 방법은 @Grab 애너테이션을 사용하는 교과서적인 예다. 하지만 스프링 부트 CLI는 @Grab 애너테이션을 더 사용하기 쉽게 하려고 두 가지 방법으로 @Grab 애너테이션을 확장한다.

먼저 의존성 대부분은 버전을 명시하지 않아도 된다. 따라서 이 H2 데이터베이스 의존성 예는 다음 @Grab 애너테이션으로 선언할 수 있다.


@Grab("com.h2database:h2")

의존성 버전은 현재 사용 중인 CLI 버전으로 결정된다. 예를 들어 스프링 부트 CLI 1.3.6 버전을 사용한다면 H2 의존성은 1.4.192 버전이 된다.

아직 끝이 아니다. 자주 사용하는 많은 의존성에서 그룹 ID를 생략하고 @Grab 애너테이션에 모듈 ID만 전달하는 식으로 의존성을 선언하면 된다. 따라서 앞의 H2 @Grab 애너테이션을 다음과 같이 선언할 수 있다.


@Grab("h2")

그룹 ID와 버전을 요구하는 의존성과 단지 모듈 ID만으로 @Grab 애너테이션을 사용할 수 있는 의존성이 어떤 것인지 어떻게 알 수 있을까? 스프링 부트 CLI가 인식하는 모든 의존성을 부록 D에 수록했다. 하지만 보통은 @Grab 애너테이션에 간단히 모듈 ID만으로 의존성을 선언한 후 의존성이 해결되지 않으면 그룹 ID와 버전을 추가한다.

모듈 ID만으로 의존성을 선언하는 방식은 매우 편리하지만, 스프링 부트 버전과 호환되지 않는다면 어떻게 해야 할까? 스프링 부트 스타터 중 하나가 전이적으로 끌어온 특정 버전의 라이브러리 대신 버그를 고친 새로운 버전을 사용하고 싶다면 어떻게 해야 할까?

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.