작성된 코드를 실제 기기에서 실행 될 수 있는 소프트웨어로 변환하기 위한 과정을 말한다.
보통 컴파일을 포함한 배포하기 직전까지의 모든 과정을 ‘빌드 한다’ 라고 표현한다.
👣 컴파일이란?
개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정, 즉 컴퓨터가 이해할 수 있는 기계어(0과 1로 이루어진 코드)로 변환하는 작업을 말한다.
이 작업을 해주는 프로그램을 컴파일러라고 하고, 자바의 경우 자바 가상 머신(Java Virtual Machine, JVM)에서 실행 가능한 바이트코드 형태의 클래스 파일이 생성된다.
빌드 툴을 사용하는 이유는 다양한 개발이 가능해지면서 필요한 라이브러리들이 많아지게 되었기 때문이다.
작은 프로젝트라면 개발자가 수동으로 라이브러리 의존성을 추가해주고 빌드 할 수 있을 것이다. 하지만 프로젝트가 커진다면 개발자들 간의 버전 관리나 jar파일의 보안 위험 문제도 있을 수 있고 라이브러리를 매번 직접 추가하여 빌드하는 일은 번거로움이 따른다. 또한 빌드 프로세스를 수동으로 호출할 시 무엇을 빌드할지, 어떤 순서를 가지고 빌드할지, 어떤 의존성이 있는지 모두 파악하기 쉽지 않아 굉장히 비효율적이다.
이 때문에 발생한 것이 바로 빌드 자동화이며 빌드 도구는 빌드 자동화 시켜주는 도구(소프트웨어)이다.
자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구
자바 프로젝트들을 위한 빌드 자동화 도구
필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 네트워크를 통해서 라이브러리들을 자동으로 다운 받아 준다.
즉, Maven을 사용하면 jar 파일을 공유하지 않아도 pom.xml에 필요한 것을 명시하여 라이브러리를 아주 쉽게 관리할 수 있다.
Groovy를 기반으로 한 오픈소스 빌드 도구
*Groovy : JVM에서 실행되는 스크립트 언어
Gradle 특징
Ant의 유연한 구조적 장점 + Maven의 편리한 의존성 관리 기능
안드로이드 스튜디오의 공식 빌드 시스템으로 사용되고 있다.
Java, C/C++, 파이썬 등과 같은 여러 가지 언어를 지원한다.
설정 주입 방식(Configuration Injection)을 사용한다.
Gradle을 주로 사용하게 된 이유
간결한 스크립트 (build.gradle)
Gradle 이전의 빌드 도구인 Ant와 Maven은 XML 문법으로 스크립트를 작성하였다. 하지만 XML은 태그 문법 때문에 복잡한 빌드 스크립트를 작성하기에는 까다롭고 가독성 또한 떨어진다. 반면, Gradle은 Groovy 문법으로 간결한 스크립트를 작성할 수 있다.
빌드 속도
프로젝트 규모가 커지게 되면 빌드 속도 차이가 개발 생산성에 큰 영향을 미치게 된다. Gradle은 캐싱(caching)을 하기 때문에 Ant나 Maven같은 이전 빌드 도구보다 빌드 속도가 빠르다.
멀티 프로젝트 빌드
대규모 자바 프로젝트는 대부분 하나의 프로젝트 안에 여러 모듈이 동시에 개발되고, 각 모듈이 공통으로 사용하는 모듈도 만들어지게 되는데 이렇게 여러 모듈이 동시에 개발되는 경우 각각 따로 빌드 작업을 하면 번거로울 뿐 아니라 실수가 발생할 수 있다. Gradle은 멀티 프로젝트 빌드 기능을 제공하기 때문에 이런 번거로움과 실수를 줄일 수 있다.