maven / / 2023. 5. 8. 07:57

mvnd 사용법

소개

mvnd 프로젝트는 gradle같은 기술을 사용하여 maven 빌드를 더 빠르게 하는데 목적이 있다.

아키텍처 설명

  • mvnd는 maven을 포함하고 있다.
  • 실제 빌드는 데몬이라는 백그라운드 프로세스 내에서 일어난다.
  • 하나의 데몬 인스턴스가 mvnd 클라이언트에서 계속적인 요청을 처리한다.
  • mvnd 클라이언트는 GraalVM을 사용하여 실행되는 네이티브 프로그램이다. 전통적인 JVM과 비교하여 더 빠르게 시작하고 메모리를 적게 먹는다.
  • 빌드 요청을 처리하는 데몬이 없다면 여러 데몬은 병렬로 처리될 수 있다.

아키텍처 장점

  • 실제 빌드를 실행하는 JVM은 각 빌드를 위해 새로 시작할 필요가 없다.
  • Maven 플러그인 클래스를 가지는 클래스로더는 여러 빌드에 캐싱된다. 플러그인 jar는 한번 읽고 파싱된다. maven 플러그인의 SNAPSHOT 버전은 캐싱되지 않는다.
  • JVM 내의 JIT 컴파일러에서 만들어진 네이티브 코드 역시 유지된다. maven과 비교하여 JIT 컴파일에 의해 시간이 덜 걸린다. 반복적인 빌드동안 JIT에 최적화된 코드가 즉시 사용 가능하다. 이것은 maven 플러그인에서 나오는 코드 뿐만 아니라, JDK 자체에 있는 코드에도 적용된다.

추가적인 특징

  • 기본적으로 mvnd는 다중 CPU 코어를 사용하여 병렬방식으로 모듈을 빌드한다. 사용되는 코어 수는 Math.max(Runtime.getRuntime().availableProcessors() - 1, 1) 공식으로 계산된다. 소스 트리가 병렬 빌드를 제공하지 않는다면 직렬로 빌드하기 위해서 -T1을 옵션을 사용할 수도 있다.
  • 개선된 콘솔 출력: 병렬 출력은 읽기가 힘들다. 그러므로 개별 라인에 각 빌드 쓰레드의 상태를 나타내는 단순화된 뷰로 구현했다.

mvnd 문서: https://github.com/apache/maven-mvnd

mvnd 테스트

실제로 mvnd를 설치하고 빌드를 해보자.


환경

  • Mac Studio M1 Max 10코어, 32G
  • java 1.8

mvnd 설치하기

설치파일을 다운로드를 하여 설치를 해도 되지만 여기서는 brew를 통해 설치를 진행하였다. (Mac)

brew install mvndaemon/homebrew-mvnd/mvnd

대상 소스

테스트를 할 소스는 사내 개발용 프로젝트이며 수백 여개의 멀티모듈로 구성되어 있다.


시간 측정

모든 실행 전에 mvn clean을 사전에 실행한다.


기본 실행 (mvn install)

mvn 기본으로 실행해보자.

mvn -DskipTests install

[실행시간]

Total time: 03:21 min (Wall Clock)


모든 CPU 사용(mvn -T 1C)

기본적으로 maven은 하나의 쓰레드를 사용한다. 가능한 코어 수를 설정함으로써 멀티 쓰레드로 병렬로 실행할 수 있다.

mvn -DskipTests -T 1C install

[실행시간]

Total time: 01:35 min (Wall Clock)


Offline 모드 사용

maven은 매 실행때마다 SNAPSHOT 의존에 대해 새 버전이 있는지 체크한다. 이것은 네트워크 연결을 한다는 것을 의미한다. --offline 옵션으로 이러한 체크를 없앨 수 있다.

mvn -DskipTests -T 1C -o install

[실행시간]

Total time: 01:34 min (Wall Clock)


mvnd 실행

maven 데몬은 maven ecosystem에 최근에 추가된 기능이다. Gradle 데몬과 유사한 것이다.

데몬은 기본적으로 (core수 - 1)의 수만큼 멀티쓰레드로 실행된다.

mvnd -DskipTests install

[실행시간]

Total time: 01:35 min (Wall Clock)


참고

https://github.com/apache/maven-mvnd

https://blog.frankel.ch/faster-maven-builds/1/

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유