티스토리 뷰

멀티 모듈로 구성한 개인 프로젝트에서 빌드 시간이 지나치게 긴 것 같았다

test 시간에서 지연되고 있었고 우선 생각해 본 것은 @SpringBootTest를 Mockito를 이용한 단위 테스트들로 바꿔보려 했다

그러나 멀티 모듈로 나눴고 모듈 수만큼의 @SpringBootApplication을 가진 클래스가 존재한다 

-> 21.09.24 현재는 api, batch 담당 모듈을 제외하고 나머지 @SpringBootApplication을 가진 클래스를 없애주었음

 

Test에서 @SpringBootTest를 제거하면 여러 개의 SpringBootApplication이 찾아진다고 하며 에러가 터졌다

@SpringBootTest(classes = "{Controller.class}, {Service.class}")처럼 모든 의존성을 넣어 해결해주는 방법이 있지만

애초에 테스트 시간 단축을 위해 @SpringBootTest를 제거하려 한 것이기에 이 방법대로 할 수는 없었다

 

해결을 위해 @SpringBootApplication을 대체할 수 있는 방법을 고민하고, 찾아보다가 흥미로운 글을 발견했다

gradle을 통해 빌드하는 경우 gradle.properties 또는 gradle.yml을 통해 최적화를 이룰 수 있다는 글이었다

요즘. yml 파일을 자주 사용하기 때문에 참조한 블로그와는 다르게 gradle.yml로 작성해봤다

옵션은 간단하게 cache 기능을 사용하도록 하여 바뀐 것이 없다면 빠르게 실행되어 전체 실행시간이 단축된다

cache 기능을 써본 이들이라면 cache 존재에 따라 성능 차이가 극과 극이라는 것은 잘 알 것이다

configureondemand는 gradle daemon을 항상 사용하게 할 것이라는 옵션이다

daemon에 관해서는 gradle 공식 사이트를 참고하자

 

The Gradle Daemon

The Daemon is a long-lived process, so not only are we able to avoid the cost of JVM startup for every build, but we are able to cache information about project structure, files, tasks, and more in memory. The reasoning is simple: improve build speed by re

docs.gradle.org

 

 

간략하게 설명해보자면 Gradle Daemon은 성능에 있어서 매우 중요하다고 한다

daemon은 지속되는 프로세스로써 빌드마다 생성하는 비용을 줄이고 프로젝트 구조 / 파일에 대한 캐시를 사용할 수 있다

gradle 3.0부터는 기본 세팅이 같이 시작되는 거라고 하는데 일단 두긴 했다

캐시의 영향 때문에 부정확할 수 있으나 내 환경에서 ./gradlew clean build로 빌드를 실행해본 결과 거의 차이 나지 않았다

따라서 configureondemand: true는 적지 않아도 좋다 궁금하신 분들은 직접 실험해보길 권한다

parallel은 병렬 실행을 가능하게 하는 옵션이고 서브 프로젝트가 많을수록 성능 향상 폭이 크다고 한다

멀티 모듈로 구성하는 프로젝트에서는 필수적인 옵션인 것 같다

마지막 jvmargs는 메모리를 설정해주는 것으로 궁금해서 4096으로 돌려봤는데 오히려 빌드가 느려졌다

환경에 맞게 메모리 할당량을 설정해주고 잘 모르겠으면 자신이 사용하는 IDE 툴과 같은 크기의 메모리를 할당해주자

 

 

gradle.yml

org:
  gradle:
    caching: true
    configureondemand: true
    parallel: true
    jvmargs: -Xmx2048m

 

 

 

프로젝트 루트에 있는 .gradle 폴더 안에 gradle.yml 위치

 

 

gradle.yml 적용 전

./gradlew test

25개의 tasks를 돌리는데 45초가 걸렸다

 

 

적용 후

캐시와 병렬 실행으로 45초 -> 9초 획기적인 단축을 만들었다

 

 


2022.01.01 약 300개의 테스트 코드 기준

캐시의 영향이 없도록 clean build 이용하여 총 49초 단축 가능

매번 clean할 필요는 없고 여기서는 명령어의 수행 시간을 정확하게 비교하기 위해 수행하였음

일반적으로 테스트 코드 작성 후 돌려볼 때는 ./gradlew test --parallel로 더 가볍게 실행 가능하며 20s ~ 1m 수행 시간

 

./gradlew clean build

 

./gradlew clean build --parallel

 

 

 

 

참고

 

Gradle 빌드 속도 최적화

개요 글을 쓰다가 크롬이 죽어서 내용이 사라졌다. 짧게 쓴다. springboog + gradle 환경에서 쓰고 있다. Mac 에서 gradle 4.6 을 쓰고 있으니 버전이 다르다면, 찾아 볼 필요가 있다. 스크립트 경로 보통 gr

gusrb.tistory.com

 

댓글
링크
글 보관함
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday