반응형
이번 시간에는 그레이들의 빌드에 대해 알아보겠습니다.
빌드란 무엇인가
소프트웨어는 빌드는 소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그 결과를 말한다.
빌드 대상이 되는 소스 코드의 언어 종류에 따라 빌드 프로세스나 생성되는 결과물이 다르다.
빌드 툴은 컴파일부터 결과를 생성까지의 프로세스를 실행한다.
하지만 컴파일이 필요한 언어의 빌드에만 국한되는 것은 아니다.
- 지정한 디렉터리의 파일을 별도의 디렉터리에 복사한다.
- 지정한 애플리케이션을 실행한다.
같은 처리도 빌드 프로세스에 넣을 수 있다.
빌드 대상에 어떤 액션을 취하는 것, 이것이 빌드 툴에서 말하는 빌드다.
그레이들에서는 실행 단위를 태스크라고 부른다.
이 태스크를 실행하는 것을 빌드라고 하며, 빌드를 실행하기 위한 구조가 그레이들의 근간이다.
빌드의 입력 정보
아래 이미지는 빌드 실행 시 사용하는 입력 정보를 도식화한 것이다.
단, 그림에 적힌 모든 입력 정보를 매번 사용하는 것은 아니다.
초기화 스크립트
- 빌드 시 가장 먼저 실행되는 그루비 스크립트다.
- 기본 파일명은 init.gradle이며, 주로 사용자 정보나 실행 환경 같은 초기 설정을 하는 데 사용된다.
- 초기화 스크립트 지정 방법에는 몇 가지가 있고, 여러 개의 스크립트 파일을 나눠서 지정할 수도 있다.
설정 스크립트
- 빌드 대상 프로젝트를 설정하는 그루비 스크립트다.
- 기본 파일명은 settings.gradle이며, 주로 빌드에 포함할 프로젝트를 정의하는 데 사용된다.
- 멀티 프로젝트에서는 반드시 필요한 스크립트 파일로, 그레이들의 규칙에 따라 파일과 디렉터리를 배치해야 한다.
빌드 스크립트
- 빌드 입력 정보 중에서 가장 중요한 '빌드 정의'를 기술하는 그루비 스크립트다.
- 기본 파일명은 build.gradle이다.
- 주로 프로젝트 의존관계나 태스트 정의를 할 때 사용하며, 일반적인 빌드에서는 이 파일만 있어도 충분하다.
속성 파일
- 그레이들이 표준으로 참조하는 속성 파일로, 파일명은 gradle.properties다.
- 환경에 따라 값이 달라지는 빌드 스크립트를 밖에 기술하고 싶을 때 사용된다.
- 빌드 실행 시 자동으로 이 파일을 읽으므로 빌드 스크립트에 따로 기술하지 않고도 편리하게 사용할 수 있다.
환경 변수/ 명렬줄 인수
- 그레이들이 설치된 장비의 환경 변수와 빌드 실행 시 명령줄에서 전달하는 인수를 의미한다.
- 그레이들이 실행하는 프로세스에 고유한 환경 값을 전달하고 싶거나 실행에 관련된 설정을 할 때 필요하다.
buildSrc 프로젝트
- 빌드 시 참조하는 클래스 파일이나 플러그인 코드를 저장하는 프로젝트 디렉터리다.
- 여러 개의 빌드 스크립트가 참조하는 클래스 파일이나 자체 플러그인을 저장할 때 사용된다.
- 표준 빌드에서는 사용할 일이 거의 없지만, 복잡한 처리를 해야 하는 빌드에서 사용하면 빌드 스크립트와 처리를 분할할 수 있다.
3개의 스크립트 파일이 몹시 중요하다.
스크립트 파일에 기술한 내용은 빌드를 실행했을 때 그레이들 고유의 도메인 객체에 위임된다.
- 초기화 스크립트: Gradle 객체
- 설정 스크립트: Settings 객체
- 빌드 스크립트: Project 객체
빌드 흐름
아래와 같은 빌드 스크립트와 프로젝트가 있다고 가정하자.
//gradle-basic/build.gradle 경로
task greet << { println 'hello, ' + user }
//gradle -Puser=kim gree 터미널에 해당 명령어 입력
그레이들의 빌드 흐름은 크게 아래와 같은 순서로 이루어진다.
- 터미널 명령어 입력
- 명령어 해석 ~ 그레이들 실행
- 스크립트 파일 초기화
- 프로젝트 설정
- 태스크 실행
- 터미널 완료 결과 출력 및 빌드 완료
명령어 해석 ~ 그레이들 실행
- 먼저 gradle 명령의 명령줄 인수를 해석해서 명령줄 옵션이 제대로 지정되었는지 확인한다.
- 그런 다음 명령줄 옵션으로 홈 디렉터리 경로와 프로젝트 디렉터리를 해석하고 속성 파일을 읽는다.
- 마지막으로 명령줄 오션을 기준으로 적절한 실행 모드(CLI, 데몬, GUI)를 판정하고, 실행 환경에 맞는 클래스를 선별해서 인스턴스로 만든다.
스크립트 파일 초기화
- 그레이들을 실행하면 바로 빌드가 시작된다.
- 그레이들은 빌드 시작부터 종료까지의 생명 주기를 세 단계로 나눠서 처리한다.
- 첫 번째는 초기화 단계로 스크립트 파일을 읽거나 그레이들의 실체인 도메인 객체를 생성하는 단계다.
- 이 단계에서 가장 중요한 점은 빌드 대상이 싱글 프로젝트인지 멀티 프로젝트인지 명확하게 한 다음, 프로젝트를 나타내는 도메인 객체를 생성하는 것이다.
- 위의 스크립트 파일은 빌드 스크립트뿐이므로 실행 디렉터리인 gradle-basic 디렉터리를 현재 프로젝트로 하여 Project 객체를 생성한다.
- 또한 명령어 인수로 설정한 use 속성(-Puser=kim)은 Project 객체를 생성한 직후에 설정된다.
프로젝트 설정
- 다음으로 빌드에 필요한 다양한 정보를 설정한다.
- 이 처리는 설정 단계라고 하며, 프로젝트가 참조하는 의존 라이브러리 해석이나 태스크 생성 같은 빌드 실행을 위한 준비 작업을 한다.
- 설정 단게에서 중요한 것은 정의된 태스크를 조사해서 태스크 간 의존관계를 그래프로 만든 태스크 그래프를 실행하는 것이다.
- 이 과정을 마치면 빌드에 필요한 태스크가 추출된다.
- greet 태스크를 나타내는 Task 객체가 생성되어 태스크 그래프에 추가된다.
태스크 실행
- 마지막으로 태스크를 실행한다.
- 이 단계는 실행단계라고 하며, 설정 단계에서 작성한 태스크 그래프에서 실행 대상 태스크를 추출하여 실행한다.
- 태스크 그래프에서 greet 태스크의 Task 객체를 추출하여 실행한다.
이상으로 포스팅을 마칩니다. 감사합니다.
참고자료
Gradle 철저 입문 5장
반응형
댓글