빌드 툴을 간단히 정의하자면 소스 코드의 빌드 과정을 자동으로 처리해주며 외부 소스코드(외부 라이브러리)를 자동 추가 및 관리해주는 프로그램 입니다.
빌드 관리도구는 다음과 같은 작업을 수행한다.
1. 종속성 다운로드 - 전처리(Preprocessing)
2. 소스코드를 바이너리 코드로 컴파일(Compile)
3. 바이너리 코드를 패키징(Packaging)
4. 테스트
실행(Testing)
5. 프로덕션 시스템에 배포(distribution)
빌드는 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 결과를 말한다. 즉, 우리가 작성한 소스코드 (스프링부트의 경우
.java
파일), 프로젝트에서 쓰인 각각의 파일 및 자원(.xml, .jpa, .jpg, properties)을jvm
이나톰캣
같은 WAS가 인식할 수 있도록 패키징하는 과정 및 결과물을 일컫는다.
예를 들면, Java 프로젝트를 진행하면 개발자가 작성한 A.java와 여러 가지 정적 파일 등에 해당하는 resource가 존재한다.
빌드를 한다면 소스코드를 컴파일 해서 .class로 변환하고 resource를 .class가 참조할 수 있는 적절한 위치로 옮기고 META-INF와 MANIFEST.MF들을 하나로 압축하는 과정을 의마한다.
자바의 경우 자바 가상 머신(Java Virtual Machine, JVM)에서 실행 가능한 바이트코드 형태의 클래스 파일이 생성됩니다. 빌드의 단계 중 컴파일이 포함되어 있습니다.
Maven과 Gradle은 자바 프로젝트의 빌드 도구로, 프로젝트의 빌드, 의존성 관리, 테스트, 배포 등을 자동화하는 역할을 합니다. 둘 다 널리 사용되지만, 특징과 장단점이 다릅니다.
선언형
빌드 도구.스크립트 기반
빌드 도구.Maven: pom.xml
XML 형식으로 선언하며, 구조가 고정되어 있어 사용법이 간단하지만, 코드가 다소 장황함.
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.7.5</version>
</dependency>
</dependencies>
</project>
Gradle: build.gradle
Groovy 또는 Kotlin DSL 형식으로 작성. 코드가 간결하고 직관적이며, 유연하게 확장 가능.
plugins {
id 'org.springframework.boot' version '2.7.5'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
}
Maven
Gradle
Maven
Gradle
Maven
Gradle
Maven
Gradle
특징 | Maven | Gradle |
---|---|---|
언어 | XML 기반 | Groovy 또는 Kotlin DSL |
속도 | 느림 | 빠름 (증분 빌드 지원) |
유연성 | 낮음 | 높음 |
표준화 | 뛰어남 | 상대적으로 약함 |
학습 곡선 | 쉬움 | 다소 어려움 |
플러그인 지원 | 제한적 | 강력하고 다양함 |
Maven
Gradle
Maven은 안정성과 간편함이, Gradle은 유연성과 성능이 강점입니다. 프로젝트의 규모와 복잡도에 따라 적절한 도구를 선택하는 것이 중요합니다.
Maven은 Java 전용 프로젝트 관리 도구로, Lifecycle 관리 목적 빌드 도구이며, Apache Ant의 대안으로 만들어졌다.
Maven은 아파치 라이센스로 배포되는 오픈 소스 소프트웨어이다.
Maven을 대체할 수 있는 프로젝트 구성 관리 및 범용 빌드 툴이며, Ant Builder와 Groovy script를 기반으로 구축되어 기존 Ant의 역할과 배포 스크립의 기능을 모두 사용가능하며 스프링부트와 안드로이드에서 사용된다.
Groovy는 JVM에서 실행되는 스크립트 언어이다. JVM에서 동작하지만 소스코드를 컴파일할 필요 없다. Java와 호환되며, Java class file들을 Groovy class로 사용 가능하다.
Java 문법과 유사하여 빌드 처리를 관리할 수 있다.