Maven 이란 무엇인가?
Apache Maven은 자바용 프로젝트 관리도구로 Apache Ant의 대안으로 만들어졌다.
Apache License로 배포되는 오픈 소스 소프트웨어이다.
프로젝트를 작업하다보면 여러 라이브러리 파일이 필요할때가 있다.
어떤 라이브러리는 다른 라이브러리를 의존하는 경우도 있고 이러한 라이브러리 덩어리들을 메이븐 pom.xml에 설정하기만 하면 네트워크를 통해서 필요한 라이브러리를 설치해준다.
Ant vs Maven
지금은 gradle이 나왔지만 maven이 없던시절에는 ant라는 빌드를 사용했다.
Ant는 비교적 자유도가 높은 편
* (Ant : 전처리 / 컴파일 / 패키징 / 테스팅/ 배포 가능)
Maven은 정해진 라이프사이클에 의하여 작업 수행하며, 전박적인 프로젝트 관리 기능까지 포함
* (Builde Tool + Project Management)
구조
실습
Maven 프로젝트 구조
다음과 같은 프로젝트가 형성된것을 보인다. 하나하나 살펴보도록 하자.
pom.xml
pom.xml은 메이븐을 이용하는 프로젝트의 root에 존재하는 xml 파일이다. pom은 프로젝트 객체 모델(Project Object Model)을 뜻한다. 프로젝트 당 1개가 있다. 이것만 보면 프로젝트의 모든 설정, 의존성 등을 알 수 있다.
groupId : 프로젝트의 패키지 명칭
artifactId : artifact 이름, groupId 내에서 유일해야 한다.
name : 어플리케이션 명칭
packaging : 패키징 유형(jar, war 등)
distributionManagement : artifact가 배포될 저장소 정보와 설정
parent : 프로젝트의 계층 정보
dependencyManagement : 의존성 처리에 대한 기본 설정 영역
dependencies : 의존성 정의 영역
repositories : 이거 안쓰면 공식 maven 저장소를 활용하지만, 사용하면 거기 저장소를 사용
build : 빌드에 사용할 플러그인 목록을 나열
reporting : 리포팅에 사용할 플러그인 목록을 나열
properties : 보기좋게 관리가능, 보통 버전에 많이 쓴다.
1. Maven의 동작과정Maven은 pom.xml 파일을 위에서부터 아래로 순차적으로 읽습니다.
2. 이 때, Maven은 [groupId / artifactId / version]을 기준으로 각각의 라이브러리를 구분합니다.
3. 구분한 라이브러리가 로컬 저장소에 있는지 확인합니다.
4-1. 로컬 저장소에 동일한 라이브러리가 존재할 경우, 원격 저장소로부터 해당 라이브러리를 다운로드 받지 않습 니다.
4-2. 로컬 저장소에 동일한 라이브러리가 존재하지 않을 경우, 원격 저장소로부터 필요한 jar 파일을 다운로드 받아 로컬 저장소에 복사해줍니다.
Gradle은 무엇인가?
그래이들(이하 Gradle)은 그루비(Groovy)를 기반으로 한 빌드 도구이다. Ant와 Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개된 빌드 도구이다.
실습
Gradle 구성
repositories
gradle이 필요한 라이브러리를 자동으로 다운로드 하기위해 사용하는 저장소
jcenter() 과 mavenCentral()이 주로사용된다
jcenter() 과 mavenCenteral()은 Gradle의 메소드이다.
Dependencies
저장소에서 필요한 라이브러리를 사용하기위한 문장
의존문 종류
implementation
* 컴파일시 의존하는(사용) 라이브러리를 지정한다.
testCompile 'junit:junit:4.12
* 테스트 컴파일(단위테스팅)에 사용하는 라이브러리를 지정
classpath. '...라이브러리'
* 컴파일부터 실행시까지 의존하는 라이브러리 지정에 사용된다.
Ant
XML 기반으로 빌드 스크립트를 작성한다.
자유롭게 빌드 단위를 지정할 수 있다.
간단하고 사용하기 쉽다.
유연하지만 프로젝트가 방대해지는 경우 스크립트 관리나 빌드 과정이 복잡해진다.
생명주기(Lifecycle)을 갖지 않아 각각의 결과물에 대한 의존관계 등을 정의해야 한다.
Maven
XML 기반으로 작성한다.
생명주기(Lifecycle)와 프로젝트 객체 모델(POM, Project Object Model)이란 개념이 도입됐다.
Ant의 장황한 빌드 스크립트를 개선했다.
pom.xml에 필요한 라이브러리를 선언하면 자동으로 해당 프로젝트로 불러와 편리하다.
상대적으로 학습 장벽이 높다.
라이브러리가 서로 의존하는 경우 복잡해질 수 있다.
Gradle
Gradle은 앞서 살펴본 Ant와 Maven이 가진 장점을 모아 만들었다. 의존성 관리를 위한 다양한 방법을 제공하고 빌드 스크립트를 XML 언어가 아닌 JVM에서 동작하는 스크립트 언어 ‘그루비’ 기반의 DSL(Domain Specific Language)를 사용한다.
그루비(Groovy)는 자바 문법과 유사하여 자바 개발자가 쉽게 익힐 수 있는 장점이 있으며 Gradle Wrapper를 이용하면 Gradle이 설치되지 않은 시스템에서도 프로젝트를 빌드할 수 있다.
'개인공부' 카테고리의 다른 글
OAuth, OAuth2 (0) | 2020.10.04 |
---|---|
Layered Architecture (0) | 2020.10.03 |
직렬화란? (0) | 2020.10.03 |
템플릿 엔진(Template Engine)이란 ? (0) | 2020.10.03 |
HTML (0) | 2020.09.28 |