왓풀(whatpull)
Maven 본문
프로젝트의 전체적인 라이프사이클을 관리하는 관리도구이다.
프로젝트 객체모델(Project Object Model: POM) 이라는 개념을 바탕으로 프로젝트의 의존성관리, 라이브러리관리, 프로젝트 라이프사이클 관리 기능등을 제공하는 프로젝트 관리도구이다. 플러그인을 기반으로 소스코드로부터 배포 가능한 산출물을 만들어내는 빌드 기능을 제공한다.
빌드란? build
소스코드 파일을 컴퓨터에서 실행 할 수 있는 독립 SW가공물로 변환하는 과정, 결과물 이다.
즉, 작성한 소스코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원 등 (.xml, .jpg, .jar, .properties ..)을 JVM이나 WAS가 인식할 수 있는 구조로 패키징 하는 과정 및 결과물이라고 할 수 있다.
빌드도구 build tool
프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램이다.
계속해서 변동되는 라이브러리 추가, 버전 관리 등의 어려움을 해소하고자 등장했다.
ex) Maven, Ant, Gradle .. 등이 있다.
메이븐 특징
- 필요한 라이브러리를 특정문서(pom.xml)에 정의만 해주면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리 작동에 필요한 하위 라이브러리까지 네트워크를 통해서 자동으로 다운받아준다.
- 중앙 저장소를 통한 자동 의존성 관리를 한다.
- 중앙 저장소는 라이브러리를 공유하는 파일서버이고, 저장소는 아파치재단에서 운영관리하는 저장소를 사용할 수도 있고 별도의 사설 저장소를 사용할 수도 있다.
- 프로젝트 전체내용에 대한 기술 및 설정을 담당하는 pom과 라이브러리관리에 대한 dependency / repository 관리 모델 그리고 컴파일, 테스트, 패키징 등의 빌드생명주기를 다루는 라이프사이클 및 관련 플러그인들과의 연동을 다루는 부분으로 구성된다.
메이븐 아키텍쳐
메이븐 라이프 사이클 Life Cycle
메이븐 빌드는 미리정해진 동작 방식이 정해져 있고, 미리 정의된 빌드 순서가 있다.
이를 라이프사이클 LifeCycle 이라 한다.
메이븐 생명주기 단계는 각각 플로그인과 바인딩되어 실제로 바인딩된 플러그인이 명령을 실행하며, 단계순서에 따라 순차적으로 빌드가 실행되어 개발자가 실행한 명령을 수행한다.
의존성 관리.
- 메이븐은 POM에서 선언된 dependency설정으로 빌드 및 배포시 필요 라이브러리들을 관리하고 로컬 및 원격 저장소에서 선언된 라이브러리들을 다운받아 사용한다.
- 개발자는 프로젝트에 사용할 라이브러리를 직접 업로드하지 않고 pom.xml에 dependency로 정의만 해두면 메이븐이 repository에서 검색해서 자동으로 추가해준다. 심지어 참조하는 모든 라이브러리 까지 찾아서 추가해준다.
의존성 추가 ex)
<project>
......
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
//와 같이 선언하여 junit테스트를 위한 라이브러리를 사용할 수 있음.
- 의존성 분석 순서 2. 원격 저장소 리스트에서 의존성 확인
- 3. 1과 2가 실패하면 의존성 에러 보고
- 1. 로컬 저장소에서 의존성 확인
- 의존성<dependency> 필수 선언 항목<artifactId>: 프로젝트의 실제 이름으로 groupId와 합쳐져 프로젝트 식별에 쓰인다.
- <version>: 선언한 의존성 artifact의 버전으로 프로젝트 내에서 사용하는artifcat의 일관성을 추구할 수 있다.
- <groupId>: 부분적인 프로젝트나 조직에서의 라이브러리 집합을 식별하기 위해 제공한다.
'웹개발 > [지식] 프로그래밍' 카테고리의 다른 글
| OSI 7 Layer (0) | 2022.08.01 |
|---|---|
| Java VM(Java Virtual Machine) (0) | 2022.08.01 |
| Callback Functions (0) | 2022.08.01 |
| B-Tree 자료 구조 (0) | 2022.08.01 |
| Hash 자료 구조 (0) | 2022.08.01 |
Comments