Spring

자바 빌드 툴 - 앤트(Ant) 메이븐 (Maven)과 그레이들(Gradle)

비뀨_ 2021. 11. 4. 20:58
 

Gradle Build Tool

Accelerate developer productivity. Gradle helps teams build, automate and deliver better software, faster.

gradle.org

 

 

Maven – Welcome to Apache Maven

Welcome to Apache Maven Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. If you

maven.apache.org

 

먼저 빌드 툴을 쓰기 위해서는 빌드가 뭐인지를 알아야 할 것 같다.

 

예를 들어서 어린왕자라는 책을 우리가 보기까지의 과정을 살펴보면

 

1. 영어로 된 원서를 한글로 번역한다.   :  컴파일

2. 원서를 인쇄해 책으로 만든다. : 빌드

3. 인쇄한 책을 서점에 비치한다. : 배포  

 

의 과정으로 설명할 수 있다. 

1번과 2번의 과정을 묶어 빌드(build) 한다 라고 할 수 있다.

 

다시 말해 배포하기 전의 과정을 빌드한다라고 할 수 있다.

참고 : https://itholic.github.io/qa-compile-build-deploy/

 

[QA] 컴파일? 빌드? 배포? 개념과 차이는 무엇일까?

컴파일, 빌드, 배포의 개념 및 차이

itholic.github.io

 

더보기

1. 빌드와 실행 ( Build )

프로그래밍적으로 본다면.

빌드란 소스 코드 파일을 컴퓨터에서 실행할 수 있는 것으로 변환시키는 과정을 말한다.

-> 여러 클래스와 코드들을 하나의 파일( Artifact )로 만드는 것. 

 

빌드를 좀더 자세히 세분화 해본다면

  1. 소스 코드를 컴파일한다.
  2. 테스트 코드를 컴파일한다.
  3. 테스트 코드를 실행한다.
  4. 테스트 코드 리포트를 작성한다.
  5. 기타 추가 설정한 작업들을 진행한다.
  6. 패키징을 수행한다.
  7. 최종 결과물 ( Artifact)을 만들어 낸다.

정도로 나눌 수 있다.

 

테스트 코드- 내가 작성한 코드를 자동 테스트해 주는 코드를 추가로 작성한 것이다.

패키징 - 오픈 소스를 내가 사용한 코드와 하나로 묶는 작업.

 

빌드를 왜 자동화해야 하는가??

 

만약 빌드를 팀에서 수동으로 작성하게 된다면

여러 사람이 모든 코드를 하나로 합칠 때 (패키징) 분명히 실수가 생기기 마련이다.

실수를 한다고하면 인건비 , 시간 등의 자원 ( Resource )이 많이 들 수 밖에 없다.

 

빌드 툴

  • 프로젝트에서 필요한 xml , properties , jar 파일들을 자동으로 인식하고 빌드 해주는 도구.
  • 소스코드를 컴파일 , 테스트 , 정적분석 등을 하여 실행 가능한 앱으로 빌드해 준다.
  • 프로젝트 정보 관리 , 테스트 빌드 , 배포 등의 작업을 진행해준다.
  • 외부 소스 코드 ( 외부 라이브러리 ) 자동 추가 , 관리 :  외부 소스 코드의 버전 관리 등

그렇기 때문에 빌드를 자동으로 해 주는 빌드 자동화 툴이 필요한 것이며 , 그게 Ant , Maven , Gradle 이다.

 

1. 앤트 ( Ant )  

특징

- Apache 재단에서 만들어졌다.

- 설정을 위해 xml을 사용한다.

- 간단하고 사용하기 쉽다.

 

단점

- 복잡한 처리를 할 때(규모가 커질 때) 빌드 스크립트가 엄청 보기 힘들어져 관리가 어렵다.

- 외부 라이브러리를 관리하는 구조가 없다.

- 라이프 사이클이 없다.

 

 

2. 메이븐 ( Maven )

라이브러리 추가 :  https://mvnrepository.com/ 

특징

- Apache 재단에서 만들어졌다.

- Ant를 대체하기 위해 개발됨.

- 설정을 위해 pom.xml을 사용한다.

- 외부 라이브러리를 관리할 수 있다.

- 빌드 스크립트를 깔끔하게 만들 수 있게 도와준다.

- Ant가 가지고 있는 단점들을 대부분 극복. ( 라이프 사이클 도입)

 

단점

- 특정 경우에 xml이 복잡해진다.

- xml 형태가 가지는 자체적인 한계가 있다.

 

대표 태그 설명

태그 설명
modelVersion maven의 버전을 의미
groupId 프로젝트 그룹 id를 뜻하고 , 통상적으로 도메인을 역순으로 적어 사용. (beetrb.test -> test.beetrb)
artifactId groupId 외에 다른 프로젝트와는 구분될 수 있는 프로젝트의 id를 작성
version 프로젝트의 버전을 의미하고, 개발 단계에 따라 구분하여 작성. (ex : 1.0.3)
name 프로젝트의 이름
description 해당 프로젝트의 간략한 소개,설명을 작성
properties pom.xml 파일 내에서 자주 사용되는 중복 상수를 정의하는 영역 ${태그명} 으로 사용
dependencies 의존성을 가지고 사용하는 라이브러리를 정의. <dependency> 태그 사용하여 구분
buid 프로젝트 빌드와 관련된 정보를 설정하는 영역 (어떤 테스트 , 어떤걸 jar로 만들지 등 설정)

 

3. 그레이들 ( Gradle ) 

특징

- 설정을 위해 pom.xml 대신   build.gradle (Groovy 스크립트)를 사용한다. (Groovy는 JVM 언어)

- xml의 한계가 없기 때문에 유연하게 빌드 스크립트를 작성할 수 있다.

- 외부 라이브러리를 관리할 수 있다.

- 안드로이드 프로젝트 표준 빌드 시스템.

- 멀티 프로젝트(Multi-project)의 빌드에 최적화하여 설계됨.

- 캐싱이 되어 성능이 좋다. (Maven에 비해 최대 100배 )

- Maven에 비해 더 구성이 간결하다.

- 설치 없이 사용할 수 있다.(Gradle Wrapper)

 

 

태그 설명
repositories 라이브러리가 저장된 위치를 설정.
mavenCentral 기본 Maven Repository
dependencies 라이브러리 사용을 위한 의존성 설정

build.gradle 예시

 

내가 배우려고 하는건 gradle 이기 때문에, 다음에 gradle 사용법을 조금 더 정리하려고 한다.