본문 바로가기
백엔드

Gradle에 대한 짧은 정리

by hseong 2023. 6. 4.

Gradle이란 무엇인가?

Gradle은 소프트웨어를 빌드하는데 사용하는 오픈 소스 빌드 자동화 도구입니다.

.java 파일을 하나를 실행하기 위해서는 javac 명령어를 통해 컴파일하고, 컴파일을 통해 생성된 바이트 코드를 java 명령어를 통해 실제로 실행시켜야 합니다. 만일 작성한 소스 코드에서 외부 라이브러리를 사용하는 경우에는 실행시에 외부 라이브러리의 경로 역시 함께 전달해주어야 합니다.

Gradle과 같은 빌드툴을 사용하면 빌드, 테스트, 패키징 등과 같은 애플리케이션을 만들기 위한 다양한 작업을 자동화 할 수 있습니다.

 

Gradle 프로젝트 만들기

gradle init

gradle init 명령어를 콘솔에 입력하면 프로젝트 Gradle 프로젝트를 만들기 위한 초기화를 진행합니다. 저는 자바 애플리케이션, 스크립트 언어로 Groovy, 테스트 프레임워크로 Junit5를 선택하였습니다.

 

프로젝트 구성요소

생성된 프로젝트를 보면서 각 파일들이 어떤 역할을 하는지 알아보겠습니다.

Gradle Wrapper

Gradle 런타임을 설치하지 않고도 Wrapper를 사용하여 빌드를 실행할 수 있습니다. Wrapper를 이용하여 실행하는 것은 Gradle을 설치하여 빌드를 실행하는 것과 거의 동일합니다. 운영체제에 따라 gradlew 또는 gradlew.bat 을 실행하여 Wrapper를 사용할 수 있습니다.

  • gradle-wrapper.jar
    • Gradle 배포를 다운로드하기 위한 코드를 담고 있는 Wrapper jar 파일입니다.
  • gradle-wrapper.properties
    • Wrapper 런타임 동작을 구성하는 속성 파일입니다.
  • gradlew, gradlew.bat
    • Wrapper로 빌드를 실행하기 위한 쉘 스크립트와 윈도우 배치 스크립트입니다.

 

build.gradle

프로젝트와 해당 작업을 정의하는 빌드 스크립트입니다. gradle 명령을 사용하면 현재 디렉터리에서 build.gradle 이라는 파일을 찾아 Gradle 빌드를 실행합니다.

plugins {
    // Apply the application plugin to add support for building a CLI application in Java.
    id 'application'
}

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use JUnit Jupiter for testing.
    testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2'

    // This dependency is used by the application.
    implementation 'com.google.guava:guava:31.0.1-jre'
}

application {
    // Define the main class for the application.
    mainClass = 'com.study.App'
}

tasks.named('test') {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}

plugins

  • 플러그인에는 자바 코드를 컴파일하거나 빌드, jar로 패키징과 같은 다양한 task 들이 미리 정의되어 있습니다.
  • 여기서는 실행 가능한 JVM 애플리케이션을 쉽게 만들기 위한 task들이 정의되어 있는 application 플러그인이 선언되어 있습니다.

repositories

  • dependecies를 해결하기 위한 repository를 지정합니다.
  • 여기서는 Maven central이 리포지토리로 지정되어 있습니다.

dependencies

  • 프로젝트에 필요한 종속성을 선언하는 부분입니다.
  • 여기서는 테스트를 컴파일하는데 JUnit Jupiter가 필요함을, 프로덕션 코드를 컴파일하는데 guava가 필요함을 선언하고 있습니다.
  • 모든 종속성은 repositories에서 정의한 대로 Maven Central 리포지토리에서 조회해옵니다.
  • implementation, testImplementation을 비롯한 다양한 종속성 설정은 Dependency management에서 확인할 수 있습니다.

application

  • 어플리케이션의 메인 클래스를 정의합니다.

task.named(’test’)

  • test task를 위해 JUnit Platform을 활성화합니다.

 

settings.gradle

멀티 프로젝트 빌드에 참여하는 프로젝트를 정의합니다.

/*
 * This file was generated by the Gradle 'init' task.
 *
 * The settings file is used to specify which projects to include in your build.
 *
 * Detailed information about configuring a multi-project build in Gradle can be found
 * in the user manual at <https://docs.gradle.org/7.5.1/userguide/multi_project_builds.html>
 */

rootProject.name = 'HelloWorld'
include('app')

rootProject.name

  • 기본적으로 설정 파일이 포함된 디렉터리의 이름을 사용합니다.

include

  • 지정된 프로젝트를 빌드에 추가합니다.

'백엔드' 카테고리의 다른 글

Parameter와 Argument  (0) 2023.06.20
[디자인 패턴] 옵저버 패턴  (0) 2023.06.19
[디자인 패턴] 싱글턴 패턴  (0) 2023.06.11
단위 테스트를 위한 Mockito 사용법  (0) 2023.06.06
[nGrinder] 부하 테스트 해보기  (0) 2023.05.22