반응형

  우선 메이븐이란 빌드 도구(build tool)입니다.

  프로젝트의 빌드과정을 조금 더 쉽게 해주는 것이지요.  그렇다고 해서 이클립스가 빌드 툴이냐? 하면 그것은 아닙니다. 이클립스의 경우는 IDE입니다. 즉 메이븐은 빌드과정에 대해 특화 시킨 것이 메이븐입니다.

  MAVEN처럼 빌드를 도와주는 빌드 툴은 Gradle, Ant등이 있습니다.

 

Ant와는 어떠한 차이점이 있을까요?

  • Ant와 같은 툴은 전적으로 전처리(preprocessing), 컴파일(compilation), 패키징(packaging), 테스팅(testing), 배포(distribution)하는데 초점이 잘 맞추어져 있다.
  • 메이븐과 같은 프로젝트 관리 툴은 빌드 툴을 바탕으로 여러 기능을 종합적으로 제공한다.
  • 메이븐은 빌드에 관한 기능들과 보고서 작성, 웹사이트 생성, 작업 팀의 구성원 간 소통 기능을 제공한다.

메이븐 활용 패턴

1. build

  • 소스 코드를 컴파일 한다
  • 테스트 코드를 컴파일 한다
  • 기타 패키지 생성을 위한 바이너리를 생성한다

2. Package

  • 배포 가능한 jar, war, exe 파일 등을 생성한다

3. Test

  • 단위 테스트(Unit, Test)등을 실행한다
  • 빌드 결과가 정상인지 점검한다

4. Report 

  • 빌드/패키지/테스트 결과를 정리하고, 빌드 수행 리포트를 생성한다.

5. Release

  • 빌드 후 생성된 아티팩트(artifact)를 로컬 혹은 원격 저장소에 저장(배포)한다.

메이븐의 주요 개념

1. Plugin

  • 메이븐(Maven)은 플러그인 실행 프레임워크이다.
  • 메이븐의 플러그인 메커니즘에 의해 기능이 확장된다. (모든 작업은 플러그인이 수행한다.)
  • 사용자 관점에서는 앤트(Ant)의 태스트(Task)혹은 타겟(Target, 정확히 일치하지 않음)과 유사하다.
  • 플러그인은 다른 산출물(artifacts)와 같이 저장소에서 관리된다.
  • 플러그인은 goal의 집합이다.

2. LifeCycle

  • 메이븐의 동작 방식은 일련의 단계(phase)에 연계된 goal을 실행하는 것이며, 논리적인 작업 흐름인 단ㄱ의 집합이 라이프사이클이다 ( 빌드단계<build phases>들은 사전 정의된 순서대로 실행되고 모든 빌드 단계는 이전 단계가 성공적으로 실행되었을 때, 실행된다)
  • 빌드 단계는 goal들로 구성된다( goal은 특정 작업, 최소한의 실행단위이다. 각 단계는 0개 이상의 goal과 연관된다.)
  • 메이븐은 3개의 표준 라이프사이클을 제공한다
  • 1. cealn: 빌드 시 생성되었던 산출물을 지운다.
  • 2. default: 일반적인 빌드 프로세서를 위한 모델
  • 3. site : 프로젝트 문서와 사이트 작성을 수행한다.

 

내장 라이프 사이클 

<default 라이프 사이클>

<clean 라이프사이클>

<site 라이프사이클>

 

의존성(dependency)

  • 라이브러리 다운로드 자동화입니다. 더 이상 필요한(의존성 있는) 라이브러리를 하나씩 다운로드 받을 필요가 없습니다. 필요하다고 선언만 하면 메이븐이 자동으로 다운받아 줍니다.
  • 메이븐은 선언적(명력식이 아니다): 사용되는 jar파일들을 어디서 다운로드 받고, 어느 릴리즈(버전)인지 명시하면, 코딩하지 않아도 메이븐이 알아서 관리합니다. (재 다운로드, 최신 버전 설치 등)
  • 메이븐이 관리합니다. (라이브러리 디렉터리를 생성할 필요가 없습니다. 이클립스 내에서 라이브러리, 클래스패스 환경 설정을 할 필요도 없습니다.)

프로파일(profile)

  • 서로 다른 대상 환경(target environment)를 위한 다른 빌드 설정 (다른 운영체제, 다른 배포 환경)
  • 동작 방식(Activation) : -P 명령형 실행환경 옵션, 환경변수 기반
  • 메이븐은 정상 절차(step) 이외에 프로파일을 위한 절차를 추가로 수행합니다.

POM(Project Object Model, 프로젝트 객체 모델)

  • 프로젝트 당 하나의 pom.xml을 가집니다. pom은 프로젝트 자체와 의존성에 대한 설정 및 정보를 포함하고 메이븐을 pom.xml을 읽어, 프로젝트를 가공하는 방법을 이해합니다.
  • 3가지 "coordinates"를 이용해 자원을 식별합니다
  • 그룹 ID(Group ID)
  • 아티팩트 ID(Artifact ID)
  • 버전(Version)

POM 속성

<artifactId> 아티팩트의 명칭, groupId 범위 내에서 유일해야 합니다.
<groupId> 일반적으로 프로젝트의 패키지 명칭
<version> 아티팩트(artifact)의 현재 버전
<name> 어플리케이션의 명칭
<packaging> 아티팩트 패키지 유형, POM, jar, WAR, EAR, EJB, bundle, ....선택가능
<parent> 프로젝트의 계층 정보
<version> 아티팩트의 현재 버전
<scm> 소스 코드 관리 시스템 정보
<dependencyManagement> 의존성 처리에 대한 기본 설정 영역
<dependencies> 의존성 정의 및 설정 영역

 

CoC(Convention over Configuration)

  • 메이븐의 큰 철학이며 명확한 '관습'으로 인해 더 편해진다는 의미입니다.
  • 루비 온 레일스(Ruby on Rails)등으로 유명해졌습니다.
  • 관습 혹은 기본 값은(Conventions, defaults)거의 다, 보이지 않는 "super pom"에 선언되어 있습니다.

 

참고 자료

 

반응형
블로그 이미지

꽃꽂이하는개발자

,