Gradle이란?

이택승·2022년 8월 30일
0

Gradle이란?

  • Groovy를 기반으로한 오픈소스 빌드 도구로, 모든 타입의 소프트웨어를 빌드할 수 있는 빌드 자동화 시스템

Build

  • 소스 코드 파일을 실행 가능한 소프트웨어 가공물로 변환하는 과정

    Build 도구가 필요한 이유
    1. 번거로운 빌드 과정으로 인한 비효율 발생
    2. 라이브러리들의 버전 관리의 어려움

Groovy

  • JVM에서 실행되는 스크립트 언어
  • Java와 문법이 비슷하며 호환성이 매우 높다.

Gradle의 장점

  1. Build 속도가 빠르다.
    • Incremental Build
      - 변경된 것이 없으면 같은 작업을 실행하지 않는다.
    • Gradle daemon
      - Gradle daemon은 메모리 상에 빌드 결과물을 보관
      - 백그라운드에서 Gradle을 실행하면서 빌드 시작 시 빌드 결과물을 활용하여 연산을 줄일 수 있다. (자세한 내용)

      Deamon Process: 서비스의 요청에 응답하기 위해 오래 동안 실행중인 백 그라운드 프로세스


2. 빌드 스크립트가 간결하다. (Maven과 달리 XML을 쓰지 않는다.)

3. 커스텀이 쉽다.
- 특정 조건에 따라 설정을 다르게 할 수 있다.

``` groovy
def isCIEnvironment() {

return false
}

myTask.onlyIf { isCIEnvironment() }
```
- 커스텀을 통해 멀티 프로젝트 빌드가 가능하다.

Gradle 사용법

plugins { 
    id 'java-library' 
}

repositories {
    mavenCentral() 
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2' 

    api 'org.apache.commons:commons-math3:3.6.1' 

    implementation 'com.google.guava:guava:31.0.1-jre' 
}
  • plugins: Task들의 집합. 어떤 플러그인을 사용할지 설정

    Task는 클래스들을 컴파일하고 테스트를 하는 등 다양한 작업을 수행하는 작업 단위이다.

  • repositories: 의존 라이브러리를 다운로드 받는 곳을 설정
  • dependencies: 사용할 라이브러리를 설정

Dependency Option

  • implementation: 해당 의존 라이브러리를 런타임에서만 필요로 할 때 사용
    - ex) 내부의 영속성 레이어를 구현하기 위한 Hibernate
    - 런타임에서만 필요로 하기 때문에, 의존 라이브러리 수정 시 해당 모듈까지만 재빌드를 진행한다.

    A <- B (dependencies에서 implementation를 통해 A 라이브러리 의존) <- C
    A 수정 시 B까지만 재빌드

  • api: 해당 의존성을 컴파일과 런타임 모두에서 필요로 할 때 사용
    - 컴파일과 런타임일 때 모두 필요로 하기 때문에, 라이브러리 수정 시 해당 모듈을 의존하는 모듈들도 재빌드를 진행한다.
    - 의존하는 모듈들도 재빌드하기 때문에 implementation이 속도면에서 더 빠를 것으로 예상된다.

    A <- B (dependencies에서 api를 통해 A 라이브러리 의존) <- C
    A 수정 시 C 재빌드

  • compileOnly: 컴파일에서만 사용되는 의존성
  • runtimeOnly: 런타임에서만 사용되는 의존성
  • test + {Implementation, ComplieOnly, RuntimeOnly}: 테스트일 때 사용하는 의존성

참고

https://docs.gradle.org/current/userguide/what_is_gradle.html#five_things
https://tomgregory.com/top-gradle-benefits-over-maven/
https://jongmin92.github.io/2019/05/09/Gradle/gradle-api-vs-implementation/
https://www.devkuma.com/docs/gradle/repositories/

profile
백엔드 개발자입니다.

0개의 댓글