더북(TheBook)

5.2 @Grab 애너테이션으로 의존성 관리하기

 

스프링 MVC와 JdbcTemplate에서 그루비 컴파일 오류는 스프링 부트 CLI가 필요한 의존성을 가져와 클래스패스에 추가했다. 하지만 의존성이 필요한데 의존성을 자동으로 해결하는 컴파일 오류가 발생하지 않는다면 어떻게 해야 할까? 또는 필요한 의존성을 CLI가 알지 못하는 상황이라면 어떻게 해야 할까?

독서 목록 예제에서 Thymeleaf 템플릿을 사용하여 뷰를 작성하려면 Thymeleaf 라이브러리가 필요했다. 내장 H2 데이터베이스를 가지려면 H2 데이터베이스 라이브러리가 필요했다. 그러나 어떤 그루비 코드도 Thymeleaf나 H2 클래스를 직접 참조하지 않았기 때문에 자동 해결을 유발하는 컴파일 실패가 일어나지 않았다. 그러므로 @Grab 애너테이션 의존성을 Grabs 클래스에 추가하여 CLI에 의존성을 알려 주어야 한다.

Note @Grab 애너테이션을 어디에 두어야 할까?

@Grab 애너테이션을 꼭 별도의 클래스에 둘 필요는 없다. ReadingListControllerJdbcReadingList Repository에 애너테이션을 추가해도 여전히 마법 같은 기능을 선보일 것이다. 하지만 구조적인 면을 고려하여 필요한 @Grab 애너테이션을 모두 붙인 별도의 빈 클래스를 정의하는 것이 좋다. 이렇게 하면 명시적으로 선언한 라이브러리 의존성을 모두 한곳에서 볼 수 있다.

 

@Grab 애너테이션은 그루비의 Grape(GRoovy Adaptable Packaging Engine 또는 GRoovy Advanced Packaging Engine) 특징에서 왔다. 요약하자면 Grape는 그루비 스크립트가 런타임에 메이븐이나 그레이들 같은 빌드 도구를 사용하지 않고 의존성 라이브러리를 다운로드할 수 있게 한다. Grape는 @Grab 애너테이션에 기능적인 면을 제공할 뿐만 아니라 스프링 부트 CLI가 코드에서 추론한 의존성을 가져오는 데도 사용한다.

@Grab 애너테이션을 사용하는 것은 의존성을 나타내는 것만큼이나 간단하다. 예를 들어 프로젝트에 H2 데이터베이스를 추가한다고 하자. 다음 @Grab 애너테이션을 프로젝트의 그루비 스크립트 중 하나에 추가하면 된다.


@Grab(group=“com.h2database”, module=“h2”, version=“1.4.192”)

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