빌드 툴(ant, maven, gradle)
빌드 툴은 소프트웨어 개발 생명주기에서 빌드(build) 단계를 자동화하는 도구입니다. 빌드 단계는 소스 코드를 컴파일하고 패키징하여 실행 가능한 소프트웨어를 만드는 과정입니다.
1. 빌드 관리 도구
프로젝트에 필요한 xml, properties, jar파일들을 자동으로 인식하여 빌드해주는 도구, 소스코드 컴파일, 테스트, 정적분석등을 함, 외부 라이브러리를 참조하여 자동으로 다운로드 및 업데이트를 관리해줌
2. 빌드 관리 도구의 종류
2.1 Ant
Ant는 Apache Ant 프로젝트의 일부로 개발된 빌드 툴입니다. XML 기반의 빌드 파일을 사용하며, 유연하고 간단한 문법을 가지고 있습니다. Ant는 자바 프로젝트 뿐만 아니라 C/C++, Python 등 다양한 언어의 프로젝트에서도 사용할 수 있습니다.
2.2 Maven
Maven은 Apache Maven 프로젝트에서 개발한 빌드 툴입니다. XML 기반의 빌드 파일을 사용하며, 프로젝트의 의존성 관리와 라이브러리 관리를 위한 중앙 저장소(Central Repository)를 제공합니다. 이를 통해 프로젝트 개발 단계에서 필요한 라이브러리와 의존성을 자동으로 다운로드하고 관리할 수 있습니다. Ant 이후로 라이프 사이클을 도입하였다.
2.3 Gradle
Gradle은 Groovy 기반의 빌드 자동화 도구입니다. Groovy는 자바 가상 머신에서 실행되는 동적 객체 지향 프로그래밍 언어입니다. Gradle은 Maven과 Ant의 장점을 결합하여 빌드 툴의 효율성과 유연성을 높였습니다. Gradle은 스크립트 기반의 빌드 파일을 사용하며, 이를 통해 다양한 빌드 작업을 지원합니다.
라이프 싸이클?
라이프 싸이클(lifecycle)이란 소프트웨어 개발에서 빌드나 배포와 같은 단계를 일관성 있게 관리하기 위한 개념입니다. Maven을 사용할 경우 프로젝트 라이프 사이클을 따라 소스 코드를 컴파일하고 패키징하고 배포하는 등의 작업을 자동화할 수 있습니다.
다음은 Maven 라이프 사이클의 예시입니다.
- validate : 프로젝트가 올바른지 확인합니다.
- compile : 프로젝트의 소스 코드를 컴파일합니다.
- test : 프로젝트의 단위 테스트를 실행합니다.
- package : 프로젝트를 패키징합니다.
- verify : 패키징된 프로젝트가 품질 기준을 충족시키는지 검증합니다.
- install : 패키징된 프로젝트를 로컬 저장소에 설치합니다.
- deploy : 패키징된 프로젝트를 원격 저장소에 배포합니다.
다음은 Maven을 사용하여 junit과 guava 라이브러리를 프로젝트에 추가하는 예시입니다.
위 예시에서는 junit과 guava 라이브러리를 사용합니다. junit은 테스트를 위한 라이브러리이고, guava는 Google에서 제공하는 유틸리티 라이브러리입니다. 이를 pom.xml 파일에 명시해 두면 Maven은 이 라이브러리들을 자동으로 다운로드하여 프로젝트에서 사용할 수 있게 됩니다.
3. Maven
설명
자바의 대표적인 관리 도구였던 Ant를 대체하기 위해 개발되었으며 pom.xml파일로 라이브러리 등을 명시하여 관리한다. 참조한 외부 라이브러리에 관련된 다른 라이브러리도 자동으로 관리됨
Maven의 pom.xml파일을 사용하는 예시입니다.
위 예시에서는 junit과 guava 라이브러리를 사용합니다. junit은 테스트를 위한 라이브러리이고, guava는 Google에서 제공하는 유틸리티 라이브러리입니다. 이를 pom.xml 파일에 명시해 두면 Maven은 이 라이브러리들을 자동으로 다운로드하여 프로젝트에서 사용할 수 있게 됩니다.
대표 태그
태그 | 설명 |
<project> | 프로젝트 정보를 담고 있는 태그 |
<name> | 프로젝트 이름을 명시하는 태그 |
<properties> | 프로젝트에서 사용하는 속성을 명시하는 태그 |
<build> | 빌드 설정 정보를 담고 있는 태그 |
<modelVersion> | POM 모델 버전을 명시하는 태그 |
<dependencies> | 프로젝트에서 사용하는 라이브러리 등의 의존성을 명시하는 태그 |
<dependency> | 의존성 정보를 담고 있는 태그 |
<groupId> | 그룹 ID를 명시하는 태그 |
<artifactId> | 구분될 수 있는 프로젝트 id를 작성 |
<version> | 프로젝트 버전을 의미함, 개발 단계에 따라 구분 |
<scope> | 의존성의 범위를 명시하는 태그 |
4. Gradle
설명
Gradle은 Groovy 언어를 기반으로 한 빌드 자동화 도구입니다. Maven, Ant의 장점을 결합하여 빌드 작업의 효율성과 유연성을 높였습니다. 스크립트 기반의 빌드 파일을 사용하며, 이를 통해 다양한 빌드 작업을 지원합니다. Groovy는 자바 가상 머신에서 동작하는 동적 객체 지향 프로그래밍 언어입니다. Gradle은 멀티 프로젝트 빌드를 지원하고, Maven보다 더 유연한 빌드 프로세스를 제공합니다. 또한, Gradle은 증분 빌드(incremental build)를 지원하여 변경된 파일만 다시 컴파일하고 패키징할 수 있습니다.
Gradle vs Maven
- Gradle이 성능적 부분에서 더 좋음
- Maven에 비해 Gradle이 대규모 프로젝트에서의 성능이 좋음
- maven은 pom.xml에서 작성, gradle은 build.gradle에서 작성
근데 왜 maven을 더써요?
- 다양한 프레임워크가 있는데 왜 스프링을 쓸까요?
- 이와 같이 maven이 먼저 나왔고, 많은 개발자분들이 사용하다 보니 아직까지는 더 많이 사용합니다.
gradle 대표 용어
아래는 Gradle의 대표적인 용어와 간단한 설명입니다.
용어 | 설명 |
Project | Gradle에서 빌드하는 대상이 되는 것. 설정 파일과 소스 파일을 포함합니다. |
Task | 빌드를 수행하는 작업 단위. Task는 다른 Task를 의존할 수 있습니다. |
Plugin | Task를 만들기 위한 규칙을 정의하는 것. 예를 들어 Java Plugin은 Java 소스 코드를 컴파일하고 JAR 파일을 생성하는 Task를 정의합니다. |
Build Script | 빌드를 수행하기 위해 작성하는 스크립트. Gradle은 Groovy나 Kotlin 언어를 사용하여 작성할 수 있습니다. |
Dependency | 프로젝트가 의존하는 라이브러리나 모듈을 나타냅니다. Gradle은 Maven Central Repository나 JCenter 등 다양한 저장소에서 의존성을 관리할 수 있습니다. |
Repository | 의존성을 검색하고 다운로드할 수 있는 위치를 나타냅니다. Gradle은 Maven Central Repository, JCenter, Google Maven Repository 등 다양한 저장소를 지원합니다. |
Test | 소스 코드의 테스트를 위한 작업 단위. JUnit, TestNG 등 다양한 테스트 프레임워크를 지원합니다. |
Group | 프로젝트를 그룹으로 묶는 것. Group ID를 사용하여 프로젝트를 구분합니다. 예를 들어, com.example 프로젝트와 com.example.test 프로젝트는 같은 Group ID인 com.example에 속합니다. |