별의 공부 블로그 🧑🏻‍💻
728x90
728x170

* 메이크 vs 그레이들

 

- 메이크는 빌드 툴의 개척자와 같음.

- 특히 C언어를 중심으로 한 네이티브용 소프트웨어 개발 현장에서는 아직도 많이 사용됨.

- 메이크의 특징은 Makefile이라는 빌드 스크립트를 작성해서 결과물을 생성하기 위한 작업과 각 작업 간 관련성을 정의할 수 있다는 것.

- 이 방식은 다음과 같은 장점이 있음.

 

1. 빌드 순서를 셀 스크립트로 처음부터 작성할 필요가 있음.

2. 갱신된 C 코드와 그에 의존하는 코드만을 선택적으로 빌드하는 방식으로 빌드 효율을 높일 수 있음.

 

- 메이크는 기능이 매우 단순해서 결과물 생성 명령 또는 셀 스크립트만 정의해도 빌드가 가능함.

- 이처럼 비교적 빌드 처리가 자유로운 편이지만, 플랫폼 의존성이 커서 크로스 플랫폼 대응이 어렵다는 문제점이 있음.

예) 리눅스와 윈도 모두 대응하는 스크립트를 작성하기가 매우 어려움.

- 또한, 메이크에는 의존관계 해결 기능이 없음. (메이크가 등장했을 때는 지금처럼 인터넷에서 의존 라이브러리를 내려받는 시기가 아니었으므로 어찌 보면 당연함.)

- 그레이들에는 메이크의 이러한 '스크립트 기반 유연성'이라는 장점을 취하면서 크로스 플랫폼 대응, 의존관계 해결, 규칙 기반 빌드와 같은 최신 빌드 툴이 요구하는 기능들이 충실하게 반영되어 있음.

 

* 앤트 vs 그레이들

 

- 앤트는 자바의 철학인 "Write Once, Run Anywhere(한 번 작성하면 어느 플랫폼에서나 실행할 수 있다)'를 실현한 빌드 툴임.

- 메이크의 문제였던 크로스 플랫폼 대응을 해결하기 위해 플랫폼에 의존하지 않는 자바와 XML을 기반으로 구축한 것임.

- 앤트가 등장할 당시에는 JVM 언어가 거의 없었고, JVM에서 스크립트와 비슷한 처리를 구현하기 위해서 XML을 이용했음.

- 앤트의 기능은 메이크보다 많지만, 빌드 툴로서는 매우 단순함.

- 하지만 배우기 쉽고 다른 자바용 빌드 툴이 없다는 이유로 앤트는 표준 툴로서 자리매김하였음.

- 또한, 앤트는 확장이 쉬워서 많은 확장 태스크들이 만들어졌고, 이로 인해 에코시스템이 강화되었음.

- 하지만, 앤트에는 다음과 같은 문제가 있음.

 

1. 기본 기능이 단순해서 복잡한 것을 만들려고 하면 빌드 스크립트가 수백에서 수천 줄까지 늘어남.

2. 디렉터리 구조에 관련된 표준 규칙이 없고 프로젝트 단위로 다른 빌드 스크립트를 사용해야 하므로 재사용이 어려움.

3. 라이브러리 의존관계 관리 기능이 없어서 의존 라이브러리를 직접 받아야 함.

 

cf) 의존 라이브러리를 직접 받아야 하는 이른바 JAR Hell(JAR 지옥) 현상은 메이븐에서 의존관계 해결과 저장소 구조만 분리해서 만든 아이비 덕분에 어느 정도 해결되긴 했음.

 

- 또한, 빌드 스크립트 작성 언어로 XML 기반 DSL을 사용하는 것이 제약이 되어 메이크처럼 스크립트 언어를 이용한 유연한 처리를 하기가 어려운 것도 앤트의 문제 중 하나임. (예를 들어 간단한 문자열 처리를 하고 싶어도 빌드 스크립트에 작성할 수 없으므로 직접 태스크를 작성해야 함. script 태스크를 이용해서 자바 스크립트 코드를 넣을 수는 있지만, 이런 태스크가 있는 것 자체가 앤트의 한계를 보여줌.)

