spring 프로젝트를 생성하는 화면을 보면 Project에 Maven과 Gradle로 나뉜다. 이게 뭘까?
일단 이 둘은 빌드 관리 도구이다.
📌 빌드란?
소스코드 파일을 컴파일에서 실행할 수 있는 가공물로 변환하는 과정 또는 결과물이다. 다시 말하면 우리가 작성한 소스코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원 등(.xml, jpg, propertied, yml)을 jvm이나 톰캣 같은 WAS가 인식할 수 있는 패키징하는 과정 및 결과물이라고 할 수 있다.
📌 빌드 관리 도구란?
소스코드에서 어플리케이션 생성을 하면서 여러가지 라이브러리를 사용하는데, 이 빌드 관리 도구는 사용자가 직접 관리할 필요 없이 필요한 라이브러리들을 자동으로 관리한다.
대규모 프로젝트에서는 무엇을 빌드할지, 어떤 순서로 할지, 어떤 의존성이 있는지 모두 추적하기 쉽지 않다. 빌드 도구를 사용하면 이를 일관되게 할 수 있다.
코드를 컴파일해서 binary code로 만들고, 패키징하고 코드를 테스트하여 실행가능한 프로그램이 나오기 까지의 과정(빌드)을 자동화하는 것
자바 전용 프로젝트 Lifecycle 관리 목적 빌드 도구이다. Apache Ant 불편함을 해결코자 만들어졌으며, 스프링에서 사용된다.
📌 Groovy란?
JVM에서 사용되는 스크립트 언어로, 문법이 Java와 매우 유사.
Java와 호환이 되며 Java 클래스 파일을 그대로 Groovy 클래스 파일로 사용 가능.
📌 setting.gradle
프로젝트 구성을 설정할 때 작성하는 파일이다. 보통 프로젝트간의 의존성 및 서브프로젝트, 교차프로젝트 같은 멀티 프로젝트를 구성할 때 사용한다. 단, 싱글 프로젝트의 경우에는 생략이 가능하다.
📌 build.gradle
빌드에 대한 모든 기능을 정의하는 파일이다. 프로젝트에서 사용하는 환경 설정, 빌드 방법, 라이브러리 정보 등을 기술함으로써 빌드 및 프로젝트의 관리환경을 구성한다.
1) 초기화
빌드 대상 프로젝트를 결정하고 각각에 대한 Project 객체를 생성한다. settings.gradle 파일에서 프로젝를 구성한다.
2) 구성
빌드 대상이 되는 모든 프로젝트의 빌드 스크립트를 실행한다.
3) 실행
구성 단계에서 생성하고 설정된 프로젝트의 태스크 중에 실행 대상을 결정한다. gradle 명령행에서 지정한 태스크 이름 인자와 현재 디렉토리를 기반으로 태스크를 결정하여 선택된 태스크들을 실행한다.
Gradle을 사용해야 하는 이유
gradle 공식문서에 따르면 Gradle은 메이븐보다 최대 100배까지 빠르게 작동한다고 한다.
프로젝트 빌드타임이 비용문제로 이어질 경우 Gradle을 사용하면 좋을 것 같다. 또한 Gradle로 프로젝트를 진행해보면서 느낀 것은 설정 주입 방식을 통해 사용하고 싶은 라이브러리들을 의존관계에 추가함으로써 간편하게 개발할 수 있다는 점이 편리하게 느껴졌다. Maven은 XML 형식을 지켜야하기 때문에 불편하지 않을까 생각이 든다.
보통 빌드를 완료했다면 해당 프로젝트를 서버에 배포할 것이다. Gradle로 빌드가 완료되면 jar파일이 생성된다. jar 파일을 서버에서 실행시키면 배포가 되는 것!!
https://velog.io/@alicesykim95/Maven과-Gradle의-차이점
https://wangmin.tistory.com/50
https://velog.io/@suwon-city-boy/Maven과-Gradle-빌드-관리-도구에-대해