Skip to content

Latest commit

 

History

History
48 lines (40 loc) · 7.42 KB

Build Automation.md

File metadata and controls

48 lines (40 loc) · 7.42 KB

Build Automation

Maven

MavenJava 기반의 빌드 자동화 도구입니다. 프로젝트의 빌드, 의존성 관리, 테스트 실행, 배포 등을 자동화하는 데 도움을 줍니다. Maven은 Apache Software Foundation에서 개발하였으며, Java 생태계에서 널리 사용되고 있습니다.

  1. 빌드 자동화: Maven은 프로젝트를 컴파일, 테스트, 패키징, 배포하는 과정을 자동화합니다. 빌드 과정은 pom.xml 파일에 정의된 설정에 따라 자동으로 처리됩니다.
  2. 의존성 관리: Maven은 프로젝트에서 사용하는 외부 라이브러리(의존성)를 관리합니다. pom.xml 파일에 필요한 라이브러리를 선언하면, Maven은 자동으로 해당 라이브러리를 다운로드하고 프로젝트에 포함시킵니다.
  3. 프로젝트 관리: Maven은 프로젝트의 구조를 표준화하고, 모든 프로젝트가 동일한 방식으로 빌드될 수 있도록 돕습니다. 이를 통해 팀 간 협업이 용이하고, 프로젝트가 일관되게 관리됩니다.
  4. 플러그인 지원: Maven은 다양한 플러그인을 지원하여, 빌드 외에도 코드 분석, 테스트 실행, 배포 등을 처리할 수 있습니다.
  5. 프로젝트 생명 주기 관리: Maven은 프로젝트의 생명 주기를 관리합니다. 예를 들어, clean, compile, test, package, install, deploy와 같은 여러 빌드 단계가 정의되어 있으며, 각 단계는 특정 작업을 자동으로 실행합니다.

구성

  1. pom.xml (Project Object Model): Maven 프로젝트의 핵심 파일입니다. 이 파일에는 프로젝트의 정보, 의존성, 빌드 설정, 플러그인 등을 정의합니다. XML 형식으로 작성되며, 프로젝트의 모든 설정, 사용할 라이브러리(의존성)을 포함하고 있습니다.
  2. Maven Repository: Maven은 Maven Central Repository라는 중앙 저장소를 통해 의존성을 다운로드합니다. 이 외에도 다른 저장소를 지정할 수 있습니다.
  3. Maven 플러그인: Maven은 다양한 작업을 자동화할 수 있는 플러그인을 지원합니다. 예를 들어, maven-compiler-plugin은 Java 소스를 컴파일하고, maven-surefire-plugin은 단위 테스트를 실행합니다.

Gradle

Gradle오픈 소스 빌드 자동화 도구로, Java를 포함한 여러 프로그래밍 언어와 플랫폼에서 사용됩니다. Gradle은 빌드, 의존성 관리, 테스트 실행, 배포 등을 자동화하며, MavenAnt의 장점을 결합한 도구로, 성능과 유연성에서 뛰어난 특징을 가지고 있습니다.

  1. 멀티 플랫폼 지원: Gradle은 Java뿐만 아니라 Groovy, Kotlin, Scala, Android, C/C++ 등 다양한 프로그래밍 언어와 플랫폼을 지원합니다. 특히 Android 개발에서 널리 사용됩니다.
  2. 성능 최적화: Gradle은 빌드 캐시병렬 빌드를 지원하여, 빌드 성능을 크게 향상시킬 수 있습니다. 이전에 빌드한 작업을 재사용하고, 멀티 프로젝트 빌드에서 성능을 최적화합니다. 또한 Incremental Build 기능을 제공하여, 변경된 부분만 다시 빌드하고, 나머지 부분은 재사용할 수 있습니다. 이로 인해 빌드 속도가 매우 빠릅니다.
  3. 유연한 빌드 스크립트: Gradle은 Groovy 또는 Kotlin DSL(도메인 특화 언어)을 사용하여 빌드 스크립트를 작성합니다. 이를 통해 빌드 설정을 코드처럼 작성할 수 있으며, 동적이고 유연한 설정이 가능합니다. 빌드 스크립트는 프로그램 코드처럼 작성할 수 있기 때문에, 복잡한 빌드 로직을 처리하는 데 유리합니다.
  4. 의존성 관리: Gradle은 다양한 저장소에서 의존성을 다운로드할 수 있습니다.
  5. 다양한 플러그인: Gradle은 플러그인을 통해 빌드 프로세스를 확장할 수 있습니다. 예를 들어, Java, Spring Boot, Android, Kotlin 등 다양한 플러그인을 지원하여, 각 플랫폼에 맞는 빌드 작업을 처리할 수 있습니다.
  6. 멀티 프로젝트 빌드: Gradle은 멀티 프로젝트 빌드를 쉽게 관리할 수 있습니다. 여러 개의 하위 프로젝트가 있을 때, 이를 효율적으로 빌드하고 의존성을 관리할 수 있습니다.

