본문 바로가기
spring

[빌드도구] maven & gradle 이란?

by 콧등치기국수 2022. 10. 11.

1. 빌드 (Build)

소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 일련의 과정 또는 그에 대한 결과물.

소스코드(java), 프로젝트에서 쓰인 각각의 파일 및 자원 등(.xml, .jpg, .jar, .properties) 을 JVM이나 톰캣같은 WAS가 인식할 수 있는 구조로 패키징하는 과정 및 결과물.

 

프로그래머가 작성한 소스코드를 실행할 수 있는 독립적인 형태(.war, .jar)로 변환하는 과정 및 결과이며 변환하는 과정에는 컴파일 과정도 포함된다.

 

 

2. 빌드도구 (Build Tool)

빌드 도구는 이러한 빌드 과정을 자동으로 수행해주는 도구이며, 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램이다.

빠른 기간 동안 계속해서 늘어나는 라이브러리 추가, 프로젝트를 진행하며 라이브러리의 버전 동기화의 어려움을 해소하고자 등장했다.

 

 

2-1. maven

- Maven은 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 준다. 
 - 간단한 설정을 통한 배포 관리가 가능하다.

 

만약 maven을 사용하지 않으면 모든 라이브러리를 프로젝트의 lib 폴더 내에 추가하여야 했을 것이다.

 

 

1) maven 사용

spring프로젝트에서 maven을 사용한다면 프로젝트 최상위 디렉토리에 pom.xml 라는 파일이 생성된다.

이 pom.xml은 프로젝트의 전반적인 정보를 담고 있는 xml 파일이다.

pom.xml파일을 살펴보면<dependenceise>태그가 존재하는데 이 태그의 데이터들로 해당 프로젝트가 의존하는 여러 라이브러리를 설정해준다.

그래서 만약 라이브러리를 추가할 일이 있으면 <dependenceise>태그를 통해 의존성을 추가해주면 된다.

마크업 언어로 되어있다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.7.0</version>
    <scope>test</scope>
</dependency>

 

2-2. Gradle

프로젝트 설정을 위해 groovy언어(JVM에서 실행되는 스크립트 언어라고 생각하면 됨)를 사용하는 빌드 배포 도구이다.

별도의 빌드 스크립트를 통하여 사용할 어플리케이션 버전, 라이브러리 등의 항목을 설정할 수 있다.

안드로이드 앱을 만들 때 필요한 공식 빌드시스템이며,  JAVA, C/C++, Python 등을 지원한다.

 

스크립트 언어로 구성되어있기 때문에, xml과 달리 변수선언, if, else, for등의 로직이 구현가능하여 간결하게 구성가능하다.

 

build.gradle파일에 groovy 언어로 의존성이나 플러그인 설정과 같은 빌드에 필요한 설정을 작성할 수 있다.

 

 

 

2-3. Gradle이 maven보다 좋은 점

  • Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다.
    • 설정 내용이 길어지고 가독성 떨어짐 -> xml 기반이 아닌 groovy 기반 언어로 작성하여 가독성이 좋다.
    • 의존관계가 복잡한 프로젝트 설정하기에는 부적절
    • 상속구조를 이용한 멀티 모듈 구현
    • 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야함 (상속의 단점 생김)
  • Gradle은 그루비를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
    • Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버했다.
    • 설정 주입시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.
    • 설정에 대한 구조적인 틀을 벗어나 코딩으로 정의가 가능하다.
  • Gradle의 공식 문서에 따르면 Maven 보다 속도가 최대 100배 빠르다고 한다.

 

4. 사용현황

기존 프로젝트들에는 gradle보다 Maven을 많이 사용했다고 한다. 그래서 Maven 사용법도 공부해두고 gradle도 익히는게 좋을 것 같다.

 

 

 

* 출처 및 참고

1. Maven, 빌드도구 : https://sweeteuna.tistory.com/110

2. Maven, gradle 차이 : https://hyojun123.github.io/2019/04/18/gradleAndMaven/

3. 빌드, 빌드도구, Maven : https://goddaehee.tistory.com/199

4. 빌드, 빌드도구, maven, gradle : https://geonoo.tistory.com/145

'spring' 카테고리의 다른 글

[spring] POJO  (0) 2022.01.09
[spring] DispatcherServlet  (0) 2021.10.23
[spring] Context란?  (0) 2021.10.20
[spring] annotation 이용한 DI  (0) 2021.10.20
[spring] 느슨한 결합력과 인터페이스(DI 이해에 도움)  (0) 2021.10.15