본문 바로가기

Programming Language/Java

빌드도구란? (Maven, Gradle)

빌드도구는 소스코드에서 어플리케이션 생성을 자동화 하기 위한 프로그램이다. 빌드는 코드를 사용 or 실행 가능한 형태로 컴파일링, 링킹, 패키징 하는것을 포함한다.
기본적으로 빌드 자동화는 아래와 같은 정형화된 다양한 작업을 스크립팅하거나 자동화 하는 행위이다.

  1. 종속성 다운로드
  2. 소스코드를 바이너리코드로 컴파일
  3. 바이너리 코드를 패키징
  4. 테스트 실행
  5. 프로덕션 시스템에 배포

사용 이유

대규모 프로젝트에선 빌드프로세스를 수동으로 호출이 실용적이지 않다. 무엇을 빌드할지, 어떤 순서로 할지, 어떤 의존성이 있는지 모두 추적하기 쉽지 않기 때문이다. 빌드도구를 사용하면 이를 일관되게 할 수 있다.

Maven vs Gradle

Maven은 고정적이고 선형적인 단계의 모델을 기반으로 한다. 반면 Gradle은 작업 의존성 그래프를 기반으로 한다.
둘 다 다중 모듈 빌드를 병령으로 실행할 수 있지만, Gradle은 task의 업데이트 여부를 체크하기 때문에 incremental build를 허용한다. 이미 업데이트 된 태스크에 대해서는 작업을 실행하지 않으므로 빌드 시간이 단축된다.

Maven은 멀티 프로젝트에서 특정 설정을 다른 모듈에 사용하려면 상속을 받아야 하지만, Gradle은 설정 주입 방식을 제공한다.

Gradle은 concurrent에 안전한 캐시를 허용한다. 2개 이상의 프로젝트에서 동일한 캐시를 사용 할 경우, 서로 overwrite되지 않도록 checksum 기반의 캐시를 사용하고, 캐시를 repository와 동기화 시킬 수 있다.

Gradle은 커스터마이징이 Maven에 비해 간편하다.

역사

1세대 Make

  • 빌드 개념을 확립
  • Unix 계열 OS에서 사용

2세대 Ant

  • 범용성을 높임(크로스 플랫폼 대응)
  • Make를 java에 적용하려다보니 문제, 보완하기 위해 탄생
  • Java + XML 도입

3세대 Maven

  • 작성 효율을 높임
  • 빌드 생명주기와 프로젝트 객체모델(POM)개념을 도입 → Ant의 문제점인 장황한 빌드스크립트 문제를 해결

4세대 Gradle

  • 스크립트 언어로 유연성을 증대
  • Maven보다 빠름
  • 기존 Maven, Ivy 등 다른 빌드도구와 호환 가능

참조

 

What is a build tool?

For past 4 years, I have been programming with Eclipse (for Java), and Visual Studio Express (for C#). The IDEs mentioned always seemed to provide every facility a programmer might ask for (related...

stackoverflow.com

 

[번역] Gradle(1)

Gradle의 역사에 대해서 이해한다. > Gradle Document를 번역하고 요약한다. Gradle의 역사 > 사전지식 > 빌드와 컴파일 > 컴파일 : 컴파일러에 의해 소스코드가 바이너리 코드로 변환되는 과정 > 빌드 : 소

velog.io

 

빌드 툴(Build Tool)

* 빌드 툴이란 - 정형화된 작업을 자동화하기 위한 소프트웨어. - 최근에는 빌드 툴이 개발 프로세스 전반에 연관되어 있음. 그래서 툴의 영역이 아닌 시스템의 일부로 보고 빌드 시스템이라고

starrykss.tistory.com

 

[Spring] 빌드 관리 도구 Maven과 Gradle 비교하기.

spring에서 초기에 프로젝트를 생성할 때, 빌드 도구를 Maven으로 선택할지, Gradle로 선택할지에 대한 결정이 필요하다. ​ 그냥 나는 항상 익숙한데로, 의심의 여지 없이 spring boot 프로젝트를 진행

jisooo.tistory.com

 

 

'Programming Language > Java' 카테고리의 다른 글

Mybatis Executor, PreparedStatement  (0) 2021.05.15
Java 프로그램 개발과 구동  (0) 2021.03.11
JVM, JDK, JRE 란?  (0) 2021.03.10