구성

  1. build.gradle: Gradle의 빌드 스크립트 파일입니다. Groovy 또는 Kotlin DSL을 사용하여 작성됩니다. 이 파일에는 프로젝트의 의존성, 플러그인, 빌드 설정 등이 포함됩니다.
  2. settings.gradle: 멀티 프로젝트 빌드에서 프로젝트 구성을 정의하는 파일입니다. 여러 하위 프로젝트를 관리하는 데 사용됩니다.

Maven vs Gradle

  1. Gradle이 더 적합한 경우:
    • 대규모 프로젝트에서 빌드 성능이 중요한 경우 (빠른 빌드 속도, 인크리멘털 빌드, 병렬 처리 등)
    • 유연한 빌드 구성이 필요한 경우 (스크립트 기반의 설정을 통해 복잡한 빌드를 처리할 때)
    • 다양한 언어와 플랫폼을 지원해야 하는 경우 (Java 외에도 Kotlin, Groovy, C/C++ 등 다양한 언어가 포함된 프로젝트)
    • 빌드 캐시병렬 처리를 통해 빌드 성능 최적화가 중요한 경우
  2. Maven이 더 적합한 경우:
    • 단순하고 직관적인 빌드 구성이 필요한 경우 (특히 작은 프로젝트나 표준화된 프로젝트)
    • 안정성장기적인 지원이 중요한 경우 (Maven은 매우 오랫동안 사용되어 왔고, 안정성에 있어서 검증된 도구입니다)
    • 규모가 작은 프로젝트에서 간단하게 설정하고 관리하고자 하는 경우
    • 표준화된 구조일관성이 중요한 경우

npm

npmNode Package Manager의 약자로, Node.js 환경에서 패키지 관리빌드 자동화를 담당하는 도구입니다. npm은 JavaScript 개발자들 사이에서 가장 널리 사용되는 도구 중 하나로, 주로 라이브러리 및 패키지 관리, 의존성 관리, 스크립트 실행 등을 지원합니다.

  1. 패키지 관리: npm은 JavaScript 및 Node.js 프로젝트에서 필요한 라이브러리패키지를 관리합니다. 예를 들어, 외부 라이브러리를 설치하거나, 프로젝트에 필요한 라이브러리 버전을 관리할 수 있습니다.
  2. 의존성 관리: 프로젝트에서 사용하는 외부 패키지들을 package.json 파일에 정의하고, npm은 이를 바탕으로 필요한 패키지를 설치합니다. npm은 각 패키지의 버전을 관리하고, 호환성 문제를 해결합니다.
  3. 스크립트 실행: pm은 빌드 스크립트테스트 스크립트 등을 실행하는 기능을 제공합니다. npm run 명령어를 통해 사용자 정의 스크립트를 실행할 수 있습니다. 예를 들어, npm run build로 빌드 작업을 자동화하거나, npm run test로 테스트를 실행할 수 있습니다.
  4. 패키지 배포: 개발자는 자신이 만든 패키지를 npm registry에 배포할 수 있습니다. 이를 통해 다른 개발자들이 자신의 패키지를 쉽게 설치하고 사용할 수 있습니다. 배포는 npm publish 명령어로 이루어집니다.