SW/Gradle

Gradle : dependency 및 configuration 가이드, 개념, 예제, 방법

얇은생각 2025. 1. 2. 07:30
반응형

Gradle은 Java project의 build를 자동화하는 powerful한 도구입니다. dependency manage, 코드 compile, test execute, 배포 파일 생성까지 다양한 작업을 간편하게 처리할 수 있습니다. 이 글에서는 Gradle의 종속성 configuration과 Maven과의 차이를 간단하게 설명합니다.

 

Gradle : dependency 및 configuration 가이드, 개념, 예제, 방법

 

Gradle source set 개요

Gradle 프로젝트는 src/main/javasrc/test/java 같은 소스 세트로 구성됩니다. 주요 빌드 단계는 다음과 같습니다:

  1. 컴파일: 메인 코드와 테스트 코드 컴파일.
  2. 테스트: 컴파일된 테스트 실행.
  3. packaging: JAR 또는 WAR 파일로 패키징.

웹 애플리케이션의 경우, Java 코드와 HTML, JSP 파일을 포함한 WAR 파일을 생성합니다.

 

Gradle 종속성 구성

종속성은 프로젝트에 필요한 외부 코드입니다. Gradle은 다양한 구성 옵션을 통해 종속성을 선언할 수 있습니다.

 

주요 종속성 구성

  1. implementation: 컴파일, runtime, 패키징 모두에 필요한 종속성
  2. testImplementation: 테스트 코드 컴파일 및 실행에 필요한 종속성 (예: JUnit).
  3. compileOnly: 컴파일 시에만 필요한 종속성. (예: Lombok)
  4. runtimeOnly: 런타임에만 필요한 종속성. (예: SLF4J)
  5. testCompileOnly, testRuntimeOnly: 테스트 컴파일 또는 실행 시에만 필요한 종속성

 

Gradle 구성의 granularity

Maven은 compile, provided, runtime, test와 같은 기본 스코프를 provide합니다. 반면, Gradle은 더 세분화된 구성으로 종속성을 관리합니다.

 

Maven의 문제와 Gradle의 해결책

Maven에서 compile로 configuration된 종속성은 프로젝트에 dependency하는 다른 프로젝트에도 전파됩니다. 이는 unintended 종속성 누출을 초래할 수 있습니다. Gradle의 implementationapi 구성은 이러한 문제를 해결합니다:

  • implementation: 종속성이 다른 프로젝트로 전파되지 않도록 합니다.
  • api: 종속성을 명시적으로 다른 프로젝트에 노출합니다.

 

예를 들어, 프로젝트 A가 프로젝트 B에 의존하고, B가 Guava를 api로 설정하면, A도 Guava를 사용할 수 있습니다. 반면 implementation으로 설정하면 B에서만 사용 가능합니다.

 

Gradle의 구식 구성

이전 Gradle 버전에서 사용하던 compile은 더 이상 사용하지 않으며, implementationapi로 대체되었습니다. 구식 구성 대신 최신 구성을 사용하는 것이 좋습니다.

 

웹 애플리케이션에서의 종속성 관리

Java 웹 애플리케이션을 WAR 파일로 패키징할 때 Servlet APIcompileOnly로 설정해야 합니다. server(Tomcat 등)에서 제공되기 때문에 WAR 파일에는 포함되지 않습니다.

 

example build.gradle 파일:

plugins {
    id 'java'
    id 'war'
}

dependencies {
    implementation 'com.google.guava:guava:31.0.1-jre'
    compileOnly 'javax.servlet:javax.servlet-api:4.0.1' // 서버에서 제공
    testImplementation 'junit:junit:4.13.2'
    runtimeOnly 'ch.qos.logback:logback-classic:1.2.3' // 런타임 로깅
}

 

결론

Gradle의 종속성 구성은 Maven보다 flexible하고 강력합니다. implementation, api, compileOnly, runtimeOnly 등을 utilize하면 종속성 누출을 방지하고, 종속성을 효과적으로 관리할 수 있습니다. 이러한 구성을 잘 이해하고 활용하면 빌드 프로세스를 효율적으로 관리하고, maintenance가 용이한 고품질 Java 애플리케이션을 development할 수 있습니다.

반응형