Gradle: 강력한 빌드 도구
Gradle은 Java, Kotlin, Groovy와 같은 언어를 사용하는 프로젝트에서 빌드, 테스트, 배포를 자동화하기 위한 도구입니다. 2007년에 등장한 Gradle은 기존의 빌드 도구인 Apache Ant와 Maven의 단점을 보완하며 개발자의 생산성을 극대화하는 것을 목표로 만들어졌습니다.
Gradle의 주요 특징
1. 범용 빌드 도구
• Java, Kotlin, Groovy, Scala, C/C++, Python 등 다양한 언어를 지원합니다.
• 웹 개발, 모바일 앱(Android), 데스크톱 애플리케이션 등 광범위한 프로젝트에서 사용 가능합니다.
2. DSL(Domain Specific Language)
• Gradle은 Groovy 또는 Kotlin 기반의 DSL을 사용합니다.
• 코드로 빌드 과정을 정의하므로 유연성과 가독성이 뛰어납니다.
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
}
3. 의존성 관리
• Gradle은 Maven Central, JCenter, Ivy Repository 등에서 의존성을 가져올 수 있습니다.
• 프로젝트에 필요한 라이브러리만 자동으로 다운로드하여 빌드 시간을 최적화합니다.
4. 병렬 빌드
• Gradle은 병렬로 작업을 실행해 빌드 속도가 빠릅니다.
• 대규모 프로젝트에서 Maven보다 빠른 성능을 자랑합니다.
5. 캐싱 기능
• Gradle은 동일한 작업을 반복하지 않기 위해 빌드 결과를 캐싱합니다.
• 변경된 파일만 빌드하여 시간을 단축합니다.
6. 확장성과 유연성
• Gradle은 플러그인 기반으로 동작합니다. 공식 플러그인뿐 아니라 사용자 정의 플러그인도 지원해 무한한 확장성을 제공합니다.
7. Android 공식 빌드 도구
• Gradle은 Android 프로젝트의 공식 빌드 도구로, Android Studio에서 기본적으로 사용됩니다.
Gradle의 장점
1. 빠른 빌드 속도
• Gradle은 Incremental Build(증분 빌드)와 Build Cache 기능을 사용해 이전 빌드와 비교하여 변경된 부분만 빌드합니다.
2. 유연한 설정
• Gradle은 빌드 스크립트를 코드처럼 작성할 수 있어 복잡한 요구 사항도 간단히 처리할 수 있습니다.
3. 강력한 의존성 관리
• 의존성 트리를 시각화하고 충돌을 감지 및 해결하는 기능을 제공합니다.
4. CI/CD와의 통합
• Jenkins, GitLab CI, GitHub Actions와 같은 CI/CD 도구와 쉽게 통합됩니다.
5. 생산성 향상
• 플러그인, 스크립트 캐싱 등으로 반복 작업을 줄여줍니다.
Gradle 설치 및 기본 사용법
1. Gradle 설치
• Gradle은 **SDKMAN!**이나 직접 다운로드로 설치할 수 있습니다.
# SDKMAN을 사용한 설치
sdk install gradle
• 설치 확인:
gradle -v
2. Gradle 프로젝트 생성
• Gradle 프로젝트를 생성하려면 다음 명령어를 사용합니다.
gradle init
• 생성된 디렉토리 구조:
.
├── build.gradle
├── settings.gradle
├── src
│ ├── main
│ │ └── java
│ └── test
│ └── java
3. 빌드 스크립트 작성
• build.gradle 파일에서 플러그인, 의존성, 태스크를 정의합니다.
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'com.google.guava:guava:31.1-jre'
}
4. Gradle 명령어
• 주요 명령어:
• gradle build: 프로젝트 빌드
• gradle test: 테스트 실행
• gradle clean: 빌드 디렉토리 정리
• gradle dependencies: 의존성 확인
항목 | Gradle | Maven |
---|---|---|
DSL | Groovy 또는 Kotlin DSL 사용 | XML 사용 |
빌드 속도 | 빠름 (병렬 빌드 및 캐싱 지원) | 느림 |
확장성 | 플러그인 기반, 확장성 뛰어남 | 플러그인 지원 제한적 |
사용성 | 유연하고 가독성 높은 스크립트 | XML 기반으로 덜 유연함 |
의존성 관리 | 최신 의존성 관리 기능 | 전통적인 의존성 관리 방식 |
주요 사용 사례 | Android, 대규모 프로젝트 | Java, Spring 기반 전통적 프로젝트 |
Gradle 플러그인 예시
Gradle은 다양한 플러그인을 지원하며, 공식 및 사용자 정의 플러그인을 설치하여 사용할 수 있습니다.
1. Java 플러그인
plugins {
id 'java'
}
2. Spring Boot 플러그인
plugins {
id 'org.springframework.boot' version '3.0.0'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
3. Custom Task
• Gradle은 사용자 정의 태스크를 작성할 수 있습니다.
task hello {
doLast {
println 'Hello, Gradle!'
}
}
• 실행:
gradle hello