지금까지 spring 작업을 하면서 설정하는 부분까지는 선택하는 일이 없다보니 잘 모르고 써왔던 게 많았다.
그래서 하나하나 차근히 작성하고 공부해보려고 한다!
Maven과 Gradle은 빌드 관리 도구라고 한다.
빌드는 소스코드 파일들을 컴퓨터에서 실행할 수 있는 독립적 형태로 변환하는 과정과 결과
.java와 같이 우리가 작성한 소스코드나 프로젝트에서 쓰인 .xml, .jpa, .jpg, properties 등을 jvm이나 Tomcat 같은 WAS가 인식할 수 있도록 패키징하는 과정과 결과물이다.
예를 들자면,
Java 프로젝트에서 작성한 .java 와 여러 정적 파일 등에 해당하는 resource가 존재할 것이다.
빌드 과정에서는 해당 소스코드를 컴파일 해서 .class로 변환하고, resource를 .class가 참조할 수 있는 적절한 위치로 옮긴 후, META-INF와 MANIFEST.MF들을 하나로 압축하는 과정이 된다.
빌드 도구란, 소프트웨어 개발에 있어서 소스코드를 실행 가능한 애플리케이션으로 만들어주는 도구를 뜻한다. 이 과정을 자동화하여 관리하는 기능을 하기에 빌드 관리 도구 또는 빌드 자동화 도구라고 부른다.
Maven은 Java 전용 프로젝트 관리 도구로, Lifecycle 관리 목적의 빌드 도구! (Apache Ant의 대안으로 만들어졌다.)
👉 아파치 라이센스로 배포되는 오픈 소스 소프트웨어

clean - validate - compile - test - package - verify - install - site - deploy
(1) clean : 빌드 시 생성되어 있었던 파일들을 삭제
(2) validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계
(3) compile : 프로젝트 소스코드를 컴파일 하는 단계
(4) test : 단위 테스트를 수행하는 단계. 테스트 실패 시 빌드 실패로 처리하며, 스킵이 가능.
(5) package : 실제 컴파일된 소스 코드와 리소스들을 jar, war 등의 파일의 배포를 위한 패키지로 생성.
(6) verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인.
(7) site : 프로젝트 문서와 사이트 작성, 생성하는 단계
(8) deploy : 만들어진 package를 원격 저장소에 release하는 단계
프로젝트 모델링 : Maven은 필요한 라이브러리를 pom.xml에 정의
pom은 Project Object Model의 약자로, 프로젝트 정보(프로젝트 이름, 라이센스, 빌드 설정(소스, 리소스, 라이프 사이클 별 실행한 plugin 등 빌드 관련 설정), 빌드 환경(사용자 환경 별로 달라질 수 있는 프로필 정보, pom 연관 정보(의존 프로젝트, 모듈, 상위 프로젝트 등)을 담고 있다.
플러그인을 통한 전역적인 재사용 : Maven은 빌드에 대한 대부분의 책임을 각 플러그인에 위임 (이러한 플러그들은 Maven저장서 - Repository에 저장됨)
공통 인터페이스 : Maven 이전에는 각 개발환경에 대한 빌드 프로세스를 파악하는 데 시작이 소요되었으나, 빌드에 필요한 프로세스를 정의하고 이를 인터페이스로 제공하여 문제 해결
Maven을 대체할 수 있는 프로젝트 구성 관리 및 범용 빌드 툴이며, Ant Builder와 Groovy script를 기반으로 구축되어 기존 Ant의 역할과 배포 스크립의 기능을 모두 사용가능하며 스프링부트와 안드로이드에서 사용된다.
빌드 속도가 Maven에 비해 10~100배 가량 빠르며, Java, C/C++, Python 등을 지원한다.
Groovy는 JVM에서 실행되는 스크립트 언어이다. JVM에서 동작하지만 소스코드를 컴파일할 필요 없다. Java와 호환되며, Java class file들을 Groovy class로 사용 가능하다.
Java 문법과 유사하여 빌드 처리를 관리할 수 있다.
