안녕하세요. suky입니다. 😎
추후 포스팅을 진행하면서 재밌는 모듈들을 만들려고 하는데요. 해당 모듈들을 github에 배포할 때 main이 있는 모듈과 분리하여 결합도가 적고, 응집도 있는 모듈을 만들기 위해 멀티 모듈을 공부하고 정리를 하기 위해 이번 시리즈를 진행하게 되었습니다.
총 시리즈는 4부작으로 Gradle이란?, Gradle의 구조, Multi Module 구조, 예제로 보는 Multi Module에 대해서 포스팅할 예정입니다.
Gradle
, Multi Module
을 예제와 함께 알아보며 읽으시는 여러분들도 멀티 모듈에 대해 다양한 시야를 얻으셨으면 좋겠습니다~
공식 문서에는 다음과 같이 설명합니다.
Gradle Build Tool is a fast, dependable, and adaptable open-source build automation tool with an elegant and extensible declarative build language.
번역: Gradle 빌드 도구는 우아하고 확장가능한 선언적 구성 언어를 갖춘 빠르고, 신뢰할 수 있고, 적응 가능한 오픈소스 빌드 자동화 도구입니다.
Gradle은 빌드 자동화 도구입니다. 공식 사이트에서 설명된 특징을 차근차근 알아보면 다음과 같습니다.
Gradle의 첫 특징은 (우아하고 확장 가능한) 선언적 구성 언어를 갖추었다는 것입니다.
start.spring.io에서 Spring Boot를 구성할 때 다음과 같은 화면을 본 적이 있으실텐데요.
Project를 보면 Gradle - Groovy나 Gradle - Kotlin을 보신 기억이 있으실 겁니다. Gradle은 groovy
, kotlin
두 가지 언어를 지원하고, 해당 언어를 이용하여 빌드 환경을 선언적으로 관리합니다.
여기서 선언적이라는 것은 쉽게 말하면 내가 생각하는 빌드환경은 이런 상태야 라는 것을 기술하는 것입니다.
dependency를 예시로 가져왔는데요. 예시의 시스템은 의존성(dependencies)로 spring-boot-starter-web과 spring-boot-starter-test가 필요하다고 선언했습니다. 선언을 하면 Gradle은 선언된 상태를 자동으로 구성해서 빌드를 하게 됩니다.
Gradle의 장점은 빠르다인데요. 정확히는 (Maven에 비해) 빠르다인 것 같습니다.
Gradle 공식 홈페이지에서는 직접 Gradle과 Maven을 비교했는데요. 해당 문서에서는 4가지 부문(Flexibility
, Performance
, User Experience
, Dependency Management
)에서 Gradle이 우수하다고 합니다. 이 중 Performance
의 결과는 다음과 같은데요.
Apache Commons Lang 3
라이브러리를 빌드하면서 벤치 테스트를 진행했습니다. Gradle은 적어도 Maven보다 2배 빠르고, 대규모 빌드인 경우 빌드 캐시를 사용하면 약 100배 정도 더 빠르다고 합니다.
가장 큰 3가지 이유는 다음과 같다고 합니다.
1. Incrementality (증분성)
Gradle은 입출력을 추적하여 필요한 것만 실행시킬수 있고, 변경된 파일만 처리할 수도 있다.
2. Build Cache (빌드 캐시)
동일한 입력을 사용하는 다른 Gradle 빌드의 출력을 재사용한다. 다른 기계에서도 재사용이 가능하다.
3. Gradle Daemon (Gradle 데몬)
빌드 정보를 메모리에 hot(즉시 사용할 수 있는)으로 유지하는 긴 수명의 프로세스를 사용한다.
해당 문서에 따르면 Gradle은 작업 그래프를 작성하고 1. 초기화(INITIALIZATION), 2. 환경 구성(CONFIGURATION), 3. 실행(EXECUTION) 단계를 거치면서 실행되도록 보장을 합니다.
해당 단계들은 DAG(Directed Acyclic Graph; 유향 비순환 그래프)으로 구성되어있고, 유저가 실행되는 로직을 확인할 수 있습니다.
아마 이를 포함해서 여러 곳에서 사용하면서 검증이 되었거나 또는 다양한 이유 때문에 신뢰할 수 있다고 하는 것 같습니다. 하지만 믿음의 영역인 것 같습니다...
Gradle은 다양한 프로젝트(Android, Java, Kotlin, Groovy, ...)에서 사용이 가능합니다. 그리고 다양한 IDE(Anroid Studio, IntelliJ IDEA, Visual Studio Code, ...)에서 지원을 합니다. 이렇듯 다양한 환경에서 Gradle을 사용할 수 있다는 것을 표현한 것으로 보입니다.
이번 포스팅에서는 Gradle에 대해 간략히 알아보면서 대략적인 감을 익히는 것을 진행했습니다. 이제 알아보았으니 다음 포스팅에서 구조를 알아보도록 하죠! 그럼 안녕~ 😎