프로그래밍 공부/Gradle

빌드란?, Gradle의 빌드, Gradle의 빌드 수행

Wonuk 2021. 9. 1. 23:13
반응형
Gradle의 모든 포스팅은 유튜브 프리렉을 기반으로 작성되었습니다.



링크 : https://www.youtube.com/watch?v=s-XZ5B15ZJ0&list=PL7mmuO705dG2pdxCYCCJeAgOeuQN1seZz

 

 

강의의 버전이 옛버전 이기 때문에 이론적인 부분만 학습하는것이 좋습니다.


Gradle VS Maven 정리

Maven Gradle
Java를 사용하여 프로젝트 빌드 자동화에 주로 사용되는
압축 소프트웨어 프로젝트 관리 도구
Apache Ant 및 Apache Maven의 개념을 기반으로하는
오픈 소스 빌드 자동화 도구
Java로 작성 Java, Kotlin 및 Gradle로 작성됨
Gradle에 비해 Maven 성능이 느림 Gradle 빌드 시간은 짧고 빠름
Maven 스크립트는 Gradle에 비해 길다 Gradle 스크립트는 훨씬 짧고 깨끗함
XML 사용 DSL (Domain-Specific Language)을 사용
maven에서는 프로젝트와 연결된 목표가 정의됩니다. 작업이 수행되는 작업을 기반으로합니다.
증분 컴파일은 지원하지 않습니다.
(증분은 입력 및 출력 작업을 추적하고 변경된 코드 / 파일의 일부만 실행하여 불필요한 작업을 피하는 프로세스이다)
Java 클래스의 증분 컴파일을 지원합니다
종속성, 관리, 모듈화, 일관성, 많은 플러그인 및 규칙
(구성 초과)이 선호 될 때 사용하는 것이 좋음
유연성, 사용 편의성, 속도 및 증분 빌드가 중요한 경우
사용하는 것이 좋음

 


4. 빌드란?

빌드(build)

프로그래밍한 소스 코드를 컴파일(Compile), 테스트(Test), 배포(Desploy), 문서화(Reports) 등을 수행하는 일련의 작업

빌드를 단순히 컴파일과 동일하게 생각하는 경우가 있는데,

컴파일은 소스코드 파일등의 원시파일을 실행파일, 라이브러리 등과같은 오브젝트 파일로 바꾸는 과정

이러한 컴파일을 포함한 개념이 빌드(build)이다.

 

 

위키피디아 에서의 소프트웨어 빌드(Sofrtware Build)

소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정을 말하거나

그에 대한 결과물을 얻는 과정

 

 

빌드의 수행과정

 

빌드의 수행과정

 

이러한 모든 과정을 수행한 후 나온 결과물이 문서화(Reporting)를 통해서 도출된다.

이러한 일련의 작업을 진행할 수 있도록 기능을 지원해주는 도구가 바로 Gradle이다.

 

이러한 빌드수행과정은 매우 반복적으로 일어나고, 수시 또는 특정조건에 의해서 이루어진다.

빌드를 자동화, 또는 스크립트 파일로 만들어서 적용대상의 소스코드에 대한 작업을

자동적으로 수행할 수 있도록 하는것을 빌드 자동화 라고한다. 

빌드 자동화는 세가지 유형으로 나누어 볼 수 있다.

 

 

빌드자동화

 

빌드 자동화

 

1. 지시 자동화 : 명령어 수행을 통해서 빌드를 수행하는것

2. 예약 자동화 : 특정 예약시점을 지정해서 빌드를 수행할 수 있도록 한다

3. 유발 자동화 : 특정 조건을 충족하거나 해당 조건에 부합할 때 빌드를 수행하는것

 

 


 

5. Gradle의 빌드

그레이들의 빌드 수행 구성 요소 

 

그레이들 스크립트 파일과 기본 객체

이러한 스크립트 들은 Gradle에서 제공하는 기본객체와도 연관이 있다.

 

초기화 스크립트 : 가장 먼저 실행이 되는 스크립트 파일  -> Gradle객체

                        init.gradle로 파일이름이 명명이되고 사용자정보, 실행환경, 초기선언값 설정 등과같은

                        초기설정 정보들이 기술되어 있다.

 

