카테고리 없음
Gradle이란
salmon16
2024. 6. 3. 18:18
Gradle이란
거의 모든 유형의 소프트웨어를 빌드할 수 있을 만큼 유연한 빌드 자동화 도구
빌드 자동화 도구
소스코드를 컴파일하고 의존성을 추가해 실행 가능한 파일. jar,. war로 패키징을 해주어야 한다.
즉 소스 코드를 실행 가능한 파일로 변환해 주는것을 빌드라고 한다.
빌드 도구는 코드를 실행 가능한 파일로 만들어주는 과정 및 라이브러리 관리, 테스팅 등을 자동화하여 수행한다.
빌드 도구를 사용하지 않을 때 문제점
- 반복적인 작업을 수작업으로 진행해야 하므로 비효율적이다.
- 라이브러리를 직접 다운로드 및 버전 업데이트를 해야한다.
- 프로젝트의 의존성을 파악하기 어렵다.
APACHE ANT
- 기본적인 컴파일, 패키징, 배포 작업 수행 가능
- XML 기반의 스크립트 사용
- 작성에 정해진 규칙이 없어 유연성을 가짐
- 라이브러리 의존관계를 정의하는 구조의 부재
- 정해진 규칙이 없어 유지보수가 어렵다.
Maven
- 정해진 라이프 사이클에 따라 빌드 진행
- pom.xml 파일 사용
- 라이브러리 의존성 자동 관리 기능 추가
- xml파일 기반으로 가독성이 좋지 않음
- 상속 구조를 이용한 멀티 모듈 구현
- 의존관계가 복잡한 프로젝트에는 부적
Gradle
Groovy 기반의 스크립트 언어
스크립트 언어
- 동적으로 실행 가능
- 추가적인 로직을 작성하고 싶을 때 스크립트 로직을 직접 작성할 수 있다.
- Gradle이 지원하는 플러그인을 호출할 수도 있다.
Groovy 기반의 DSL
- Groovy 기반으로, 자바와 유사한 문법 구조를 가지며 Java와 호환된다.
- JVM에서 실행되는 스크립트 언어 (Groovy)
plugins
plugins이란 특정 작업을 위해 모아놓은 task들의 묶음이다.
plugins에 java를 추가하면 컴파일, 의존성 추가, 테스트 등 반복된 일을 자동으로 해준다
dependencies
프로젝트에서 사용하는 라이브러리나 패키지를 의존성이라고 한다.
프로젝트별로 어떤 의존성을 갖는지 명시해 주어야 한다.
라이브러리를 추가하는 시점을 설정할 수 있다.
- implementation : 런타임 + 컴파일 시점 모두사용
- complieOnly : 컴파일할 때만 사용되고 런타임 때는 미사용
- runtimeOnly : 런타임 때에만 사용
- testImplementation : 테스트할 때만 사용
repositories
repositories는 라이브러리가 저장된 위치를 정의한다.
대표적으로 Maven Central(), Jcenter(), Google Android()등이 있다.
라이브러리의 저장소를 명시해 주면 Gradle이 해당 저장소에서 필요한 라이브러리를 가져온다.
Gradle Build Cache
- 빌드 결과물을 캐싱하여 재사용한다.
- 라이브러리 의존성을 캐시로 저장 후 이전에 다운로드한 라이브러리를 재사용한다.
Gradle 점진적 빌드
- 마지막 빌드 호출 이후 변경된 부분만 빌드한다.
- 변경되지 않은 부분은 캐시 결과를 검색해 재사용한다.
- 태스크의 입력, 출력 혹은 변경되지 않은 부분은 빌드하지 않는다.
Gradle 데몬 프로세스 사용
- 데몬 프로세스란 다음 빌드 작업을 위해 백그라운드에서 대기하는 프로세스이다.
- 초기 빌드 이후 빌드 실행 시 초기화 작업을 거치지 않는다.
- 초기 빌드된 결과물을 데몬 프로세스에 저장 후 이후 빌드를 진행하면 데몬 프로세스에서 결과물을 가져와 진행한다.
- 이로 인해 한 번 빌드된 프로젝트는 다음 빌드에서 매우 적은 시간만 소요된다.
멀티프로젝트에서의 활용
멀티 프로젝트란 공통되는 도메인을 사용하는 프로젝트를 하나의 프로젝트로 묶어서 관리하는 것이다.
Gradle은 각 프로젝트가 공통으로 사용하는 클래스를 모듈로 만들어 독립적인 각 프로젝트에서 사용할 수 있다.
Configuration Injection
- 필요한 정보를 직접 프로젝트에 주입하는 방식이다.
- 공통되는 정보는 묶어서 주입 가능하다.
- 프로젝트별로 설정을 다르게 주입 가능하다.
- Maven의 상속 구조와 비교했을 때 가독성 측면에서 우월하다.