초보자를 위한 Gradle 안내서 1편: Build툴?, Gradle은 무엇인가?

들어가면서

이 글은 그레이들을 처음 접하는 사람보다 Android studio 혹은 그외에서 사용은 하는데
뭐지 알아서 되네 정도로 쓰시는 분들을 타겟으로 작성하였다. (제가 그랬거든요 ㅎㅎ)
gradle의 마법같은 작동을 공식문서gradle의 파일들을 열어보면서 해체 할 것이다.

커리큘럼

  1. Build툴?, Gradle은 무엇인가?
  2. Gradle 아키텍쳐
  3. Task
  4. 각자의 프로젝트로

빌드툴이란

위키에서는 빌드를 다음과 같이 정의하고 있다.
소프트웨어 빌드는 소스 코드 파일을 컴퓨터나 휴대폰에서 실행할 수 있는 독립(standalone) 소프트웨어 가공물로 변환하는 과정을 말하거나 그에 대한 결과물을 일컫는다.
즉, 소스 코드 파일(.java, .c)을 실행코드(.jar, .exe, .a)로 변환하는 과정이라고 할 수 있다. 그럼 이 변환화는 과정에는 뭐가 있을까? 언어마다 다르겠지만…

C 빌드과정

  1. 전처리기 (#include 처리, 매크로 대체, 조건부 컴파일, 주석제거)
  2. 컴파일러 (전처리과정을 거친 확정된 C언어를 어셈블리어로 변환)
  3. 어셈블러 (어셈블리어를 기계어로 변환)
  4. 링커 (기계어가된 파일들을 전부 읽고 심볼에 함수 포인터 매핑)

Java 빌드과정

  1. .Java(소스코드)를 컴파일해서 .Class 파일 생성
  2. 코딩 규칙 체크
  3. 테스트 ( + 테스트 리포트 출력)
  4. javadoc과 같은 문서 작성
  5. .Class 파일과 리소스를 패키징해서 압축 파일 생성 (.jar, .war)
  6. 압축 파일을 테스트 서버 혹은 실서버에 배포
  7. 압축 파일 저장소에 등록

빌드와 컴파일의 차이

흔히 빌드와 컴파일을 동일어처럼 사용하는데 엄밀하게 나누면
컴파일는 특정 프로그래밍 언어를 다른 프로그래밍 언어로 옮기는 것 빌드는 독립(standalone) 소프트웨어 가공물로 변환하는 과정 즉, 빌드는 컴파일보다 더 큰 개념으로 컴파일을 포함하고 있다.

Gradle이란?

공식문서가 정의하기를 거의 모든 유형의 소프트웨어를 빌드 할 수있을 정도로 유연하게 설계된 오픈 소스 빌드 자동화 도구이다.

Gradle은 다음과 같은 특성이 있다.

  • JVM 재단
    Gradle은 JVM에서 실행되며 사용하려면 JDK가 설치되어 있어야 한다. JDK에 의존성이 생기지만 덤으로 빌드스크립트에 Java API를 사용할 수 있다.

  • 확장성
    Gradle은 JDK에 의존한다고 해서 Java만 컴파일 할 수 있다고 착각하면 오산이다.
    Gradle은 Groovy스크립트를 통해 다양한 기능을 직접 구연할 수 있다
    (요즘은 Kotlin도 가능하다는데..)
    그리고 직접 Task와 플로그인을 만들어 기능을 추가하여 확장할 수 있다.
    플러그인을 관리하기 위한 허브가 존재해서 내가 만든 플러그인을 쉽게 공유할 수도 있다.

  • IDE 지원
    android studio나 Intillj등 다들 써봤을 것이다..

  • Wapper
    이미 존재하는 프로젝트를 새로운 환경에서 바로 빌드할 수 있게 해준다 즉, Gradle을 따로 설치하지 않아도 이미 만든 프로젝트는 새로운 환경에서도 빌드 할 수 있다.

Gradle 설치

Java

Gradle은 Java에 의존성을 가진다, java가 설치되어있어야 한다.
JDK 8 이상만 설치되어 있으면 상관이 없다.

Window

  1. 다운로드페이지로 이동해서 원하는 버전의 binary파일을 받는다.
    (글 작성시 최신버전 6.4.1)
  2. 원하는 위치에서 압축 해제한다.
    (저는 C:\Program Files 여기에 했어요)
  3. 압축을 풀고나면 ~\gradle-6.4.1 폴더가 생기고 폴더 안에는 다음과 같은 폴더가 더 있을 것이다.
    • bin
    • init.d
    • lib
  4. 환경변수를 설정
    1. 새 시스템 변수로
      변수 이름 : GRADLE_HOME
      변수 값 : ~\gradle-6.4.1
    2. Path 변수에 %GRADLE_HOME%\bin을 추가한다.

Ubuntu

sudo apt-get install gradle 이러면 끗..!

Version Check

위의 설치 프로세스를 마무리했다면 제대로 됬는지 확인을 위해 다음 명령어를 실행해보자 gradle -v 버전이 제대로 뜬다면 설치가 제대로 된 것이다.

Gradle Wapper

Gradle을 처음 본다면 이 내용이 이해가 되지 않을 수 있다.
그냥 그렇구나 하고 넘어가고 나중에 다시 읽거나 공식문서를 찾아봐도 된다.

Gradle은 Gradle Wrapper 기능을 이미 존재하는 프로젝트를 새로운 환경에서 바로 빌드할 수 있게 해준다라고 했다.
그리고 Gradle Wrapper(이하 “Wrapper”)를 적극적으로 사용하라고 권장하고 있다.
처음 Intellij를 사용할 때 Intellij도 이클립스처럼 내장 Builder가 있는 줄 알았는데 알고보니 Wrapper였었다.

공식문서에서는 Wrapper를 선언 된 버전의 Gradle을 호출하여 필요한 경우 다운로드하는 스크립트라고 정의한다.
즉, Wrapper의 작동은 마법이 아니라 필요한 파일을 Temp 파일 형식으로 Gradle의 바이너리 파일을 다운받는 방식이였다.
사용자 폴더에 .gradle라는 폴더가 생성되고 안에 필요한 파일들이 다운로드 되어있을 것이다.
(다운로드 되는 위치는 환경마다 다를 수 있다. 신경안써도 된다.)
temp forder

프로젝트를 생성해보자
Console 창에서 빈폴더로 이동한 다음 gradle init을 입력해보자
아마 여러가지 물어볼텐데 지금은 중요하지 않으니 Cntl + C를 눌러서 기본만 생성되도록 하면 아래 처럼 파일이 생성된다.
Wrapper을 적극 권장한다고 했었는데
프로젝트를 init(생성)하는 것만으로도 기본적으로 Wrapper가 적용된다.

project/
    gradlew
    gradlew.bat
    gradle/wrapper/
        gradle-wrapper.jar
        gradle-wrapper.properties
    build.gradle
    settings.gradle

gradlew

유닉스용 wrapper 실행 스크립트로 컴파일, 빌드등을 할때 사용한다.
gradle build하면 로컬에 설치된 gradle을 사용하는 것이고
./gradlew build로하면 Wrapper를 사용하게 된다.

gradlew.bat

윈도우용 wrapper 실행 스크립트고 나머지는 gradlew랑 동일하다.

gradle/wrapper/gradle-wrapper.jar

Wrapper 파일로 위에 실행 스크립트들이 이 파일을 gradle의 Task를 실행한다.
즉, 로컬에 gradle이 있던 없던 영향을 받지 않는다.

gradle/wrapper/gradle-wrapper.properties

파일명에서 부터 나는 설정파일이요라고 말하고 있다.
안의 설정내용을 알고 싶다면 Wrapper 문서로 가자

build.gradle

빌드 스크립트이다. 빌드에 필요한 의존성, 플러그인을 정의하는 파일로 계속해서 다룰 것이다.
지금은 그렇구나 하고 넘어가자.

settings.gradle

이 파일은 이름이 세팅이다.(누가봐도 세팅파일..) 프로젝트의 구성 정보를 정의하는 파일이다.
하위 프로젝트들관에 관계등을 정의하고 Gradle은 이 파일을 읽고 정의된대로 프로젝트를 구성한다.

aother wrapper function

wrapper에 대해서 더 자세하게 알고 싶다면 (예: Wrapper 상태로 version upgrade)
공식문서를 참고해도 좋을거 같다.

참고

comments powered by Disqus