본문 바로가기
TIL

Gradle 이란? (22.09.07 TIL)

by winteringg 2022. 9. 7.

 요즘 Gradle 과 JUnit5 를 사용한 TDD 를 배우고 있어서 간단하게 Gradle 에 관해 정리를 하고자 글을 쓴다. JUnit 은 이어지는 글에 정리하는 것으로..!

Gradle 은 그루비(Groovy)를 이용한 빌드 자동화 시스템이다. 그루비는 무엇이고 빌드는 무엇인가? 아래의 정의는 위키백과를 참고한 정의이다.

  • 그루비는 자바와 문법이 아주 비슷한 JVM 위에서 동작하는 프로그래밍 언어이다. 자바 라이브러리를 사용하며, 자바의 클래스 파일을 그대로 그루비 클래스로 사용할 수 있다. 스크립트도 잘 동작하지만 스크립트 언어는 아니다. 자바 바이트 코드로 컴파일 되어 자바 애플리케이션에 통합될 수 있다. 
  • 빌드(build)란 소스코드 파일을 컴퓨터나 휴대폰에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정으로서, 빌드에 있어서 가장 중요한 단계들 가운데 하나는 소스코드 파일이 실행 코드로 변환되는 컴파일 과정이다. 

 컴파일은 그냥 컴파일 아닌가? 컴파일의 어떤 과정이 빌드라는 동작을 수행하는 것일까? 결론부터 말하면, 빌드는 컴파일과 링크를 합쳐서 부르는 용어이다. 컴파일이란 자바 소스 코드를 바이트 코드로 변환하는 작업을 말한다. 이 컴파일의 결과로 나온 파일은 obj 파일이라고 하는데, 다수의 obj 파일을 연결시켜서 최종적으로 원하는 결과물인 exe 실행 파일을 만들게 된다. 이 때, obj 파일들을 연결해서 하나의 exe 파일을 만다는 작업을 링크라고 부른다.

컴파일과 링크의 진행과정

이렇게 각각의 컴파일과 링크 작업으로 생성되는 최종 exe 파일로 만들어서, 실행 가능한 소프트웨서 산출물로 만드는 일련의 과정을 통칭해서 빌드라고 하는 것이다.

 여기서 다시 처음으로 돌아가서, Gradle 은 빌드 자동화 시스템이라고 하였다. 즉 이 컴파일 과정을 자동으로 해준다는 것이다. Gradle 은 CI/CD 를 위한 아래의 task 들을 자동화 시켜주는 빌드 도구이다.

  • Compile
  • Test
  • Packaging
  • Deploy & Run

 여기서 Test 는 어플리케이션이 제대로 동작할 지에 대한 테스트를 말하는 것이고, Packaging 의 경우에는 코드를 말 그대로 패키징하여 aab 파일이나 apk 파일로 만들어주는 것을 말하며, Deploy & Run 은 코드를 어플리케이션으로 패키징해서 실제 기기에 넣어 실행할 수 있도록 만들어주는 것을 뜻한다.

 Gradle 은 점진적으로 빌드를 하는 방식으로 속도가 매우 빠르다. 점진적 빌드는 이미 빌드된 파일들을 모두 다시 빌드하는 것이 아닌, 바뀐 파일들만 빌드하는 것을 뜻한다. 예를 들어, 10개의 파일이 있는 상태에서 컴파일을 이미 완료한 시점에, 5개의 파일의 소스가 바뀌었을 경우 10개 모두를 다시 컴파일 하는 것이 아닌 바뀐 5개의 파일만 컴파일 시킨다. 
 그리고 Gradle 은 빌드 캐시 (build cache) 라는 것이 있는데 만약 두 개 이상의 빌드가 돌아가고, 하나의 빌드에서 사용되는 파일들이 다른 빌드들에 사용됐다면 Gradle 은 빌드 캐시를 이용해 이전 빌드의 결과물을 다른 빌드에서 사용할 수 있게 해준다. 이로 인해 다시 빌드하지 않아도 되므로 빌드 시간이 줄어들게 된다.

 또한 Gradle 은 데몬 프로세스(Daemon Process) 를 지원한다. 데몬 프로세스는 서비스의 요청에 응답하기 위해 오래동안 살아있는 프로세스인데, Gradle 의 데몬 프로세스는 메모리 상에 빌드 결과물을 보관한다. 이로 인해 한 번 빌드된 프로젝트는 다음 빌드에서 매우 적은 시간만 소요된다.


< 빌드 과정 3단계 >

1. 초기화 (Initialization)
- 빌드 대상 프로젝트를 결정하고 각각에 대한 프로젝트 객체를 생성. settings.gradle 파일에서 프로젝트 구성 (멀티 프로젝트, 싱글 프로젝트 구분)

2. 구성 (Configuration)
- 빌드 대상이 되는 모든 프로젝트의 빌드 스크립트를 실행. (프로젝트 객체 구성)

3. 실행 (Execution)
- 구성 단계에서 생성하고 설정된 프로젝트의 task 중에 실행 대상을 결정. gradle 명령에서 지정한 task 이름 인자와 현재 디렉토리를 기반으로 task 를 결정하여 선택된 task 들을 실행함.

< 디렉토리 기본 구조 >

 모든 Gradle 은 하나 이상의 프로젝트로 구성되며, 모든 프로젝트는 하나 이상의 task 로 구성된다. 여기서 task 는 작업의 최소 단위이다.

디렉토리 / 파일 설명
.gradle gradle 버전별 엔진 및 설정 파일
.idea 에디터 관련 파일
gradlew (for Mac OS) / gradlew.baw (for Windows) gradle 명령파일
settings.gradle 빌드 할 프로젝트 정보 설정 (트리 형태의 멀티 프로젝트로 구성)
build.gradle 프로젝트 빌드에 대한 모든 기능 정의
src 자바 소스 파일

 

 

 

*참고한 출처 :

 

Gradle이란 무엇인가? 하는 일, 강점, 빌드 속도가 빠른 이유에 대해 알아보자.

Gradle은 무엇을 하는가? Gradle은 CI/CD를 위한 아래 Task들을 자동화 시켜주는 Build Tool이다. Compile Test Packaging Deploy & Run 안드로이드를 기준으로 Compile은 Kotlin 파일이나 Java파일을 바이트 코드..

kotlinworld.com

 

 

댓글