본문 바로가기
Spring

Maven & Gradle 노트

by SuldenLion 2022. 10. 26.
반응형

자바의 대표적인 빌드 관리 Tool (Ant, Maven, Gradle)

빌드 관리 도구란?

- 프로젝트에서 필요한 xml, properties, jar 파일들을 자동으로 인식하여 빌드해주는 도구. / source code를 컴파일, 테스트, 정적 분석등을 하여 실행가능한 앱으로 빌드해줌. / 프로젝트 정보 관리, 테스트 빌드, 배포 등의 작업을 진행 해줌. / 외부 라이브러리를 참조하여 자동으로 다운로드 및 업데이트 관리.

 

▷ Maven 

자바의 대표적 관리 도구였던 Ant를 대체하기 위해 개발됨. / 프로젝트의 외부 라이브러리를 쉽게 참조할 수 있게 pom.xml 파일로 명시하여 관리. / 참조한 외부 라이브러리에 연관된 다른 라이브러리도 자동으로 관리됨. 

 

Maven을 사용하는 이유 :

- 기존에 사용하던 Ant는 빌드의 기능만 가지고 있음. / 자동으로 라이브러리를 관리해주는 기능이 추가된 Maven 편리함. / 다운받아 사용하던 라이브러리에 변동 사항이 있으면 자동으로 업데이트하여 적용됨.

 

Ant -> XML 기반의 빌드 스크립트, 자유로운 빌드 단위 지정, 간단하고 사용하기 쉬움, 대규모 프로젝트에서 복잡해지는 경향이 있음, 라이프 사이클이 없음.

Maven -> XML기반의 빌드 스크립트, 라이프 사이클 도입, pom.xml로 편하게 Dependency 관리

 

pom.xml 파일을 활용하여 빌드 및 관리 (pom.xml의 역할 => 프로젝트 정보 관리, 해당 프로젝트에서 사용하는 외부 라이브러리 관리, 해당 프로젝트의 빌드 관련 설정)

 

Maven의 대표 태그 

- modelVersion : maven의 버전

- groupId : 프로젝트 그룹의 Id, 일반적으로 대표하는 사이트 도메인을 역순으로 적어 사용. (ex. suldenlion.tistory -> tistory.suldenlion)

- artifactId : groupId 외에 다른 프로젝트와 구분될 수 있는 프로젝트의 Id

- version : 프로젝트의 버전을 의미, 개발 단계에 따라 구분

- name : 프로젝트의 이름

- description : 해당 프로젝트의 간략한 설명

- properties : pom.xml 파일 내에서 빈번하게 사용되는 중복 상수를 정의하는 영역, 해당 영역의 상수를 사용하기 위해서는 ${태그명}의 형태로 사용하면 됨.

- dependencies : 해당 프로젝트에서 의존성을 가지고 사용하는 라이브러리를 정의하는 영역, 각 라이브러리마다 <dependency> 태그를 사용하여 구분.

- build : 프로젝트 빌드와 관련된 정보를 설정하는 영역

 

 Gradle

Groovy 스크립트를 활용한 빌드 관리 도구. / 안드로이드 프로젝트의 표준 빌드 시스템으로 채택. / Multi-Project 빌드에 최적화하여 설계됨. / Maven에 비해 더 빠른 처리속도를 가짐. / Maven에 비해 더 간결한 구성이 가능함.

 

Gradle 과 Maven 비교

- Gradle에 비해 Maven이 점유율이 더 높은 상황 (하지만 점차 Gradle 점유율 오르는 중)

- Gradle에 비해 Maven의 성능이 떨어짐

- Gradle이 Maven보다 대규모 프로젝트에서의 성능이 좋음

- Maven => pom.xml / Gradle => build.gradle

- Gradle은 설치없이 사용할 수 있음. (Gradle Wrapper)

 

Gradle 대표 용어 

- repositories : 라이브러리가 저장된 위치 등을 설정

- mavenCentral : 기본 Maven Repository

- dependencies : 라이브러리 사용을 위한 의존성 설정

 

반응형

'Spring' 카테고리의 다른 글

Get API 만드는 방법 노트  (0) 2022.10.30
MVC Pattern 노트  (0) 2022.10.29
Maven - pom.xml 파일 노트  (0) 2022.10.28
REST API 노트  (0) 2022.10.27
Spring & Spring Boot 노트  (0) 2022.10.25

댓글