brunch

You can make anything
by writing

C.S.Lewis

[Gradle] #1 구글은 왜 그레이들을 채택했을까

들어가는 글: <안드로이드를 위한 Gradle>은 제 첫번째 책입니다. 작년 7월 22일에 초판이 나왔으니까 어느덧 일년이 되었네요. 일주년을 기념하여 그레이들 관련한 몇가지 이야기를 적어보고자 합니다. 주로 '왜'의 관점에서 그레이들이라는 기술을 조망해보도록 하겠습니다. 


1. 새로운 빌드 시스템의 채택 


그레이들은 빌드를 위한 도구입니다. 보통 자바 이클립스에서 RUN을 누르듯이 안드로이드 개발할 때도 '빌드'는 IDE의 부속기능에 해당합니다. 개발자는 빌드 도구가 어떤 것이든 내가 원하는 APK가 만들어서 타겟 디바이스에서 실행할 수 있으면 됩니다. 


그런데.. 2014년 구글은 server side에서 파워 유저들이 사용하던 그레이들을 전격 도입합니다. 

공식적인 발표는 2015 구글 I/O에서 기존의 ADT(Android Development Toolkit)의 지원 중단을 선언하면서 "New Build Systems"이라고 명명합니다. 


그레이들은 몇 가지 면에서 기존의 빌드 시스템과 다릅니다. 


1) 빌드 스크립트가 '프로그래밍 언어'의 모습을 하고 있다. 

자바와 같이 JVM위에서 동작하는 groovy 라는 언어로 작성하게 됩니다. 


2) 빌드 스크립트가 일률적이지 않다. 

DSL(Domain Specific Language: 도메인 언어)라는 모습으로 server side의 그레이들 스크립트와 안드로이드를 위한 스크립트의 모습이 전혀 다릅니다. 즉, 안드로이드를 위한 gradle을 잘 안다고 해도 서버 사이드의 그레이들 스크립트는 잘 다루지 못합니다. (제가 그렇습니다^^;;) 


3) 다수의 빌드 지원 파일로 구성되어 있다. 

빌드면 빌드지... 

settings.gradle 

(프로젝트 수준의) build.gradle 

(모듈 수준의) build.gradle 

gradle.properties 

local.properties 

로.. 다수의 파일 군단을 이루고 있습니다. 기존의 빌드 시스템인 ant의 경우 build.xml 단일 파일과 비교하면 다소 복잡해졌습니다. 


2. 구글은 왜 그레이들을 채택했을까? 


구글은 왜 안드로이드 앱을 개발할 때 그레이들을 채택했을까? 

제 생각에 가장 중요한 것은 모듈화 개발(modular development)입니다. 


예를 들어 핵심 로직을 별도의 모듈로 추출할 수 있습니다. 

또한 타부서에서 제공하는 기능을 AAR로 받으면 하나의 APK로 통합할 수 있습니다. 

AAR은 기존의 자바 클래스의 묶음인 jar 파일을 확장하여 안드로이드 리소스(R파일, layout 파일 등)를 가질 수 있도록 하였습니다. 


모듈화 개발은 소스 코드로 빌드하여 통합할 수도 있고 AAR로 넣을 수도 있습니다. 당연히 기존에 활용하던 jar파일도 포함할 수 있습니다. 


두번째는 one source multi APK 실현입니다. 


기존의 ADT에서는 build type이나 produce flavors 같은 개념을 구현하기 어려웠습니다. 다수의 customer에게 제공하는 앱을 만드는 경우 유용하게 사용할 수 있습니다. 단, 요즘같이 마켓에 업로드하여 배포하는 경우에는 큰 소용은 없을 듯 합니다. 


세번째는 라이브러리 의존성 관리입니다. 


maven 세상이 되면서 앱을 개발할 때 라이브러리의 바이너리를 직접 내 프로젝트에 추가하는 것은 번거로운 일이 되었습니다. 대부분의 오픈 소스 라이브러리가 jCenter나 mavenCentral 같은 중앙 저장소에 오픈되어 있기 때문에 굳이 그것을 deep copy할 이유가 없습니다. 


그레이들을 활용하면 간편하게 내가 원하는 라이브러리의 패키지명과 이름 그리고 버전을 지정하면 자동으로 다운로드가 됩니다. 또한 다수의 라이브러리를 활용하는 경우 버전 충돌(version conflict)이 발생할 수 있는데 그러한 것도 그레이들이 자동으로 관려해줍니다. 


3. 그레이들은 장점만 있을까? 


위에서 서술한 것과 같이 그레이들이 장점만 있는 것은 아닙니다. 제가 지금까지 현업에서 개발하면서 느낀 그레이들의 단점은 아래와 같습니다. 


1) 느리다 

2) 메모리를 많이 먹는다. (최소 8G RAM이 필요하고 16G 권장입니다) 

3) Android Studio도 덩달아 무거워졌다 


유연하고 많은 것을 편리하게 해주지만 '무거워졌다'는 느낌은 어쩔수가 없네요. 

그레이들로 빌드를 하게 되면 build/ 폴더가 생기는데 빌드 중간의 생성물을 다량으로 File I/O를 시도합니다. 아마도 그때문에 그레이들이 무겁다라고 느낄 수도 있습니다. (사실 멀티 모듈 빌드를 하는 경우 참고할 자료가 많기 때문에 사후 관리에는 유용하기도 합니다) 


NEXT... 


다음 화에는 <안드로이드를 위한 Gradle>을 이루는 구성 파일들에 대해서 알아보겠습니다. 

구체적인 활용법보다는 전체적인 개념 위주로 설명드릴께요. 

감사합니다. 


2017.7.17  


ps. 국경일인데 아침에 출근하느라 태극기 계양을 깜박했네요 T_T 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari