메이븐 pom 파일 전체를 자세히 살펴볼 수는 없지만 몇 가지 핵심 부분은 살펴보자. 코드 5-1의 메이븐 파일에서 중요한 부분이 네 개 있다. 첫 번째는 스프링 부트 버전이고, 두 번째는 사용할 스프링 클라우드 버전이다. 이 코드 예제에서는 Hoxton.SR1 스프링 클라우드 버전을 사용한다. 코드에서 강조된 세 번째 부분은 서비스에서 사용하는 의존성이며, 마지막 부분은 스프링 클라우드 컨피그의 상위 BOM(Bill Of Materials)이다.
상위 BOM에는 클라우드 프로젝트에서 사용되는 모든 타사 라이브러리와 의존성, 해당 버전을 구성하는 개별 프로젝트의 버전 번호가 포함된다. 이 예제에서는 이전에 pom 파일의 <properties>에서 정의된 버전을 사용한다. BOM 정의를 사용하기 때문에 스프링 클라우드와 호환되는 하위 프로젝트 버전을 사용하는 것을 보장할 수 있다. 게다가 하위 의존성에 대한 버전 번호도 선언할 필요가 없다.
어서, 기차를 타, 릴리스 기차를!
스프링 클라우드는 메이븐 프로젝트의 레이블을 지정하는 데 종래와 다른 방식을 사용한다. 스프링 클라우드는 독립적인 하위 프로젝트의 모음이기 때문에 스프링 클라우드 팀은 ‘릴리스 기차(release train)’라는 것을 통해 프로젝트 업데이트를 릴리스한다. 스프링 클라우드를 구성하는 모든 하위 프로젝트가 하나의 메이븐 BOM으로 패키징되어 통째로 릴리스된다.
스프링 클라우드 팀은 런던 지하철역 이름을 릴리스 이름으로 사용하며, 주요 릴리스에는 알파벳 순에 따라 역명을 사용했다. 집필 시점에는 Angel부터 Brixton, Camden, Dalston, Edgare, Finchley, Greenwich, Hoxton까지 많은 릴리스가 있었다. Hoxton은 최신 릴리스이지만 여전히 하위 프로젝트에 대한 여러 릴리스 후보 브랜치가 있다.2
한 가지 주목할 점은 스프링 부트는 스프링 클라우드 릴리스 기차와 무관하게 릴리스된다는 것이다. 따라서 스프링 부트 버전과 스프링 클라우드 릴리스가 맞지 않으면 호환되지 않는다. 스프링 클라우드 웹 사이트(http://projects.spring.io/spring-cloud/)에서 릴리스 기차에 포함된 다양한 하위 프로젝트 버전과 함께 스프링 부트와 스프링 클라우드 간 버전 의존성을 확인할 수 있다.