사전 준비물
스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성
먼저, Maven Project와 Gradle Project 중 하나를 선택하고, 언어와 스프링부트 버전을 선택한다. 스프링 부트 버전은 SNAPSHOT, M1 같은 미정식 버전을 제외하고 최신 버전을 사용하면 된다.
이후 메타데이터를 적어주고, 원하는 의존성(Dependency)을 추가해서 프로젝트를 생성하면 다음과 같이 알집 파일이 받아진다.
이 파일을 IntelliJ에서 오픈하면 된다.
Maven은 프로젝트에서 사용하는 수많은 라이브러리들을 관리해주는 자바 빌드 도구로써 Apache Ant를 대안으로 나왔다. 연관된 라이브러리들이 거미줄처럼 연동되어 관리되기 때문에 사용이 편리하다.
Maven에서는 미리 정의하고 있는 빌드 순서가 있으며 이 순서를 라이프 사이클이라고 한다. 라이프사이클의 빌드 단계를 Phase라고 하는데 이런 Phase들은 의존관계를 가지고 있다.
- Clean : 이전 빌드에서 생성된 파일들을 삭제하는 단계
- Validate : 프로젝트가 올바른지 확인학고 필요한 모든 정보를 사용할 수 있는 지 확인하는 단계
- Compile : 프로젝트의 소스코드를 컴파일하는 단계
- Test : 유닛(단위) 테스트를 수행하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능)
- Package : 실제 컴파일된 소스 코드와 리소스들을 jar등의 배포를 위한 패키지로 만드는 단계
- Verify : 통합테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계
- Install : 패키지를 로컬 저장소에 설치하는 단계
- Site : 프로젝트 문서를 생성하는 단계
- Deploy : 만들어진 Package를 원격 저장소에 release하는 단계
위의 라이프사이클 외에도 더 많은 종류의 라이프사이클이 존재한다. 이를 크게 Clean, Build, site 세가지 라이프사이클로 나누고 있다. 각각의 Phase는 의존관계를 가지고있어 해당 Phase가 수행되려면 이전 단계의 Phase가 모두 수행되어야 한다.
POM - Project Object Model
Maven의 기능을 이용하기 위해 POM이 사용된다. pom.xml에서 주요로 다루는 기능은 다음과 같다.
- 프로젝트 정보 : 프로젝트의 이름, 라이센스 등
- 빌드 설정 : 소스, 리소스, 라이프사이클별 실행한 플로그인 등 빌드와 관련된 설정
- 빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보
- pom 연관 정보 : 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등
Gradle은 Groovy 기반의 오픈 소스 빌드 자동화 도구이다. 기존 Ant의 역할과 배포 스크립트의 기능을 모두 사용할 수 있다.
기존 메이븐의 경우 XML로 라이브러리를 정의하고 활용하도록 되어 있으나, Gradle의 경우 별도의 빌드 스크립트를 통하여 사용할 어플리케이션 버전, 라이브러리 등의 항목을 설정할 수 있다. XML의 구조적인 틀을 벗어나 변수선언, if, else, for등의 코딩에 의한 간결한 정의가 가능한 것이 큰 장점이다.
1. 스크립트 길이와 가독성 면에서 gradle이 우세하다.
2. Gradle의 빌드 속도가 Maven에 비해 10~100배 가량 빠르다.
(gradle은 캐시를 사용하기 때문에 테스트 반복 시 차이가 더 커진다.)
3. 의존성이 늘어날 수록 성능과 스크립트 품질의 차이가 심해질 것이다.
결론적으로, 프로젝트가 커질수록 Gradle이 적합하다. 과거에는 Maven을 많이 사용했지만 최근에는 점점 Gradle로 넘어오고 있는 추세이다.
Ref.
https://www.javatpoint.com/gradle-vs-maven
https://docs.gradle.org/current/userguide/what_is_gradle.html
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev3.6:dep:build_tool:gradle
https://dev-coco.tistory.com/65