Java

Gradle

Build (빌드)

내가 개발한 앱을 Web Server에 배포하기 위해서는 Build라는 과정을 거칠 수 밖에 없다.

 

빌드란 소스코드 파일을 실행가능한 소프트웨어 산출물로 만드는 일련의 과정을 말한다.

즉, 소스 코드 파일(.java, .c)을 실행 코드(.jar, .exe, .a) 로 변환하는 과정이라고 할 수 있다.

 

빌드의 단계 중 컴파일이 포함이 되어 있는데 컴파일은 빌드의 부분집합이라 할 수 있다.

빌드 과정을 도와주는 도구를 빌드 툴이라 한다.

 

참고

빌드와 컴파일의 차이

컴파일은 특정 프로그래밍 언어를 다른 프로그래밍 언어로 옮기는 것

  • 컴파일러에 의해 소스코드가 바이너리코드로 변환되는 과정
  • .java → .class

빌드는 독립(standalone) 소프트웨어 가공물로 변환하는 과정

  • 소스코드 파일들을 컴퓨터에서 실행 가능한 소프트웨어 결과물로 만드는 과정
  • (.java, .c) → (.jar, .exe, .a)

⇒ 즉, 빌드는 컴파일보다 더 큰 개념으로 컴파일을 포함하고 있다.

Compile(컴파일) → Build(빌드) → Run(런)

 

빌드 툴 (빌드 도구)

빌드 툴이란 빌드 과정을 자동으로 수행해주는 도구를 의미한다.

계속해서 늘어가는 라이브러리의 추가, 버전 동기화의 번거로움을 줄여준다.

 

일반적으로 빌드 툴이 제공해주는 기능으로는,

전처리(preprocessing), 컴파일(Compile), 패키징(packaging), 테스팅(testing), 배포(distribution)이다.

빌드 툴로는 Ant, Maven, Gradle 등이 있다. 요즘은 Maven, Gradle을 많이 사용

 

참고

  • 이전에는 lib 폴더 하위 jar 파일로 필요한 라이브러리를 직접 추가해주었다.
  • 개발자들간에 버전 관리가 힘들었다.
  • 인증되지 않은 경로에서 다운 받은 jar를 사용함으로써 보안 위험이 존재했다.

Gradle

Gradle 이란?

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

특성

고성능

  • Gradle 은 입력 또는 출력이 변경된 부분의 작업만 실행하여 불필요한 작업을 방지한다.
  • 빌드 캐시를 사용하여 이전 실행 또는 다른 머신 (공유 빌드 캐시 사용)의 작업 출력을 재사용 할수 있다.

JVM 재단

  • Gradle 은 JVM에서 실행되며 사용하려면 JDK (Java Devleopment Kit)가 설치되어 있어야한다.
  • JDK에 의존성이 생기지만, 빌드 스크립트에 표준 JAVA API를 사용할 수 있다.
    • 사용자 정의 작업 유형 및 플러그인과 같은 빌드 로직에서 표준 Java API를 사용할 수 있으므로 Java 플랫폼에 익숙한 사용자에게 좋다.
    • 또한 다양한 플랫폼에서 Gradle을 쉽게 실행할 수 있다.

확장성

Gradle은 JDK에 의존한다고해서 JAVA만 컴파일 할 수 있다고 착각하면 오산이다.

  • Gradle은 Groovy 스크립트를 통해 다양한 기능을 직접 구현할 수 있다.
  • 직접 Task와 플러그인을 만들어 기능을 추가하여 확장할 수 있다.
  • 플러그인을 관리하기 위한 허브가 존재하여, 내가 만든 플러그인을 쉽게 공유 할 수 있다.

IDE 지원

  • Android Studio 나 IntelliJ IDEA, Eclipse 등 몇 가지 주요 IDE를 사용하여 Gradle 빌드를 가져오고 상호 작용할 수 있다.

Wrapper

  • Gradle을 따로 설치 하지 않아도 이미 만든 프로젝트는 새로운 환경에서 빌드 할 수 있다.

 

Gradle 의 작업(task)

핵심 모델은 작업을 기반으로 한다.

Gradle 은 빌드 DAG(Directed Acyclic Graph) 작업(작업 단위)으로 모델링한다.

빌드가 기본적으로 작업 집합을 구성하고 종속성을 기반으로 함께 연결하여 해당 DAG를 생성한다.

작업 그래프가 생성되면 Gradle은 어떤 작업을 어떤 순서로 실행해야 하는지 결정한 다음 실행을 계속한다.

 

Gradle 작업 그래프의 두가지 예)

하나는 추상, 하나는 화살표로 표시되는 작업 간의 종속성

  • 이러한 방식으로 거의 모든 프로세스를 작업 그래프로 모델링 할 수 있으며, 이 것이 Gradle이 매우 유연한 이유 중 하나이다.
  • 이 작업 그래프는 플러그인과 사용자 자신의 빌드 스크립트에 의해 정의될 수 있으며 작업 종속성 메커니즘을 통해 작업을 함께 연결할 수 있다.

작업은 다음과 같이 구성된다.

  • 작업 : 파일 복사 또는 소스 컴파일과 같은 작업을 수행하는 작업
  • 입력 : 작업이 사용하거나 작동하는 값, 파일 디렉토리
  • 출력 : 작업이 수정하거나 생성하는 파일 디렉토리

실제로 위의 모든 내용은 task(작업)가 수행해야 하는 작업에 따라 선택 사항이다.

표준 라이프사이클(생명주기) 작업과 같은 일부 작업에는 작업이 없다.

단순히 편의상 여러 작업을 함께 집계한다.

빌드 단계

Gradle 에는 고정 된 빌드 단계가 있다.

  • 다음 세 단계로 빌드 스크립트를 평가하고 실행하다는 것을 이해하는 것이 중요하다.
  1. 초기화
    • 빌드 환경을 설정하고 참여할 프로젝트를 결정한다.
  2. 구성
    • 빌드에 대한 작업 그래프를 구성하고 구성한 다음 사용자가 실행할 작업을 기준으로 실행할 작업과 순서를 결정합니다.
  3. 실행
    • 구성 단계가 끝날 때 선택한 작업을 실행한다.

이러한 단계는 Gradle의 빌드 생명주기를 형성한다.

 

Reference

What is Gradle?

[번역] Gradle(1)

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

'Java' 카테고리의 다른 글

Lombok  (0) 2022.01.05
Gradle Wrapper  (0) 2021.06.07
JAR & WAR  (0) 2021.06.02
String Method  (0) 2021.01.13
Enum  (0) 2020.12.18