5.1.3 무슨 일이 일어났을까?
이미 짐작했듯이 스프링 부트 CLI에는 단순히 그루비를 이용하여 스프링 애플리케이션을 쉽게 작성하는 것 외에도 많은 기능이 있다. 스프링 부트 CLI에는 몇 가지 숨은 기능이 있다.
• CLI는 스프링 부트 자동 구성과 스타터 의존성을 활용할 수 있다.
• CLI는 어떤 타입을 사용했는지 감지하고 해당 타입을 지원하려고 적절한 의존성 라이브러리를 자동으로 해석한다.
• CLI는 흔히 사용하는 타입이 어느 패키지에 속하는지 알고 있으며, 해당 타입을 사용하면 그에 대응하는 패키지를 그루비의 기본 패키지로 추가한다.
• CLI는 의존성 자동 해결과 자동 구성을 적용하여 실행 중인 웹 애플리케이션을 감지하고, 내장 웹 컨테이너(기본값은 톰캣)를 자동으로 포함해서 애플리케이션을 구동한다.
이는 CLI가 제공하는 기능 중 매우 중요하며 특징적이다. 그루비 문법은 보너스에 불과하다!
스프링 부트 CLI로 독서 목록 애플리케이션을 시작하면 몇 가지 마법 같은 모습을 볼 수 있다. 그중 CLI가 가장 먼저 보여 주는 마법은 내장 그루비 컴파일러를 이용하여 그루비 코드 컴파일을 시도하는 것이다. CLI는 여러분도 모르는 사이에 컴파일을 시도하지만 JdbcTemplate, Controller, RequestMapping 등 코드의 알 수 없는 타입 때문에 컴파일하지 못한다.
그러나 CLI는 컴파일을 포기하지 않는다. CLI는 스프링 부트 JDBC 스타터를 의존성으로 추가하면 클래스패스에 JdbcTemplate을 추가할 수 있다는 것을 안다. 또 스프링 부트 웹 스타터를 의존성으로 추가하여 스프링 MVC 타입을 찾을 수 있다는 것도 안다. 따라서 CLI는 메이븐 리포지토리(기본값은 Maven Central)에서 이런 의존성을 찾아 적용한다.