[Java] 빌드 도구(Build Tool)의 변화(Ant/Maven/Gradle)

뽀삐용·2023년 11월 8일
0

Java

목록 보기
3/4

📍빌드(Build)?

작성된 코드를 실제 기기에서 실행 될 수 있는 소프트웨어로 변환하기 위한 과정을 말한다.
보통 컴파일을 포함한 배포하기 직전까지의 모든 과정을 ‘빌드 한다’ 라고 표현한다.

👣 컴파일이란?
개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정, 즉 컴퓨터가 이해할 수 있는 기계어(0과 1로 이루어진 코드)로 변환하는 작업을 말한다.
이 작업을 해주는 프로그램을 컴파일러라고 하고, 자바의 경우 자바 가상 머신(Java Virtual Machine, JVM)에서 실행 가능한 바이트코드 형태의 클래스 파일이 생성된다.


📍빌드 도구(Build Tool)?

빌드 툴을 사용하는 이유는 다양한 개발이 가능해지면서 필요한 라이브러리들이 많아지게 되었기 때문이다.

작은 프로젝트라면 개발자가 수동으로 라이브러리 의존성을 추가해주고 빌드 할 수 있을 것이다. 하지만 프로젝트가 커진다면 개발자들 간의 버전 관리나 jar파일의 보안 위험 문제도 있을 수 있고 라이브러리를 매번 직접 추가하여 빌드하는 일은 번거로움이 따른다. 또한 빌드 프로세스를 수동으로 호출할 시 무엇을 빌드할지, 어떤 순서를 가지고 빌드할지, 어떤 의존성이 있는지 모두 파악하기 쉽지 않아 굉장히 비효율적이다.

이 때문에 발생한 것이 바로 빌드 자동화이며 빌드 도구는 빌드 자동화 시켜주는 도구(소프트웨어)이다.

  • 소스 코드를 컴파일, 테스트, 정적 분석(static analysis) 등을 실시하여 실행 가능한 애플리케이션으로 자동 생성한다.
  • 프로젝트를 진행하며 늘어나는 라이브러리를 자동으로 추가하고 관리하며 버전을 자동으로 동기화해준다.


📍빌드 도구 종류

  • Apache Ant
  • Maven
  • Gradle

🐜 Apache Ant (아파치 앤트)

자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구

  • Apache Ant 특징
    • 유닉스나 리눅스에서 사용되는 make와 비슷하나 자바언어로 구현되어 있어 자바 실행환경이 필요하며 자바 프로젝트들을 빌드하는데 표준으로 사용된다.
    • 어떠한 코딩 규칙이나 프로젝트 구조를 강조하지 않는다. (=> 유연성)
    • 빌드를 위한 환경구성을 XML 파일을 사용한다. (기본적인 빌드 파일명은 build.xml이다.)
  • Apache Ant 단점
    • 어떠한 코딩 규칙이나 프로젝트 구조를 강조하지 않는다는 말은 Ant를 사용하여 프로젝트를 빌드하는 개발자가 모든 명령을 스스로 작성해야 한다는 뜻이 되기도 한다.
    • 다른 개발자가 작성한 Ant의 빌드 파일을 이해하는데 시간이 더 소요된다.

🪶 Maven (메이븐)

자바 프로젝트들을 위한 빌드 자동화 도구

  • Maven 특징
    • Apache에서 Ant의 대안으로 개발하였다.
    • 빌드 절차를 간소화하여 쉽게 만들 수 있다.
    • 정해진 라이프사이클에 의하여 작업 수행한다. (=> 정형화된 빌드 시스템 제공)
    • 의존성을 설정하여 라이브러리 자동 관리
    • pom.xml 파일을 사용한다.
  • Maven 단점
    • 엄격한 프로젝트 구조를 규정하여 Ant에 비해 유연성이 떨어진다.
    • Maven에서 지원하지 않는 빌드 과정을 추가해야 하는 경우 상당히 복잡해진다.
    • 정적인 데이터를 저장하는 xml파일이기에 동적인 정의가 어렵다.

pom.xml (플러그인, 의존성 추가를 위한 파일)

필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 네트워크를 통해서 라이브러리들을 자동으로 다운 받아 준다.
즉, Maven을 사용하면 jar 파일을 공유하지 않아도 pom.xml에 필요한 것을 명시하여 라이브러리를 아주 쉽게 관리할 수 있다.


🐘Gradle(그래들)

Groovy를 기반으로 한 오픈소스 빌드 도구
*Groovy : JVM에서 실행되는 스크립트 언어

  • Gradle 특징

    • Ant의 유연한 구조적 장점 + Maven의 편리한 의존성 관리 기능

    • 안드로이드 스튜디오의 공식 빌드 시스템으로 사용되고 있다.

    • Java, C/C++, 파이썬 등과 같은 여러 가지 언어를 지원한다.

    • 설정 주입 방식(Configuration Injection)을 사용한다.


  • Gradle을 주로 사용하게 된 이유

    1. 간결한 스크립트 (build.gradle)
      Gradle 이전의 빌드 도구인 Ant와 Maven은 XML 문법으로 스크립트를 작성하였다. 하지만 XML은 태그 문법 때문에 복잡한 빌드 스크립트를 작성하기에는 까다롭고 가독성 또한 떨어진다. 반면, Gradle은 Groovy 문법으로 간결한 스크립트를 작성할 수 있다.

    2. 빌드 속도
      프로젝트 규모가 커지게 되면 빌드 속도 차이가 개발 생산성에 큰 영향을 미치게 된다. Gradle은 캐싱(caching)을 하기 때문에 Ant나 Maven같은 이전 빌드 도구보다 빌드 속도가 빠르다.

    3. 멀티 프로젝트 빌드
      대규모 자바 프로젝트는 대부분 하나의 프로젝트 안에 여러 모듈이 동시에 개발되고, 각 모듈이 공통으로 사용하는 모듈도 만들어지게 되는데 이렇게 여러 모듈이 동시에 개발되는 경우 각각 따로 빌드 작업을 하면 번거로울 뿐 아니라 실수가 발생할 수 있다. Gradle은 멀티 프로젝트 빌드 기능을 제공하기 때문에 이런 번거로움과 실수를 줄일 수 있다.

profile
하고 싶은 일 한 가지를 하려면

0개의 댓글