Groovy 를 기반으로 한 오픈소스 빌드 도구
거의 모든 타입의 소프트웨어를 빌드할 수 있는 빌드 자동화 시스템
✏️ Build
소스코드를 컴파일, 테스트, 정적분석 등을 수행해 실행 가능한 Application 으로 만들어주는 과정
Source code --> Build --> Executable File
📍 Build 의 문제점
- 시간이 흐르면서 다양한 Library 들이 등장하고 이것들을 다운로드 및 추가할 때 마다 번거로움이 발생했다.
- 같은 Library 라도 버전 때문에 개발자들 간의 버전관리 어려움이 발생했다.
- 다운받은 jar 파일의 자체를 전부 신뢰할 수 없기 때문에 보안상의 문제가 있다.
✏️ Groovy 로 문제 해결
- Build 도구중 하나로
JVM 상에서 실행되는 Script 언어 이다.
- Java 와 유사한 문법 구조를 가지며, 호환성이 아주 좋다.
- Gradle 은 Groovy 를 기반으로 되어있기 때문에 java 개발자들이 사용하기 매우 좋다.
📍 Build 도구
- 계속해서 늘어나는 Library 를 자동 추가 및 관리해준다.
- Library 의 버전을 쉽게 동기화 해준다.
✏️ Gradle 의 장점
- 프로젝트를 Configuration Injection 방식으로 정의한다
- 멀티 프로젝트가 빠르다.
- Build 속도가 빠르다.
- Maven 보다 최소 두배 이상, 최대 100 배 빠르다.
📍 1. 프로젝트를 Configuration Injection 방식으로 정의
필요한 정보가 있다면 그것을 프로젝트에 주입한다는 의미이다.
- Maven 의 상속 구조보다 재사용에 용의하다.
- Maven 은 XML 형태로 되어있다.
- Gradle 은 Groovy 형태로 되어있고 가독성이 더 좋다.
- Projet 의 조건을 체크할 수 있어서 프로젝트 별로 주입되는 설정을 다르게 할 수 있다.
📍 2. 멀티 프로젝트 Build
- 하나의 Repository 내에 여러개의 하위 프로젝트를 구성할 수 있다.
- 관리자 서버와 클라이언트 서버를 분리해야 될 경우
- 하나의 모듈로 구현을 할 경우 코드를 복사 붙여넣기 해야하지만,
Gradle 을 사용하면 중복을 피할 수 있다.
📍 Build 속도가 빠른 이유
- Incremental builds (점진적 빌드)
- Gradle 은 빌드 실행 중 마지막 빌드 호출 이후에 task 의 입력, 출력 혹은 구현이 변경됬는지 확인한다.
- 최신 상태로 간주하지 않는다면 빌드는 실행되지 않는다.
- 이 경우 Build Cache 방식으로 실행된다.
- Build Cache (빌드 캐시)
- 두 개 이상의 빌드가 돌아가고, 하나의 빌드에서 사용되는 파일들이 다른 빌드에 사용된다면,
Gradle 은 빌드 캐시를 이용해 이전 빌드 결과물을 다른 빌드에서 사용할 수 있다.
- 다시 빌드하지 않아도 되므로 빌드 시간이 줄어들게 된다.
- Daemon Process (데몬 프로세스)
- 서비스의 요청에 응답하기 위해 오래 동안 살아있는 Process
- Gradle 의 데몬 프로세스는 메모리 상에 빌드 결과물을 보관한다.
- 한 번 빌드된 프로젝트는 다음 빌드에서 매우 적은 시간만 소요된다.
✏️ Gradle 의 Dependencies
의존하고있는 Library 들의 설정을 담당하는 부분이다.
⚠️ repositoryies : 의존 Library 들이 저장되어있는 장소를 설정하는 부분
📍 Dependencies - 의존성의 종류
- api
- 내부 의존성을 컴파일과 런타임 모두에 보이는 API 의존성
- implementation
- 내부 의존성을 런타임에서만 보이는 구현 의존성
- compileOnly
- runtimeOnly
- test + Implementation or CompileOnly or RuntimeOnly