Gradle 이란?
✔️ Gradle
이란?
Java
, Kotlin
, Scala
등 JVM
에서 실행되는 언어에서 자주 사용되는 빌드 자동화 도구입니다. 기존의 Ant
와 Maven
의 단점을 보완하여 증분 빌드, 빌드 캐시, 데몬 프로세스를 활용해 빌드 속도를 최적화하고, 멀티 프로젝트를 쉽게 관리할 수 있도록 설계되었습니다. 또한, 다양한 플러그인과 커스텀 태스크를 사용해 확장성을 높일 수 있으며, Groovy
또는 Kotlin DSL
을 사용해 유연한 빌드 스크립트를 작성할 수 있습니다.
✔️ 빌드 자동화 도구를 왜 사용할까요?
- 컴파일, 테스트, 패키징, 배포와 같은 반복 작업을 자동화하여 개발 생산성을 높일 수 있습니다.
- 일관된 빌드 환경을 제공하여 어떤 환경에서나 동일한 빌드 결과를 보장할 수 있습니다.
- 증분 빌드, 빌드 캐시, 병렬 처리 등을 통해 빌드 속도를 최적화할 수 있습니다.
- 테스트 누락 등 수동 작업 시 발생할 수 있는 휴먼 에러를 방지할 수 있습니다.
- 외부 라이브러리를 자동으로 관리하여 의존성 버전 충돌을 줄일 수 있습니다.
- CI/CD와 연동하여 빌드 후 패키징, 배포까지 연속적으로 처리할 수 있습니다.
✔️ Maven과 Gradle의 차이점
가장 큰 차이점은 빌드 스크립트 작성 방식과 빌드 속도입니다.
Maven
은 XML
기반(pom.xml
)의 정형화된 방식으로 작성하지만, Gradle
은 Groovy
또는 Kotlin DSL
을 사용해 더 유연하고 가독성이 좋은 빌드 스크립트를 작성할 수 있습니다. 그리고 Maven
은 항상 전체 프로젝트를 빌드하는 방식이라 빌드 속도가 느리지만, Gradle
은 증분 빌드와 빌드 캐시를 지원해서 훨씬 빠르게 동작합니다.
항목 | Maven | Gradle |
---|---|---|
빌드 스크립트 | XML | Groovy/Kotlin DSL |
빌드 속도 | 느림 | 빠름 |
의존성 관리 | 기본적인 의존성 관리 | 동적 버전 관리, 의존성 캐싱 최적화 |
확장성 | 한정적인 플러그인 기능 | 다양한 플러그인, 커스텀 태스크 지원 |
Android 지원 | 공식적으로 지원되지 않음 | Android 공식 빌드 도구 |
멀티 프로젝트 빌드 | 상속 방식, 설정이 복잡함 | 설정 주입 방식, 멀티 프로젝트 관리 최적화 |
✔️ Dependency Configuration
이 무엇이고 어떤 종류가 있을까?
Dependency Configuration
은 애플리케이션에 필요한 의존성의 사용 범위를 정의하는 설정입니다. 사용 범위를 명확히 구분하는 이유는 빌드 성능 개선과 불필요한 의존성을 제거해서 빌드 결과물의 크기를 최적화하기 위함입니다.
implementation
컴파일 및 런타임 시점에 모두 필요한 의존성입니다. 해당 의존성이 현재 모듈에서만 필요할 때 사용하고, 일반적인 라이브러리나 프레임워크를 추가할 때 주로 사용합니다.
api
implementation
과 비슷하지만, 다른 모듈에서도 접근할 수 있는 의존성을 정의할 때 사용합니다. 예를 들어, a -> b -> c의 의존성이 있을 때, a에서 c를 사용하려면 b에서 c를 api로 추가해야 합니다.
compileOnly
컴파일 시점에만 필요한 의존성으로, Lombok
과 같은 라이브러리에서 사용합니다.
annotationProcessor
컴파일 시점에 실행되는 어노테이션 프로세서를 추가할 때 사용합니다. 예를 들어, MapStruct
와 Lombok
과 같이 컴파일 시점에 어노테이션을 기반으로 특정 프로세스를 수행하는 라이브러리에서 사용합니다.
runtimeOnly
런타임 시점에만 필요한 의존성입니다. 예를 들어, 데이터베이스 드라이버는 컴파일 시점에 필요하지 않지만, 애플리케이션이 실행될 때만 필요하므로 runtimeOnly
로 설정합니다.
testImplementation
, testCompileOnly
, testRuntimeOnly
'test'가 포함된 설정은 테스트 코드에서만 사용되는 의존성을 추가할 때 사용합니다.