Gradle이란 무엇인가?
: Gradle은 Maven과 Ant의 장점을 결합한 형태로 개발된 현대적인 빌드 자동화 도구입니다.
Java, Kotlin, Groovy 등 다양한 프로그래밍 언어를 지원해 줍니다.
저는 SpringBoot 프로젝트를 생성할 때 Gradle을 통해 프로젝트 및 의존성을 설정을 하는데 이용해 봤습니다.
빌드 자동화(CI)란?
: CI는 개발자들이 코드 변경 사항을 빈번하게 통합하고 테스트하는 방식으로 작업을 진행하는 소프트웨어 개발 방법론입니다. 이를 통해 개발자들은 작은 코드 변경 사항들을 자주 반영하고, 통합 오류를 최소화하여 더욱 안정적인 소프트웨어를 공할 수 있습니다.
Gradle을 사용하는 주목적은 프로젝트의 의존성 관리, 빌드 설정, 테스트, 배포 등을 효율적으로 처리할 수 있는 점입니다.
Gradle의 특징
1. Declareative Build Language (빌드 선언적 언어)
: Gradle은 Groovy 또는 Kotlin 기반의 DSL(Domain Specific Language)을 사용하여 빌드 스크립트를 작성합니다.
이러한 DSL 선언적인 구문으로 이해하기 쉽고, 빌드 프로세스를 유연하고 간결하게 정의할 수 있습니다.
2. 의존성 관리
: Gradle은 프로젝트의 의존성을 관리하는 데 있어 수월하게 해 줍니다. 외부 라이브러리, 프레임워크, 플러그인, 버전 등의 의존성을 빌드 스크립트에서 선언하고, Gradle이 자동으로 해당 의존성을 다운로드하고 관리해 줍니다.
3. 플러그인 지원
: Gradle은 다양한 플러그인을 지원하여 추가 기능을 쉽게 통합할 수 있습니다. 특정 언어, 프레임워크 또는 플랫폼에 대한 플러그인을 적용하여 개발 작업을 간편하게 자동화할 수 있습니다.
4. 빌드 캐싱과 증분 빌드
: Gradle은 빌드 캐싱을 지원하여 이전에 빌드한 결과를 캐시에 저장하고, 변경 사항이 없는 경우 이전 결과를 재사용하여 빌드 시간을 줄일 수 있습니다. 또한 변경된 부부만 다시 빌드하는 증분 빌드 기능을 제공합니다.
라이브러리 의존성 관리
의존성은 주로 모듈로 제공되는데, 이 모듈들을 저장하고 있는 곳을 repository라고 합니다.
repository는 로컬 저장소가 될 수도 있고, 원격 저장소가 될 수도 있습니다.
Gradle에게 어디서 의존성 모듈을 가져올 건지 알려줘야 하는데, repository 선언을 통해 할 수 있습니다.
선언을 하면, Gradle은 특정 task를 실행시키기 위해 필요한 의존성들을 런타임시에 원격 저장소에서 다운로드하거나 로컬 저장소에서 가져옵니다.
Gradle은 향후에 불필요한 네트워크 호출을 하지 않기 위해 의존성 파일들을 dependency cache라 하는 로컬 캐시에 저장합니다.
라이브러리 의존성 설정은 build.gradle 파일에서 할 수 있습니다. build.gradle 파일 내부에서 플러그인, 저장소, 의존성을 설정할 수 있습니다.
Dependency Configuration
Gradle 프로젝트에서 선언된 모든 의존성은 사용되는 특정 범위를 가집니다. 예를 들어 어떤 의존성은 컴파일할 때에만 사용될 수 있고, 다른 의존성은 런타임 할 때에 사용될 수 있습니다.
이렇게 의존성의 범위를 표현한 것을 dependency configuration이라고 한다.
- Implementation: 구현할 때에만 사용된다.
- compileOnly: 컴파일할 때에만 사용되고 런타임 때에는 사용되지 않는다.
- runtimeOnly: 런타임 때에만 사용된다.
- testImplementation: 테스트할 때에만 사용된다