빌드와 MAVEN?
MAVEN은 아파치 소프트웨어 재단이 개발하는 오픈소스 빌드 도구
MAVEN을 알기 전에 빌드 개념을 확실히 짚고 넘어가자
빌드는 개발자가 작성한 소스 파일들을 실행 가능한 소프트웨어 산출물로 만들어 주는 동작을 의미한다.
예를 들어, JAVA web application을 개발한다고 가정할 때 개발은 IDE에서 하겠지만, 실제로 그 소스가 실행되는 환경은 WAS일 것이다.
따라서 WAS와 같은 플랫폼 환경에서는 WAS가 인식할 수 있는 구조가 정해져 있고, 그것을. war라는 패키징 파일 구조를 특정 규칙에 따라 인식하도록 되어 있다.
그렇기 때문에, 개발자가 소스코드를 무슨 구조로 개발을 하였던간에 web application이 서비스화 되기 위해서는. war의 형식에 맞춰서 패키징이 되어야 한다.
이처럼 개발자가 작성한 web application을 .war와 같은 실행 가능한 소프트웨어 산출물로 만드는 일련의 과정들을 빌드라 한다.
사실, 위에서 언급한 빌드를 지원해 주는 툴은 MAVEN 이외에도 여러가지가 존재한다.
MAVEN이 등장하기 이전에, Apache ANT라는 최초의 JAVA 빌드 툴이 존재했었다.
그러나, 개발의 규모가 커지고 소프트웨어가 복잡해지면서 ANT의 한계가 드러나기 시작했다.
가장 큰 문제점은 라이브러리 dependency 관리 기능이 없었다.
예를 들어, 내 프로젝트에는 A.jar 라이브러리가 필요하지만, A.jar는 B.jar를 사용하여 만들었고, B.jar는 C.jar를 사용해서 만든 상황일 때, 개발자는 직접 라이브러리들을 다운로드하여 빌드를 해야 했다.
그러므로, 개발의 규모가 커지면 라이브러리 dependency 확인과 구성에만 엄청난 시간이 투자되었다.
MAVEN은 MAVEN Repository라는 중앙저장소를 통해 라이브러리 간 dependency를 관리하는 하는 기능을 제공한다.
중앙 저장소에는 라이브러리 개발자들이 직접 개발한 약 390만개의 라이브러리가 존재하여 대부분의 dependency 관리가 이루어진다.
따라서 MAVEN은 아래 그림과 같이 POM.xml에 a.jar에 만 명시해주면 a.jar가 의존하는 library까지 모두 다운로드하게 된다.