Gradle은 Java project의 build를 자동화하는 powerful한 도구입니다. dependency manage, 코드 compile, test execute, 배포 파일 생성까지 다양한 작업을 간편하게 처리할 수 있습니다. 이 글에서는 Gradle의 종속성 configuration과 Maven과의 차이를 간단하게 설명합니다.
Gradle source set 개요
Gradle 프로젝트는 src/main/java
와 src/test/java
같은 소스 세트로 구성됩니다. 주요 빌드 단계는 다음과 같습니다:
- 컴파일: 메인 코드와 테스트 코드 컴파일.
- 테스트: 컴파일된 테스트 실행.
- packaging: JAR 또는 WAR 파일로 패키징.
웹 애플리케이션의 경우, Java 코드와 HTML, JSP 파일을 포함한 WAR 파일을 생성합니다.
Gradle 종속성 구성
종속성은 프로젝트에 필요한 외부 코드입니다. Gradle은 다양한 구성 옵션을 통해 종속성을 선언할 수 있습니다.
주요 종속성 구성
implementation
: 컴파일, runtime, 패키징 모두에 필요한 종속성testImplementation
: 테스트 코드 컴파일 및 실행에 필요한 종속성 (예: JUnit).compileOnly
: 컴파일 시에만 필요한 종속성. (예: Lombok)runtimeOnly
: 런타임에만 필요한 종속성. (예: SLF4J)testCompileOnly
,testRuntimeOnly
: 테스트 컴파일 또는 실행 시에만 필요한 종속성
Gradle 구성의 granularity
Maven은 compile
, provided
, runtime
, test
와 같은 기본 스코프를 provide합니다. 반면, Gradle은 더 세분화된 구성으로 종속성을 관리합니다.
Maven의 문제와 Gradle의 해결책
Maven에서 compile
로 configuration된 종속성은 프로젝트에 dependency하는 다른 프로젝트에도 전파됩니다. 이는 unintended 종속성 누출을 초래할 수 있습니다. Gradle의 implementation
과 api
구성은 이러한 문제를 해결합니다:
implementation
: 종속성이 다른 프로젝트로 전파되지 않도록 합니다.api
: 종속성을 명시적으로 다른 프로젝트에 노출합니다.
예를 들어, 프로젝트 A가 프로젝트 B에 의존하고, B가 Guava를 api
로 설정하면, A도 Guava를 사용할 수 있습니다. 반면 implementation
으로 설정하면 B에서만 사용 가능합니다.
Gradle의 구식 구성
이전 Gradle 버전에서 사용하던 compile
은 더 이상 사용하지 않으며, implementation
과 api
로 대체되었습니다. 구식 구성 대신 최신 구성을 사용하는 것이 좋습니다.
웹 애플리케이션에서의 종속성 관리
Java 웹 애플리케이션을 WAR 파일로 패키징할 때 Servlet API는 compileOnly
로 설정해야 합니다. 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할 수 있습니다.
'SW > Gradle' 카테고리의 다른 글
Gradle Daemon : 개념, 설명, 예제, 명령어, 방법 및 빌드 최적화 (0) | 2025.01.04 |
---|---|
Gradle : Build Phases : 개념, 예제, 설명, 방법 (0) | 2025.01.03 |
Gradle 저장소 간단 가이드 : 개념, 예제, 방법 (0) | 2025.01.01 |
Gradle 프로젝트에서의 의존성 관리 및 레포지토리 설정: 종합 가이드 (0) | 2024.10.19 |
Gradle로 자바 프로젝트 빌드 및 실행: Gradle 태스크 활용 가이드 (0) | 2024.10.18 |