빌드 도구

HH_Nebula·2023년 1월 27일
0

빌드 도구란?

프로그래밍을 배우는 입장에서는 단순한 실습 예제 소스로 구성된 프로그램을 만들기 때문에 코드 이외의 부분에 대해서는 고려할 사항이 거의 없다. 그러나 실제 프로젝트에서는 직접 작성해야 할 수십 개의 클래스와 여러 외부 라이브러리로 구성되는 경우가 많다. 또한 프로그램의 실제 구현 코드 외에 테스트를 위한 코드도 존재하며 프로젝트 규모가 커질수록 개발자에게 비효율적인 여러 요소가 있을 수 있다.

복잡한 프로젝트의 소스를 체계적으로 컴파일하고 관련 라이브러리의 버전이나 종속성 관리를 쉽게 도와줄 방법이 필요하다.

이를 위해 가장 오래된 자바 빌드 도구로는 Ant가 있으며 2004년에는 아파치 프로젝트로 Maven이 새롭게 나오게 되었다. 이후 오랜 기간 Maven은 절대 다수가 사용하는 자바 빌드 도구가 되었으며 특히 스프링 프레임워크 개발에서 기본 빌드 도구로 활용되었다. 시간이 지남에 따라 좀 더 유연하면서도 복잡한 처리를 쉽게 하기 위한 요구 사항의 증대로 2012년 Gradle이 나오게 되었고 안드로이드 앱 개발의 기본 빌드 도구가 되었다. 현재 Maven과 Gradle이 가장 대표적인 빌드 도구다.

빌드 도구 선택하기

지금 당장은 Maven과 Gradle 중 무엇을 선택해도 전혀 상관없다. 또한 빌드 도구를 잘 사용하기 위해서는 많은 경험이 필요하고 프로젝트 규모가 어느 정도 되어야 제대로 된 활용이 가능하기 때문에 초급 개발자 수준에서는 빌드 도구 선택에 대해 지나치게 고민할 필요가 없다.

스프링 프레임워크나 안드로이드의 경우 개발도구에서 기본적으로 빌드 관련 설정과 실행을 연계해주기 때문에 빌드 도구가 잘 이해되지 않는다고 어려워할 필요도 없다.

각각의 빌드 도구에 대한 특징은 다음과 같다.

  • 설정방식
    Maven은 빌드 설정을 pom.xml 파일에 작성하는데, XML 구조이기 때문에 프로젝트가 커질수록 스크립트의 내용이 길어지고 가독성이 떨어지는 문제가 있다.
    Gradle은 Groovy라고 하는 JVM 기반 언어를 통해 프로그램 구조로 설정한다. 따라서 훨씬 적은 양의 스크립트로 짧고 간결하게 작성할 수 있다.

  • 다중 프로젝트
    Maven은 다중 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속을 받아야 한다.
    Gradle은 설정 주입 방식을 사용하여 다중 프로젝트에 적합하다.

  • 개발환경
    안드로이드 프로젝트는 기본적으로 Gradle을 사용한다.
    스프링 프레임워크 기반 프로젝트는 Maven, Gradle 중에 선택할 수 있다.
    이클립스는 Maven에 친화적이고 IntelliJ는 Gradle에 친화적이다.

프로젝트 규모나 설정 조건에 따라 다르기는 하지만 Gradle이 Maven보다 10~100배 성능 향상이 있다고 알려져 있다. 이에 따라 Maven도 지속적으로 사용되고 있지만 최신 프로젝트에서는 Gradle 사용 비중이 더 높다.

리포지토리

빌드 도구를 사용하는 주요 목적 두 가지는 컴파일/실행 설정과 라이브러리 설정이다. 이 중에서도 라이브러리 설정은 꼭 알아두어야 한다.

만일 필요한 라이브러리가 많을 경우 개발자가 일일이 해당 라이브러리의 홈페이지를 찾아 다운로드하고 복사하는 과정을 수행하는 것이 상당히 번거로울 것이다. 필요한 라이브러리가 또 다른 라이브러리를 참조하는 경우 해당 라이브러리도 필요한데 이들 관계는 또 어떻게 할 것이며, 버전에 따른 업데이트나 특정 버전 설치 등 너무나도 복잡한 문제가 발생하게 된다.

빌드 도구를 사용하면 꼭 필요한 핵심 라이브러리만 설정 파일에 등록해두면 해당 라이브러리에서 필요로 하는 다른 라이브러리는 자동으로 함께 설치되기 때문에 신경 쓸 필요가 없다는 이점이 있다.

리포지토리는 이러한 라이브러리를 통합 보관하는 일종의 저장소이며, 설정 파일의 내용을 참고해 해당 라이브러리를 글로벌 저장소로부터 로컬 저장소로 다운로드한 다음 프로젝트에 복사하는 과정을 거쳐 사용하게 된다. 해당 라이브러라기 로컬 저장소에 있다면 인터넷에서 다운로드하지 않고 바로 사용할 수 있다. 필요에 따라서는 개발 회사가 자신들에게 필요한 라이브러리만 저장하거나 자체 라이브러리 저장을 위한 저장소를 두고 사용하기도 한다.

profile
공부하고 기록하고 복습하고

0개의 댓글