김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 보면서 공부한 내용입니다.
스프링을 사용하면 Maven
과 Gradle
을 많이 들을 수 있다. 이 두 가지는 빌드 관리 도구이다. 소스 코드에서 어플리케이션 생성을 하면서 여러가지 여부 라이브러리를 사용하는데, 이 빌드 관리 도구는 사용자가 직접 관리할 필요 없이 필요한 라이브러리들을 자동으로 관리한다.
빌드란?
소스 코드 파일을 컴파일에서 실행할 수 있는 가공물로 변환하는 과정 또는 결과물이다. 즉, 우리가 작성한 소스 코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원등(.xml,jpa,jpg,properties)을 jvm이나 톰캣같은 WAS가 인식할 수 있는 패키징하는 과정 및 결과물이라고 할 수 있다.
Maven은 프로젝트의 전체적인 라이프 사이클을 관리하는 빌드툴이다. pom.xml 파일을 통해 정형화된 빌드 시스템으로 프로젝트를 관리해 준다. 필요한 라이브러리들을 특정 문서(pom.xml)에 정의해 놓으면 사용할 라이브러리뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운로드해 준다.
pom.xml
에 정의한다.플러그인
에 위임한다. 이러한 플러그인들은 Maven저장소(Repository)
에 저장되어 진다.
Maven에서 미리 정의하고 있는 빌드 순서를 라이프 사이클(Life Cycle)이라고 한다.
각 빌드 단계를 Phase라고 하는데, 이런 각 phase들은 의존 관계를 가지고 있다. 즉, 각각의 phase는 의존 관계를 가지고 있어 해당 phase가 수행되려면 이전 단계의 phase가 모두 수행되어야 한다.
📌 setting.xml
메이븐은 빌드 할 때 의존 관계에 있는 라이브러리, 플러그인을 중앙 저장소에서 개발자 PC로 다운로드한다. 다운로드한 라이브러리는 개발자 PC의 로컬 저장소에 위치하는데, setting.xml
를 통해 원하는 로컬 저장소의 경로를 지정 및 변경할 수 있다.
📌 pom.xml
root에 존재하는 xml 파일로, 프로젝트마다 1개씩 가지고 있다. 필요한 라이브러리를 pom.xml
에 정의하면, 해당 라이브러리 실행, 설치에 필요한 다른 라이브러리까지 관리하고 네트워크를 통해서 자동으로 다운로드해 준다.
Gradle은 Ant, Maven과 같은 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합하여 만든 오픈소스로 공개되어 있으며 그루비(Groovy)를 기반으로 한 빌드 자동화 도구이다.
💡 Groovy : JVM에서 사용되는 스크립트 언어로, 문법이 Java와 매우 유사하다. Java와 호환이 되며 Java 클래스 파일을 그대로 Groovy 클래스 파일로 사용 가능하다.간결한 정의
가 가능하다.설정 주입 방식(Configuration Injection)
으로 정의하여 Maven의 상속 구조보다 재사용에 용이하다.Build Script
를 xml이 아닌 Groovy
기반의 DSL(Domain Specific Language)
를 사용하여 코드로서 설정 정보를 구성하기 때문에 구조적인 장점이 있다.📌 setting.gradle
프로젝트 구성을 설정할 때 작성하는 파일이다. 보통 프로젝트간의 의존성 및 서브프로젝트, 교차프로젝트 같은 멀티 프로젝트를 구성할 때 사용한다. 단, 싱글 프로젝트의 경우에는 생략이 가능하다.
📌 build.gradle
빌드에 대한 모든 기능을 정의하는 파일이다. 프로젝트에서 사용하는 환경 설정, 빌드 방법, 라이브러리 정보 등을 기술함으로써 빌드 및 프로젝트의 관리환경을 구성한다.