Maven 이란?

춘식이 개발로그·2022년 3월 28일
0
post-custom-banner

Maven이란 무엇인가?

Apache Maven의 사전적 정의는 다음과 같다.

Apache Maven은 자바용 프로젝트 관리도구로 Apache Ant의 대안으로 만들어졌다. Apache License로 배포되는 오픈 소스 소프트웨어이다.

빌드란?

프로젝트를 위해 작성한 JAVA 코드나 여러 자원들(.xml, .jar, .properties)를 JVM이나 톰캣같은 WAS가 인식할 수 있는 구조로 패키징 하는 과정 및 결과물이다.
또 단순히 컴파일해주는 작업 뿐만 아니라, 테스팅, 검사, 배포까지 일련의 작업들을 통틀어 빌드라고 한다.

특징

  • 빌드 과정을 쉽게 만들기
  • 정형화된 빌드 시스템 제공
  • Maven은 POM과 플러그인 세트를 사용하여 프로젝트를 빌드한다.
  • 양질의 프로젝트 정보 제공
  • 더 나은 개발.

장점

  • 편리한 의존성 라이브러리 관리
  • 정해진 빌드 방법을 사용하여 협업에서 유리하게 작용
  • 다양한 플러그인을 통해 많은 작업이 자동화됨

플러그인을 구동해주는 프레임워크로, 모든 작업은 플러그인에서 수행하게 된다.

Maven LifeCycle

메이븐은 프레임워크이기 때문에 동작 방식이 정해져 있는데, 일련의 단계(Phase)에 연계된 Goal을 실행하는 과정을 Build라고 하며, 미리 정의되어 있는 Build들의 순서를 라이프사이클 이라 한다. 즉, 미리 정의된 빌드순서를 라이프사이클(LifeCycle)이라 하고, 각 빌드 단계를 Phase라고 한다.

기본적으로 Eclipse에서는 Run as를 눌러보면 기본적인 Maven Build LifeCycle을 볼 수 있는데,

여기 나와있는 것들을 간단한 것들 중 일부만 간단히 설명하자면 아래와 같다.
Maven build : 메이븐 빌드를 실행한다.
Maven build.... : 새로운 사용자 빌드를 만든다.
Maven clean : target에 지정된 모든 소스를 삭제한다.
Maven generate-sources : 컴파일 과정에 포함될 소스를 생성한다.
Maven install : Local Repository에 패키지를 복사한다.

일반적으로 메이븐은 3개의 표준 라이프사이클을 제공한다.

  • Clean : 빌드 시 생성되었던 Output을 지워준다.
  • Default(Build) : 일반적인 빌드 프로세스를 위한 모델이다.
  • Site : 프로젝트 문서와 사이트 작성을 수행한다.

아래의 그림에서 처럼 compile, test, package등의 과정은 Build LifeCycle에 속한다.
또한 Maven은 모든 빌드 단위에 대한 LifeCycle이 예약되어 있어서 개발자가 임의로 변경 할 수 없다.

위에서 잠깐 나온 Phase와 Goal에 대해 그림으로 표현하면 아래와 같다.

Phase는 다음과 같은 특성을 지닌다.

  • Phase는 특정 순서에 따라서 goal이 실행되도록 구조를 제공한다.
  • Phase간에는 의존 관계가 있다. ex) compile phase가 수행되는 순서는 정해진 이전 phase의 다음이다.

즉, 모든 빌드단계는 이전 단계가 성공적으로 실행되었을 때 실행된다는 것이 Dependency 이다.

Goal은 특정 작업, 최소한의 실행 단위(task)로, 각 단계(Phase)는 0개 이상의 goal과 연관이 있고, 빌드 단계들은 goal들로 구성되어 있다고 말할 수 있다.

Ant vs Maven

  • Ant는 비교적 자유도가 높은 편 (전처리 / 컴파일 / 패키징 / 테스팅 / 배포 가능)
  • Maven은 정해진 라이프사이클에 의하여 작업 수행하며, 전반적인 프로젝트 관리 기능까지 포함. (Build Tool + Project Management)

요약.

  • 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리 + 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들 까지 자동으로 네트워크를 통해서 받아준다.

참고 글

post-custom-banner

0개의 댓글