Skip to content

Latest commit

 

History

History
53 lines (42 loc) · 4.24 KB

build.md

File metadata and controls

53 lines (42 loc) · 4.24 KB

빌드도구

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

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

사용 이유

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

Maven

프로젝트를 진행하게 되면 자신이 작성한 코드만으로 개발하는 것이 아니라 많은 라이브러리들을 활용해서 개발을 하게 된다.
이 때 사용되는 라이브러리들의 수가 수십개가 훌쩍 넘어버리는 일이 발생해 이 많은 라이브러리들을 관리하는 것이 힘들어지는 경우가 종종 발생하곤 한다. Maven은 이러한 문제를 해결해 줄 수 있는 도구이다.
Maven은 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 동작하는데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해 자동으로 다운 받아 준다.
pom.xml 파일에 의존성이나 빌드에 필요한 설정을 입력하고 빌드를 할 수 있다.

Gradle

Gradle은 기본적으로 빌드 배포 도구 이다. 안드로이드 앱을 만들때 필요한 공식 빌드시스템이기도 하며 Java,C/C++,Python 등을 지원한다. Maven의 경우 XML로 라이브러리를 정의하도록 되어 있으나, Gradle의 경우 build.gradle을 통하여 사용할 어플리케이션 버전, 라이브러리등의 항목을 설정 할 수 있다.

스크립트 언어라는 장점이 있어서 XML과는 달리 변수선언, if, else, for 등의 구문을 사용할 수 있다.

Maven vs Gradle

필자는 주로 Gradle 을 사용하는 편이다. Gradle 이 Maven 보다 더 좋다는 말만 듣고 사용했다.
이번 글을 통해 왜 Gradle을 선호하는지 알게되었다.

  1. Build 라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다.
    • 설정 내용이 길어지고 가독성이 떨어짐
    • 의존관계가 복잡한 프로젝트 설정하기에는 부적절
    • 상속구조를 이용한 멀티 모듈 구현
    • 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야함 ( 상속의 단점 이 드러남 )
  2. Gradle은 그루비를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
    • Configuration Ijection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버했다.
    • 설정 주입시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.

Gradle 은 Maven 보다 최대 100배 빠르다.

이외의 빌드 툴

초창기 툴로 make 라는 툴이 있다. Makefile 이라는 파일에 의존성과 여러 명령을 정의하면 make 가 해석하여 프로그램 빌드를 수행하게 된다.
유닉스 계열 운영 체제에서 주로 사용되는 프로그램 빌드 도구 이다.

다음으로는 아파치에서 만들어진 Apache Ant 라는 툴이다.
이때부터 xml 확장자를 사용했으며 build.xml 에 의존성을 정의하여 빌드할 수 있다.

결론

Maven 보다 Gradle 을 더 선호하지만 아직까지도 구글의 통계에 따르면, 아직도 많은 프로젝트에서 Maven 이 더 많이 사용되고 있다고 한다.
하지만 기존 Maven 에서 Gradle 로 Mrigrate 할 수 있도록 Gradle 에서 지원 하고 있으니
코드의 가독성, 빌드 속도를 고려하여 Gradle 을 사용해보는것도 좋은 경험일 것같다.