* 빌드 툴이란
- 정형화된 작업을 자동화하기 위한 소프트웨어.
- 최근에는 빌드 툴이 개발 프로세스 전반에 연관되어 있음. 그래서 툴의 영역이 아닌 시스템의 일부로 보고 빌드 시스템이라고 부르기도 함.
- 일반적인 빌드 툴에서는 빌드 순서를 빌드 스크립트로 작성해서 실행하면 다양한 작업을 자동화할 수 있음.
-> 빌드 매뉴얼이 문서에서 실행 가능한 프로그램 형태로 바뀐다는 것을 의미함.
- 빌드 매뉴얼이 실행 가능한 형태가 되면 다음과 같은 장점이 있음.
1. 정형화된 작업에 사람이 관여하지 않아도 되니 실수가 줄어듦.
2. 빌드 스크립트는 항상 관리되므로 문서처럼 낡은 정보가 될 위험이 줄어듦.
3. 조건 분기를 이용해 각 환경에 따른 처리를 할 수 있음. (어디까지 가능한지는 빌드 툴의 기능에 달려있음.)
- 최근에는 데브옵스(DevOps) 방식이 주목받고 있음.
- 데브옵스의 본질은 개발자(Dev)가 작성한 코드를 빨리 배포해서 사용자의 대변자인 운영자(Ops)에게 피드백을 받고 그것을 신속하게 반영하는 것.
- 이런 방식으로 운영하려면 적어도 빌드가 자동화되어 있어야 함.
* 빌드 툴의 역사
- 빌드 툴은 스트럿츠(Struts)나 스프링 같은 애플리케이션 프레임워크와 비교하면 존재감이 약함.
- 프레임워크는 애플리케이션에 내장되어 있으므로 프레임워크 없이는 애플리케이션을 만들 수 없음.
- 이와 달리 빌드 툴은 없어도 어떻게든 굴러가므로 개발자에게는 있어도 없어도 그만임.
- 그렇다 보니 빌드 툴은 완만한 곡선을 보이며 진화해옴.
(1) 원조 빌드 툴 메이크(Make)
- 빌드 툴의 원조는 유닉스(UNIX) 계열 운영체제에서 사용되는 메이크(Make)라고 해도 틀리지 않을 것임.
- 메이크 이전에는 수작업이나 약간의 스크립트를 작성해야만 가능했던 작업을 Makefile이라는 통일된 구조로 처리할 수 있게 됨.
- 소프트웨어 개발 세계에 빌드 개념을 처음 가져온 것이 바로 메이크.
- 아마 소프트웨어 규모가 커지면서 구조가 복잡해지고, 이와 함께 메이크 같은 구조가 필요해졌을 것으로 생각됨.
- C언어로 개발된 소프트웨어를 빌드할 때는 아직도 메이크를 사용함. (최근에는 SCons라는 새로운 C언어 빌드 툴이 등장함. www.scons.org 참고)
- http://www.gnu.org/software/make/
(2) 자바를 위한 빌드 툴 앤트(Ant)
- 오랫동안 메이크가 빌드 세계를 지배했지만, 1990년대 자바가 등장하면서 분위기가 달라짐.
- 메이크를 자바에 적용하려니 여러 가지 문제가 발생했던 것. 그래서 나온 것이 앤트.
- 앤트는 당시 유행했던 자바와 XML(eXtensible Markup Language) 기술을 도입함으로써 메이크의 약점이었던 플랫폼 의존 문제를 탈출할 수 있게 해줌.
- 자바의 유행과 함께 앤트는 자바 계열 프로젝트에서 독보적인 빌드 툴로 자리 잡기 시작함.
- 앤트가 등장한 지 벌써 10년이 넘었지만, 메이크처럼 아직까지도 사용되고 있음.
- 앤트는 간단하고 사용하기 쉽다는 장점이 있지만, 약간만 복잡한 처리를 하려고 하면 빌드 스크립트가 장황해져 관리하기가 어렵다는 단점이 있음.
- 또한, 자바 개발에서는 다양한 라이브러리를 조합해야 할 때가 많은데, 앤트에는 라이브러리 의존관계를 관리하는 구조가 없어 빌드 달인(librarian)이 항상 고생해야 했음.
(3) 빌드 툴의 혁명 메이븐(Maven)
- 앤트의 문제를 해결하고자 등장한 것이 메이븐.
- 메이븐은 자바와 XML을 사용해서 플랫폼 독립성을 확보한 것은 앤트와 같지만, 빌드 생명 주기(lifecycle)와 프로젝트 객체 모델(POM)이라는 새로운 개념을 도입하여 앤트의 약점이있던 장황한 빌드 스크립트 문제를 해결함.
- 또한, POM에 메타 데이터를 적용해서 라이브러리 의존관계를 자동으로 관리해주는 기능을 구현함.
- 이는 의존 라이브러리를 관리하기 위해 메이븐 중앙 저장소(Maven Central Repository)를 제공했기 때문에 가능했음.
- 실제로 아이비(Ivy) 툴은 메이븐 중앙 저장소를 이용해서 앤트 빌드 스크립트의 의존관계 문제를 해결함.
- 이처럼 메이븐 중앙 저장소는 다른 소프트웨어에서도 폭넓게 이용되고 있음.
- 메이븐이 빌드 툴 세계에 혁명을 가져온 것은 맞지만, 기능이 많다 보니 이해해야 할 암묵적인 규칙도 많고, 만약 기본 규칙을 벗어난 처리라도 하려면 갑자기 사용이 어려워진다는 문제도 있음. (이 때문에 아직 완전하게 앤트를 몰아내진 못한 상황임.)
(4) 그레이들(Gradle)
- 그레이들은 지금까지의 빌드 툴이 가진 장점과 에코시스템은 활용하고 약점은 제거하는 것을 목표로 만들어진 빌드 툴.
cf) 에코시스템(ecosystem) : 우리말로 직역하면 생태계로, 해당 시스템을 기반으로 하는 프레임워크, 라이브러리, IDE를 총체적으로 일컫는 말. 예를 들어 자바 에코시스템으로는 스프링이나 이클립스 그리고 자바 기반 라이브러리를 들 수 있음. 닷넷 에코시스템으로는 닷넷 프레임워크, 비주얼 스튜디오를 들 수 있음.
- 빌드 툴의 진화와 그레이들의 위치
빌드 정의 \패러다임 |
처리 기반 |
규칙 기반 |
스크립트 |
메이크 ↓ |
그레이들 |
XML |
앤트 → |
↑ 메이븐
|
- 큰 흐름을 보면 다음과 같은 두 가지 진화 과정을 볼 수 있음.
1. 메이크 : 빌드 개념을 확립함.
2. 앤트 : 범용성을 높임. (= 크로스 플랫폼 대응)
3. 메이븐 : 빌드 스크립트 작성 효율을 높임. (= 규칙 기반)
4. 그레이들 : 유연성을 높임. (= 스크립트 언어로 회귀)
- 한마디로 그레이들의 '스크립트 언어를 이용한 규칙 기반 빌드 툴'이라는 아키텍처는 빌드 툴의 진화 방향에 필연적이었음.
- 그레이들은 이 진화를 실현하기 위해 크로스 플랫폼 스크립트 언어(JVM 언어)인 그루비를 기반 기술로 선택함.
- 그루비의 기능 중에는 빌드 영역에 적합한 것이 많아서 현재까지는 이 선택이 성공적이었다고 평가받고 있음.
- 실제로 그레이들은 그루비의 응용 제품 중 가장 성공한 제품이어서 그레이들을 계기로 그루비에 관심을 보이는 엔지니어도 늘었음.
내용 출처 : Gradle 철저입문 (와타비키 타쿠마 외 지음, 길벗)
'In-depth Study > Gradle' 카테고리의 다른 글
그루비 특유의 문법 (0) | 2017.07.12 |
---|---|
다른 빌드 툴과의 비교 (0) | 2017.07.12 |
그레이들의 장점 (0) | 2017.07.12 |
그레이들의 개요 및 사례 (0) | 2017.07.12 |