Mill - Java와 Scala를 위한 빠른 JVM 빌드 도구

2 days ago 3

  • Java, Scala, Kotlin을 지원하는 빠르고 확장성 있는 멀티 언어 빌드 도구
  • JVM 빌드 도구들은 속도가 느리고 혼란스럽다는 평가가 있지만, Mill은 JVM의 성능과 사용성을 최대한 활용하도록 함
  • Maven보다 5-10배, Gradle보다 2-4배 더 빠르게 동일한 Java 코드베이스를 빌드할 수 있음
  • Typed Config 언어 및 Immutable 작업 그래프로 빌드를 깨끗하고 이해하기 쉽게 유지
  • 작은 단일 모듈 프로젝트부터 수백 개의 모듈이 있는 대규모 모노레포까지 잘 확장됨

Mill의 장점

  • 성능: Mill의 빌드 그래프는 자동으로 빌드 작업을 캐시하고 병렬화하여 워크플로를 빠르고 반응성 있게 유지함. 프로젝트를 빌드하는 데 필요한 로직에 최소한의 오버헤드만 추가하면서 빌드의 병목 현상을 식별하고 해결할 수 있는 도구를 제공함
  • 유지 관리성: YAML과 Bash를 넘어 간결한 타입 검사 코드로 구성 및 사용자 정의 로직을 작성하고 불변 모듈 트리와 작업 그래프를 사용함. 이를 통해 구성 문제를 조기에 발견하고 IDE(IntelliJ 또는 VSCode)가 다른 빌드 시스템보다 Mill 빌드를 더 잘 이해할 수 있도록 도와줌
  • 유연성: Mill의 작업 및 모듈은 간단한 빌드 단계 추가부터 전체 언어 도구 체인까지 모든 것을 허용함. 빌드에서 모든 JVM 라이브러리를 가져오고, Mill의 풍부한 서드파티 Mill 플러그인 생태계를 사용하거나, 직접 플러그인을 작성하여 Maven Central에 게시하여 다른 사람이 사용할 수 있음

Mill vs 다른 빌드 도구

  • Mill은 Maven, Gradle, Bazel과 같은 다른 도구에서 아이디어를 차용하지만 각 도구의 장점을 배우고 약점을 개선하려고 노력함
  • Mill vs Maven
    • Mill은 Maven의 좋은 기본값 제공 혁신을 따름
      • Mill의 내장 JavaModule은 Maven의 "설정보다 규칙" 스타일을 따르므로 작은 Mill 프로젝트는 시작하는 데 최소한의 노력만 필요하고, 더 큰 Mill 프로젝트는 이러한 기본값을 기반으로 일관된 구조를 가짐
    • Mill은 자동으로 빌드를 캐시하고 병렬화하여 3-10배 속도 향상을 제공함
      • Mill과 함께 제공되는 기본 제공 작업뿐만 아니라 사용자 정의 작업이나 모듈에서도 마찬가지임. 이는 명령줄 빌드 워크플로의 민첩성을 극대화하여 생산성을 유지하는 데 도움이 되며, 특히 빌드 속도가 느려지는 경향이 있는 더 큰 코드베이스에서 중요함. Maven의 "clean install" 워크플로가 1분 이상 걸릴 수 있는 것에 비해 Mill에서는 몇 초밖에 걸리지 않을 수 있음
    • Mill은 Maven보다 빌드 도구를 훨씬 쉽게 사용자 정의할 수 있음
      • 프로젝트는 보통 단일 언어를 컴파일하는 것 이상으로 성장함. 사용자 정의 코드 생성, 린팅 워크플로, 도구 통합, 출력 아티팩트 또는 추가 언어 지원이 필요함. Mill의 확장성과 IDE 경험은 타입 검사된 코드와 샌드박스 작업으로 이를 직접 쉽고 안전하게 수행할 수 있도록 함
  • Mill vs Gradle
    • Mill은 Gradle의 간결성과 확장성을 따름
      • 장황한 XML 페이지 대신 Mill 빌드의 모든 줄은 의미가 있음. 예를 들어 종속성 추가는 Maven에서 찾을 수 있는 5줄의 <dependency> 선언과 달리 Gradle과 마찬가지로 Mill에서는 1줄임. Gradle과 마찬가지로 최종 사용자는 플러그인을 작성하는 과정을 거칠 필요 없이 정확한 요구 사항에 맞게 빌드를 쉽게 사용자 정의할 수 있음
    • Mill은 Gradle보다 2-3배 더 빠를 수 있음
      • Mill과 Gradle은 모두 자동으로 빌드를 캐시하고 병렬화하지만 Mill은 훨씬 적은 고정 오버헤드로 이를 수행함. 이는 빌드 도구를 기다리는 시간이 줄어들고 프로젝트에 정말 중요한 것들을 위한 시간이 더 많아짐을 의미함
    • Mill은 기본적으로 모범 사례를 적용함
      • Mill 빌드의 모든 부분은 기본적으로 캐시되고 증분적임. 모든 Mill 작업은 출력을 표준 위치에 씀. 모든 작업 간 종속성은 수동 주석 없이 자동으로 캡처됨. Gradle은 빌드를 이해하고 올바른 방식으로 설정하는 데 상당한 노력과 전문 지식이 필요한 반면, Mill의 우수한 IDE 경험은 빌드를 더 쉽게 이해할 수 있게 하고 확장성 모델은 빌드 구성을 실수하지 않도록 하므로 Mill에서 가장 쉬운 일이 보통 올바른 일임

Read Entire Article