설정 스크립트 : 빌드에 대한 설정정보가 기록되어 있는 스크립트 파일 -> Settings 객체

                     Settings.gradle로 파일이름이 명명되고 build설정 정보, 프로젝트 구조

                     즉 싱글프로젝트 인지 멀티프로젝트 인지에 대한 내용등을 정의한다.

 

빌드 스크립트 : 빌드 수행과 관련된 내용이 기술되어 있는 스크립트 파일 -> Project

                     Build.gradle로 파일이름이 명명되고 빌드 수행과 관련된 의존관계, 테스크, 레파지토리

                     등과같은 내용등이 정의되고 빌드 수행에 있어서 핵심적인 스크립트이다.

                     또한 빌드 스크립트 파일은 앞에있는 초기화,설정 스크립트들의 내용을

                     기본객체(Gradle객체, Settings객체)를 통해서 관련 내용을 참조하거나 사용할 수 있다.

                     

Gradle과 관련된 스크립트 파일, 기본객체에 대해서는 뒤에서 자세히 학습하도록 한다.

 

 

Gradle의 속성파일

 

그레이들의 속성파일은 gradle.properties 라는 이름으로 명명된다.

빌드 환경 속성등 내용들이 기술되어 있다.

보통 gradle.properties 파일은 해당 프로젝트 하위에 위치한다.

 

 

환경변수 / 명령어 옵션과 buildSrc

환경변수 : 시스템에 등록한 Gradle 설치정보

 

명령어 옵션 : 빌드 수행 시 명령어와 옵션 정보를 인수로 전달

 

build.gradle 파일에 빌드와 관련된 내용을 기술했을 경우에

빌드수행을 위해서 명령어와 옵션 정보를 인수로 전달한다.

 

gradle -Pname=gradle hello

gradle 이라는 명령어를 통해 P라는 옵션의 name에 gradle 이라는 값을 전달하여

hello라는 테스크를 호출해서 빌드를 수행하도록 한다.

뒤에서 자세히 배우도록 한다.

명령어

 

buildSrc : 빌드 수행 시 클래스 파일이나 플러그인과 같은(공통적으로 사용하는 부분)을 저장하여 참조하는 디렉토리

 

 


 

6. 그레이들의 빌드 수행

그레이들의 빌드 수행 단계

그레이들의 빌드 수행 단계

 

 

 

명령어 해석(옵션 및 인수 확인)

 

디렉토리 확인(Home, Root...)

 

속성 파일 확인

 

클래스 인스턴스 생성

 

실행 모드 판단

- 데몬 모드 : 명령어 옵션 -daemon 지정

- GUI 모드 : 명령어 옵션 -gui 지정

- CLI모드 : 실행모드 옵션 지정 없을 시

 

데몬모드와 GUI모드를 동시에 사용했을 경우에 내부적으로 정의되어있는 우선순위에 따라

우선순위가 높은 옵션이 먼저 실행된다. Gradle에서는 GUI모드가 데몬모드보다 우선순위가 높다.

 

그레이들 생명주기 Script 초기화

Script초기화 -> Project Settings -> Task 실행 을 그레이들 생명주기로 나누어서 정의하는 경우도 있다.

 

Script 초기화 단계

 

Script 파일 확인 및 읽기

 

멀티 or 싱글 프로젝트 판단

 

Project 객체 생성

 

명령어 옵션 및 인수 설정

 

그레이들 생명주기 Project Settings

 

Project Settings

 

참조 중인 라이브러리 확인

 

Task객체 및 테스크 그래프 생성

 

 

테스크 그래프

프로젝트에서 빌드를 수행하기 위해 정의되어 있는 텍스트들을 확인하게 되는데 이 텍스트 사이에

의존관계를 확인하게 되서 의존관계에 따라서 테스크 수행에 있는 선후행 관계를 분석하게 되고

이러한 분석 결과를 테스크 그래프로 생성하게 된다.

즉, 말그대로 테스크간의 순서도라고 볼 수 있다.

 

테스크에 관련해서는 뒤에서 더 자세하게 알아보자.

 

 

Task실행

 

테스크 추출

 

추출된 테스크 실행

 

 

이러한 단계가 마무리되면 해당 빌드 스크립트에 있는 내용이 출력이 되고그 출력 결과를 확인해 볼 수 있다.

반응형