

빌드툴 : 빌드(소스코드->애플리케이션 생성) 자동화를 돕는 프로그램
- 수동으로 하는 경우 : 무엇을 빌드할지, 어떤 순서로 할지, 어떤 의존성이 있는지 모두 추적하기 쉽지 않음
- 라이브러리를 다운로드 및 추가하는 번거로움
- 라이브러리의 버전을 쉽게 동기화
역사 : Make -> Ant -> Maven -> Gradle
Maven vs. Gradle
출처 : Gradle 공식문서
Gradle[그래들]
2012년에 출시된 Groovy를 기반으로 한 오픈소스 빌드 도구로, 거의 모든 타입의 소프트웨어를 빌드할 수 있는 빌드 자동화 시스템
- Groovy : JVM 상에서 실행되는 스크립트 언어
Java와 유사한 문법 구조를 가지며, 호환성이 아주 좋다.
장점
- 프로젝트를 설정 주입(Configuration Injection) 방식으로 정의
- Maven 상속 구조보다 재사용에 용이

- 멀티 프로젝트 빌드 가능 : 하나의 repository내에 여러개의 하위 프로젝트를 구성할 수 있음
- 빌드 속도가 빠름
- 점진적 빌드 : 마지막 빌드 호출이후에 변경이 있는 경우만 빌드
- 빌드 캐시 : 빌드 결과물을 캐싱해 두었다가 하나의 빌드에서 사용된 파일들이 다른 빌드에서 사용된다면 다시 빌드 하지 않고 재사용
- 데몬 프로세스 : 빌드 사이에 다음 빌드를 유지
- 서비스의 요청에 응답하기 위해 오래 살아있는 프로세스
- 메모리 상에 빌드 결과물을 보관 -> 한 번 빌드된 프로젝트는 다음 빌드시 매우 적은 시간 소요됨
구조
- 프로젝트 구조 예시
출처 : 링크
- build.gradle : build script
- gradle의 실행 단위 :
task
- 명령어
gradle init
: 프로젝트 생성
gradle run
: 실행
gradle bu ild
: build
gradle {build.gradle에 정의된 task명}
: task목록 확인
- 자바 프로그램을 빌드하고 실행할 task는 이미 플러그인 형태로 추가됨
- gradle.wrapper 디렉토리 : Gradle 환경
- gradlew (맥/리눅스 : gradlew, 윈도우 : gradle.bat)
- 프로젝트마다 Gradle 버전이 다른 경우 호환 문제가 발생할 수 있어 이를 방지하기 위해 내장 gradle을 사용
- 내장 gradle(Gradle Wrapper) 사용을 간편하게 하기 위한
스크립트 파일
- 사용 :
./gradlew {작업명}
(mac), gradlew {작업명}
(window)
build.gradle 파일
plugins{
}
..
repositories{
}
..
dependencies{
implementation 'org.springframework.....'
testImplementation '....'
runtimeOnly '.....'
}
의존성 (ex- B가 A에, C가 B에 의존하는 경우)
- api: 의존 라이브러리 수정시 본 모듈을 의존하고 있는 모듈들 또한 재빌드
- A(api) <- B <- C 의 경우 C 에서 A 를 접근할 수 있음
- A 수정시 B 와 C 모두 재빌드
- implementaion: 의존 라이브러리 수정시 본 모듈까지만 재빌드
- A(implementation) <- B <- C 의 경우 C 에서 A 를 접근할 수 없음
- A 수정시 B 까지 재빌드
- compileOnly : 컴파일에만 사용되는 의존성 정의
- runtimeOnly : 런타임에만 사용되는 의존성 정의
- test + Implementation/compileOnly/runtimeOnly : 테스트시에만 해당 의존성 정의
참고자료