- XML은 원래 정적 구조를 표현하기 위한 것으로, 빌드 스크립트 같은 유연성을 요구하는 용도로는 부적합하기 때문.

- 게다가 XML은 프로그래밍 언어가 아니므로 필요 시 언어 자체를 직접 구현해야 함.

- 이것은 매우 힘든 작업으로, 설령 만들었다고 해도 일반적인 언어보다 제한된 기능밖에 제공할 수 없음.

- 앤트의 단순함과 크로스 플랫폼 특성을 도입한 그레이들의 특징은 다음과 같음.

 

1. 그루비 기반의 DSL을 도입해서 빌드 스크립트를 사용한 유연한 처리가 가능함.

2. 의존관계 해결이나 규칙 기반 빌드 기능을 도입해서 사용하기 쉬움.

 

* 메이븐 vs 그레이들

 

- 메이븐은 규칙 기반 빌드나 의존관계 해결과 같이 빌드에 새로운 개념을 가져온 혁신적인 툴임.

- 메이븐이 도입한 규칙 기반 빌드 접근법은 프로젝트 종류별(정확히는 packaging 요소에 지정하는 아티팩트(artifact) 형식)로 디렉터리 구조와 빌드 순서를 표준화함.

- 이 표준 규칙을 따르면 빌드 내용을 상세하게 지시하지 않아도 빌드가 됨.

- 즉, 빌드 스크립트를 간략하게 하고 프로젝트의 재사용성을 높이는 데 크게 공헌을 함.

- 반면, 다음과 같은 단점이 있음.

 

1. 제대로 사용하려면 복잡한 메이븐 규칙을 이해해야 하므로 초보자가 진입하기에는 학습 장벽이 높음.

2. 규칙에 맞지 않는 프로젝트에서는 사용 난이도가 높아짐. (또는 적용할 수 없음.)

 

- 베이븐 빌드 스크립트를 작성하려면 앤트와 마찬가지로 XML 기반 DSL이 사용되므로 빌드 스크립트의 유연성에 제약이 있음.

- 메이븐의 기능은 기본적으로 플러그인으로 구현되어 있는데, 그 플러그인의 실체는 바로 자바 클래스.

- 메이븐은 빌드 스크립트 언어로 XML을 사용하므로 스크립트에 적을 수 있는 내용은 다음 두 가지밖에 없음.

 

1. 어떤 플러그인을 실행 대상으로 구성할지를 지정함.

2. 플러그인에 전달한 파라미터를 지정함.

 

- 원칙적으로 스크립트에 로직을 직접 작성할 수 없음.

- 이 때문에 메이븐의 기존 플러그인이 제공하지 않는 기능을 구현하려면 플러그인을 직접 만들어야 함.

- 메이븐 플러그인을 개발하기란 꽤 어려운 작업이라서 이 또한 메이븐 진입 장벽을 높이는 요인이 됨.

- 한편, 그레이들의 스크립트는 그루비 기반이므로 다음과 같이 간단히 구현할 수 있음.

 

1. 빌드 스크립트에 처리를 직접 작성함.

2. 빌드 스크립트에서 자바 클래스를 직접 이용함.

 

- 이 말은 빌드 스크립트에서 그레이들이 제공하는 API를 호출해서 그레이들의 기능을 직접 이용할 수 있다는 얘기임.

- 즉, 일부러 플로그인을 개발하지 않고도 그레이들의 기능을 바로 가져와서 사용하거나 확장할 수 있음.

- 정리하면, 그레이들은 메이븐처럼 규칙 기반 빌드 및 의존관계 관리 기능을 제공하면서도 메이븐 보다 유연하게 기능을 변경하거나 확장할 수 있는 빌드 툴임.

 

내용 출처 : Gradle 철저입문 (와타비키 타쿠마 외 지음, 길벗)

728x90
그리드형(광고전용)

'In-depth Study > Gradle' 카테고리의 다른 글

그루비 특유의 문법  (0) 2017.07.12
그레이들의 장점  (0) 2017.07.12
그레이들의 개요 및 사례  (0) 2017.07.12
빌드 툴(Build Tool)  (0) 2017.07.12
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