[Infra] Gradle cache vs Incremental build

이열음·2022년 11월 9일

아니 둘다 이전버전을 들고 비교해서 같으면 빌드 안하고 이전버전 가져오는건데 뭐가 다르지?!!? 라는 의문점에서 시작하는 포스팅..

  • 캐시랑 증분빌드는 무슨차이가 있는지?
  • 캐시랑 증분빌드랑 매커니즘이 같으면.. 캐시만 설정해주는게 이득인가?

Gradle 캐시는?

cache 쓰면 따로 지정안했을때 .gradle에 저장한다. (설정에 따라 원격저장소 가능)

캐시 설정하면 로컬 머신내의 cahces 디렉토리가 생기고, 그 안에 버전별로 캐시가 저장되어있다. 터놓고는 7.4.1 버전이니까 저 안에 캐시가 있을 것이다.

fileHash에는 파일 내용을 해시로 바꾼 값들이 들어있다.

gradle은 입력 파일 세트와 파일 내용들, 출력파일 세트와 파일 내용들을 해시로 만들어 저장해두고 새로운 코드를 빌드할때 해당 해시들을 비교해서 변경감지를 한다. 변경이 감지되지 않으면, 즉 캐시 내에 있는 파일과 동일한 데이터가 있으면 해당 파일은 새롭게 빌드하지 않고 빌드 출력본을 가져다 사용한다.

증분 빌드는?

gradle 증분빌드는 4.1.0 부터 기본값이다. (snapshot 버전을 쓰면 24시간마다 디팬던시의 변경을 감지해서 바뀌면 새로 받음) 캐시랑의 주요한 차이점은 클래스파일(빌드 당시 디펜던시도 포함)은 스냅샷을 비교한다는 것이다. 문서내의 14.9.2를 보면 이런 말이 있다.

작업이 처음 실행되기 전에 Gradle은 입력의 스냅샷을 만듭니다. 
이 스냅샷에는 입력 파일 세트와 각 파일 내용의 해시가 포함됩니다. 
그런 다음 Gradle이 작업을 실행합니다. 작업이 성공적으로 완료되면 Gradle은 출력의 스냅샷을 만듭니다. 
이 스냅샷에는 출력 파일 세트와 각 파일 내용의 해시가 포함됩니다. 
Gradle은 다음에 작업이 실행될 때 두 스냅샷을 모두 유지합니다.

결론

둘다 .gradle에 저장이 되는데

cache는 이전버전에서 받았던거 전부 저장 → 캐시내에 동일한 데이터가 있으면 거기서 꺼내씀

증분빌드는 스냅샷끼리의 비교 → 달라진것만 새로 빌드

정도의 차이점이 있다.

https://docs.gradle.org/2.5/userguide/more_about_tasks.html#sec:up_to_date_checks

0개의 댓글