본문 바로가기

웹개발

Maven과 Gradle

 

첫 번째 주제는 Maven과 Gradle.

첫 프로젝트를 시작하기 앞서 IDE를 다운받고 Build 툴 관련하여 기존 Maven으로 짜여져 있던 걸 Gradle 로 변경한다는 이야기를 들었다.

 

공부할 때 혹은 STS를 다운로드 받을 때 툴 이름에 대해 듣기만 했지 정확한 차이점에 대해 설명할 수 없었다.

해당 툴에 대한 이야기를 해보려고 한다.

 

 

 

 1. Maven 이란?

아파치에서 개발한 자바 기반 프로젝트의 관리를 위한 빌드 도구이다.

(빌드 도구란 프로젝트 생성, 테스트 빌드, 배포 등의 작업을 위한 전용 프로그램)

 

컴파일과 빌드를 동시에 수행하고 테스트를 병행하거나 서버 측의 Deploy 자원을 관리할 수 있는 환경을 제공한다.

더보기

"서버 측의 Deploy 자원"은 Maven에서 웹 애플리케이션 또는 다른 종류의 애플리케이션을 서버에 배포할 때 필요한 자원을 의미한다.

이는 주로 웹 애플리케이션 서버(예: Apache Tomcat, JBoss 등)에 배포할 파일들이며 WAR 파일, JAR 파일, 설정 파일, 리소스 파일 등을 포함할 수 있다. Maven은 이러한 자원을 관리하고 빌드한 애플리케이션을 서버에 배포할 때 필요한 작업들을 처리한다.

또한, 라이브러리 관리 기능도 있어 settings.xml 또는 pom.xml 파일에 필요한 라이브러리만 적으면 알아서 다운, 설치, 경로까지 지정해준다.

 

2. 장, 단점

장점

- 컴파일과 빌드를 동시에 수행

- 서버의 Deploy 자원을 관리하는 환경을 제공

- pom.xml 파일을 통해 관리하므로 개발, 유지보수 측면에서 관리가 용이

- IDE에 종속된 부분들을 제거할 수 있다.

- Maven Profile 기능을 통해 배포 설정 파일을 관리하고 배포 파일을 생성할 수 있다.

 

단점

- Maven에서 기본적으로 지원하지 않는 빌드 과정 추가가 어렵다.

- 설정이 길거나 중복되어 가독성 저하가 발생하여 유지보수성이 낮다.

 


1. Gradle 이란?

그루비(Groovy)를 기반으로 한 빌드 도구이다.

그루비는 자바 문법과 유사하여 자바 개발자가 쉽게 익힐 수 있으며 Gradle Wrapper를 이용하면 Gradle이 설치되지 않은 시스템에서도 프로젝트를 빌드할 수 있다.

메이븐(Maven)의 pom.xml을 Gradle 용으로 변환할 수 있다.

 

build.gradle

빌드 스크립트, 의존성이나 플러그인 설정 등과 같은 빌드에 필요한 설정을 함

 

2. 장, 단점

장점

- 직관적인 코드와 자동완성 으로 가독성이 높다.

- 다양한 Repository 사용 가능

- 각 작업에 필요한 라이브러리들만을 가져오는 작업

build.gradle에 여러 라이브러리에 대한 implementation가 있음

implementation은 라이브러리를 가져오는 것을 뜻함.

dependencies {
    api 'org.apache.httpcomponents:httpclient:4.5.7'
    implementation 'org.apache.commons:commons-lang3:3.5'
}

 

3. Gradle이 빌드 속도가 빠른 이유

 

- 점진적 빌드(Incremental Build)

이미 빌드된 파일들을 모두 다시 빌드하는 것이 아닌 바뀐 파일들만 빌드하는 것을 뜻한다.

 

- Build Cache

만약 두 개 이상의 빌드가 돌아가고 하나의 빌드에서 사용되는 파일들이 다른 빌드들에 사용된다면 Gradle은 빌드 캐시를 이용해 이전 빌드의 결과물을 다른 빌드에서 사용할 수 있다.

이로 인해 다시 빌드를 하지 않아도 되므로 빌드 시간이 줄어든다.

 

- Daemon Process

Gradle은 데몬 프로세스를 지원한다.

데몬 프로세스란 서비스의 요청에 응답하기 위해 오랫동안 살아있는 프로세스인데 Gradle의 데몬 프로세스는 메모리 상에 빌드 결과물을 보관한다. 이로 인해 한 번 빌드된 프로젝트는 다음 빌드에서 매우 적은 시간만 소요된다.

 

 


 

 

Maven Gradle은 모두 빌드 관리 도구임을 알게 되었다.
그렇다면 빌드란 무엇일까?

1. 빌드(Build)

빌드는 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 결과를 말한다.

즉, 우리가 작성한 소스코드 (스프링부트의 경우 .java 파일), 프로젝트에서 쓰인 각각의 파일 및 자원(.xml, .jpa, .jpg, properties)을 jvm이나 톰캣 같은 WAS가 인식할 수 있도록 패키징하는 과정 및 결과물을 일컫는다.

 

예를 들면, Java 프로젝트를 진행하면 개발자가 작성한 A.java와 여러 가지 정적 파일 등에 해당하는 resource가 존재한다.

빌드를 한다면 소스코드를 컴파일 해서 .class로 변환하고 resource를 .class가 참조할 수 있는 적절한 위치로 옮기고 META-INF와 MANIFEST.MF들을 하나로 압축하는 과정을 의마한다.

 

2. 빌드 관리 도구

빌드 도구란, 소스코드에서 애플리케이션을 생성하면서 여러가지 외부 라이브러리를 사용하는데, 빌드 관리도구는 사용자가 관리할 필요 없이 필요한 라이브러리들을 자동으로 관리한다.

빌드 관리도구는 다음과 같은 작업을 수행한다.

  1. 종속성 다운로드 - 전처리(Preprocessing)
  2. 소스코드를 바이너리 코드로 컴파일(Compile)
  3. 바이너리 코드를 패키징(Packaging)
  4. 테스트 실행(Testing)
  5. 프로덕션 시스템에 배포(distribution)

 

빌드 툴로는 우리가 위에서 공부했던  Ant, Maven, Gradle 등이 있다.

 

 


Maven vs Gradle

 

1. 스크립트 길이와 가독성 면에서 Gradle이 우세하다.

2. 빌드와 테스트 실행 결과 Gradle이 더 빠르다.

Gradle은 캐시를 사용하므로 테스트 반복 시 실행 결과 시간의 차이가 더 커진다.

3. 의존성이 늘어날수록 특정 설정을 다른 모듈에서 사용하려면 상속 받아야하지만, Gradle은 설정 주입 방식을 사용하므로 멀티 프로젝트에 적합하다.

'웹개발' 카테고리의 다른 글

XSS (Cross Site Scripting)  (1) 2024.03.13