반응형
우선 메이븐이란 빌드 도구(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"에 선언되어 있습니다.
참고 자료
반응형
'2020 > IT Q_A' 카테고리의 다른 글
jdk설치 및 환경변수 설정 (0) | 2020.01.16 |
---|---|
Maven Download & install (0) | 2020.01.15 |
spring prefix / suffix 알아보기 (0) | 2020.01.08 |
Tensorflow 실행 오류 (0) | 2019.12.19 |
UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 235: illegal multibyte sequence (0) | 2019.12.19 |