이전에는 여러가지 프로젝트 빌드 옵션들이 존재했지만 최근에는 거의 선호도가 떨어졌고 현재는 Maven과 Gradle을 주로 사용한다.
Maven은 인기있고 엄격한 빌드 자동화 시스템이다.
2002년에 생겼지만 2003년에 아파치 소프트웨어 재단의 최고 프로젝트가 되었을 정도로 오랬동안 사용되었다.
선언적 접근 방식은 당시나 지금이나 다른 방식보다 컨셉적으로 더 단순하다. 원하는 종속성과 플러그인을 pom.xml이라는 XML 파일을 생성하여 선언하면 된다.
mvn명령을 실행할때 완료할 phase를 특정하여 이전 출력을 제거하거나, 패키징, 애플리케이션 실행등의 원하는 작업을 수행할 수 있다.
pom.xml example
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
그래들은 Java JVM프로젝트에서 인기있는 빌드 옵션이다.
DSL을 활용하여 간소하고 유연한 빌드 설정파일 build.gradle을 생성한다.
build.gradle example (groovy)
plugins { id 'org.springframework.boot' version '2.4.0' id 'io.spring.dependency-management' version '1.0.10.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter' testImplementation 'org.springframework.boot:spring-boot-starter-test' } test { useJUnitPlatform() }
build.gradle에는 Groovy 또는 Kotlin언어중 하나를 선택하여 사용할 수 있으며
빌드 대기시간을 줄여주는 기능들을 제공한다.
빌드 도구 선택은 그리 중요하지 않다.
Maven은 엄격한 선언적 접근 방식을 요구하지만, 프로젝트, 환경에 구애받지 않는 일관성을 유지하기 때문에 일반적으로 문제가 거의 발생하지 않고 빌드에 신경 쓸 필요 없이 코드에만 집중할 수 있다.
Gradle은 프로그래밍/스크립팅을 중심으로 구축된 빌드 시스템이기 때문에 때때로 언어의 초기 릴리즈를 사용하는 경우에 문제가 발생하기도 하는 경우가 있다. 만약 언어의 초기 얼리억세스 버젼을 사용한다면, 고려할 필요가 있다.
대규모 프로젝트의 경우에는 Gradle프로젝트가 빌드 속도가 더 빠를 수 있다. 다만 일반적인 마이크로서비스 기반 프로젝트나 소규모 프로젝트의 경우에는 큰 차이가 나지 않는다.
또한 간단한 프로젝트나 빌드 요구사항이 굉장히 복잡한 경우에는 Gradle을 사용하는 편이 유연성 면에서 좋을 수 있지만, 너무 유연하기 때문에 기대한대로 작동하지 않는 경우에는 이슈 해결에 많은 시간이 필요할 수 있다.
SpringBoot는 Maven과 Gradle을 모두 지원하기 때문에 초기화 도구를 사용하면 두 가지 방법을 모두 사용해보고 자신에게 가장 적합한 방법을 선택해보는 것이 좋을 같다.