728x90
1. Gradle이란?
Gradle은 오픈소스 빌드 도구로, 다음과 같은 특징이 있다.
- Groovy 또는 Kotlin DSL을 사용해서 빌드 스크립트를 작성
- 의존성 관리: 외부 라이브러리 쉽게 다운로드하고 관리
- 빌드 캐시, 병렬 빌드 지원: 빠른 빌드 가능
- 유연성: 사용자 정의 태스크 추가 가능
- 다양한 언어 지원: Java, Kotlin, Scala, Android 등
728x90
2. Gradle 주요 개념
📦 프로젝트와 태스크(Task)
- Gradle은 기본적으로 프로젝트 단위로 구성됨
- 각 프로젝트에는 여러 개의 태스크(task)가 있음
- 예: 컴파일, 테스트, 패키징, 배포 등
예시
// build.gradle (Groovy DSL)
task hello {
doLast {
println 'Hello, Gradle!'
}
}
$ gradle hello
Hello, Gradle!
🧱 의존성 관리 (Dependency Management)
Gradle은 중앙 저장소(Maven Central, JCenter 등)에서 필요한 라이브러리를 가져와서 사용하게 해준다.
dependencies {
implementation 'com.google.guava:guava:32.0.1-jre'
testImplementation 'junit:junit:4.13.2'
}
🗂️ 설정 파일 구조
- settings.gradle(.kts)
프로젝트의 이름이나 서브 프로젝트 설정을 담당 - build.gradle(.kts)
실제 빌드 로직이 들어가는 곳. 가장 많이 다루는 파일 - gradle.properties
공통 속성 값(예: 버전, API 키 등) 지정하는 곳
3. Gradle vs Maven vs Ant
항목 | Gradle | Maven | Ant |
DSL | Groovy/Kotlin | XML | XML |
성능 | 빠름 (캐시 등) | 보통 | 느림 |
의존성 관리 | O | O | 수동 설정 필요 |
유연성 | 매우 높음 | 보통 | 높음 (복잡) |
4. Android에서의 Gradle
Android는 기본적으로 Gradle 기반의 빌드 시스템을 사용
- build.gradle (Project)
전체 프로젝트에 적용되는 설정 (예: Gradle 버전, 저장소 등) - build.gradle (Module)
앱이나 라이브러리 모듈에 대한 세부 설정 (dependencies, buildTypes 등)
android {
compileSdk 34
defaultConfig {
applicationId "com.example.app"
minSdk 24
targetSdk 34
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
}
}
}
5. 자주 사용하는 명령어
# 빌드 실행
gradle build
# 의존성 확인
gradle dependencies
# 특정 태스크 실행
gradle test
# 캐시 클리어
gradle clean
# 데몬 비활성화 후 실행
gradle --no-daemon build
6. Gradle Wrapper
프로젝트에 포함된 gradlew/gradlew.bat를 통해 Gradle이 설치되어 있지 않아도 빌드 가능하게 해준다.
- ./gradlew build
로컬에 Gradle이 없어도 해당 프로젝트에 지정된 버전으로 실행 가능
7. 빌드 자동화 도구를 사용하는 이유
컴파일, 테스트, 패키징, 배포와 같은 반복 작업을 자동화하여 개발 생산성을 높일 수 있다.
일관된 빌드 환경을 제공하여 어떤 환경에서나 동일한 빌드 결과를 보장할 수 있다.
증분 빌드, 빌드 캐시, 병렬 처리 등을 통해 빌드 속도를 최적화할 수 있다.
테스트 누락 등 수동 작업 시 발생할 수 있는 휴먼 에러를 방지할 수 있다.
외부 라이브러리를 자동으로 관리하여 의존성 버전 충돌을 줄일 수 있다.
CI/CD와 연동하여 빌드 후 패키징, 배포까지 연속적으로 처리할 수 있다.
끝.
- 참고
728x90
'개발 > Java & Kotlin' 카테고리의 다른 글
[Spring] OSIV(Open Session In View) 옵션 (67) | 2025.06.30 |
---|---|
[Spring] Spring 프로젝트에서 레이어드 아키텍처 제대로 이해하기 (83) | 2025.06.23 |
[Spring] 트랜잭션 롤백하는 예외 (76) | 2025.05.12 |
[Java] Null Object Pattern 공부 (29) | 2025.05.04 |
[JPA] JPA에서 양방향 @OneToOne 관계와 Lazy Loading의 한계 (95) | 2025.04.06 |