Maven Vs Gradle

Weed·2024년 4월 14일
0

Spring boot

목록 보기
1/5

참고: 벨로그

이번 Spring boot를 통해 웹 개발을 처음 공부하는데,

Project 생성하는데 있어서 Gradle, Maven으로 나뉘어서 생성을 해야 한다. 이번 인터넷 강의를 들을때에는 Maven으로 생성했지만 중간에 막히는 부분이 있을 때 서칭을 하다보면 Maven으로 생성된 프로젝트 구성이랑 다르게 코딩을 진행하는 분들을 목격했다. 예를 들어 Mavenpom.xml이 있는데 참고하는 사이트에는 없다던가?

이 둘 차이가 궁금해서 알아보고 정리해보려고 한다.

Spring boot로 프로젝트를 진행하다 보면 외부 라이브러리를 이용하여 여러 가지 기능을 구현해야 한다. 이 때 이 외부 라이브러리를 의존성 라이브러리라고 한다.

❗️의존성 라이브러리


pom.xml에 보면 <dependencies> 하위에 여러가지 라이브러리를 추가한 것을 볼 수 있다. 이렇게 라이브러리를 사용하기 위해서는 임의로 추가해줘야 한다.

이 의존성 라이브러리를 추가할 때 사용하는 도구가 Maven 또는 Gradle이다.

Build Tool(빌드 관리 도구)

Maven 또는 Gradle를 Build Tool이라고 한다. 여기서 Build는 소스코드 파일(예를 들어 Spring boot는 .java 파일), 기타 프로젝트에서 사용되는 파일(.xml, .jpg 등등)을 컴퓨터에서 실행할 수 있게 독립적인 형태로 변환하는 것이다. 이러한 파일들을 jvm, 톰캣같은 WAS가 인식할 수 있도록 패키징하는 것이다.

❓WAS

WAS는 Web 서버처럼 HTTP 프로토콜을 기반으로 동작하고 웹 서버 기능을 포함하여 동적 리소스도 제공할 수 있는 에플리케이션 서버이다. 반면에 Web정적 리소스를 제공하는 서버.
WAS의 대표적인 것으로는 Tomcat이 있다. WASJSP, Servlet 구동환경을 제공하여 웹 컨테이너 또는 서블릿 컨테이너라고 불린다.

  • 동적 리소스: 데이터베이스 조회, 로직 처리 등...
  • 정적 리소스: HTML문서, CSS, 이미지 파일 등...

✔️ Clinet -> Web Server -> WAS -> DB 동작 과정


다시 돌아와서, Build Tool은 저 Build 과정을 어떻게 진행하나?
Build Tool은 아래 과정을 통해 소스코드에서 에플리케이션에 필요한 외부 라이브러리를 자동으로 관리해준다.

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

그럼 MavenGradle은 어떤 차이가 있을까>

1️⃣ Maven

Maven이란??

아파치에서 제작된 Build Tool로써, LifeCycle 관리 목적 Build Tool이다.

LifeCycle??

Maven은 정해진 LifeCycle로 작업을 수행하며, 전반적인 프로젝트 관리 기능을 포함한다.

LifeCycle엔 다음과 같은 과정이 있다.

  1. Clean: 빌드 시 생성되었던 파일 삭제
  2. Validate: 프로젝트의 타당성 검토. 필요한 모든 정보를 사용할 수 있는지 확인
  3. Compile: 프로젝트 소스코드 컴파일
  4. test: 단위 테스트 진행. 테스트 실패 시 빌드 실패 처리. 스킵 가능
  5. Package: 컴파일된 소스 코드와 리소스들을 jar, war 등 파일의 배포를 위한 패키지로 만든다.
  6. Verify: 통합 테스트 결과에 대한 검사 진행. 품질 기준 충족 확인
  7. Site: 프로젝트 문서와 사이트 작성, 생성
  8. Deploy: 생성된 package를 원격 저장소에 release

Maven은 많은 과정을 통해 빌드를 진행한다. 직관적으로 Maven은 빌드 속도가 느리다는 것을 알 수 있다❗️

외부 라이브러리 관리??

Mavenpom.xml에 필요한 라이브러리를 정의함으로써 의존성을 주입한다.

pom.xml에는

  • 프로젝트 정보(프로젝트 이름, 라이센스)
  • 빌드 설정(소스, 리소스, 라이프 사이클 별 실행한 plugin 등 빌드 관련 설정)
  • 빌드 환경(사용자 환경 별로 달라질 수 있는 프로필 정보)
  • pom 연관 정보(의존 프로젝트, 모듈, 상위 프로젝트 등)

을 정의한다.

2️⃣ Gradle

Gradle란??

Maven을 대체할 수 있는 프로젝트 구성 관리 및 범용 Build Tool. Ant Builder와 Groovy script를 기반으로 구축되어 Ant 역할과 배포 스크립의 기능을 모두 사용 가능. Spring boot와 안드로이드에서 사용된다.

❗️잠깐

Gradle는 Spring boot와 안드로이드에서 사용가능하다 했다. 그러면 맨 위 사진을 다시 봐보자.

Gradle를 보면 GroovyKotlin로 나뉘어진 것을 알 수 있다. 여기서 Spring boot로 사용하려면 Groovy로 사용!
안드로이드에서 사용하려면 Kotlin으로 사용!
근데 Kotlin은 알겠지만 Groovy는 뭔지 모른다.

❓Groovy

Groovy는 JVM에서 실행되는 Script 언어이다. JVM에서 동작하지만 소스코드를 컴파일할 필요 없다. Java와 호환되며, Java class 파일들을 Groovy class로 사용 가능하다. Java 문법과 유사하여 빌드 처리를 관리할 수 있다.

Gradle 특징

  1. 가독성이 좋다: 코딩에 의한 간결한 정의가 가능하여 가독성 좋음
  2. 재사용성: 설정 주입 방식(Configruation Injection)을 사용하여 재서용성이 있다.
  3. 구조적 장점: Build Script를 Groovy 기반의 DSL(Domail Specific Language를 사용하여 코드로써 설정 정보를 구성하므로 구조적인 정점이 있다.
  4. 편리함: Gradle설치 없이 Gradle wrapper을 이용하여 빌드 지원
  5. 멀티 프로젝트: Gradle은 멀티 프로젝트 빌드를 지원하기 위해 설계된 Build Tool이다.
  6. 지원: Maven을 완전 지원

Maven vs Gradle

위 두 Build Tool중에 누가 좋을까?

Gradle이 Maven보다 좋다라는게 정설

1. Build라는 동적인 요소를 XML로 정의하기엔 어렵다.

  • 설정 내용이 길어지고 가독성 떨어짐
  • 의존관계가 복잡한 프로젝트 설정하기엔 부적합
  • 상속구조를 이용한 멀티 모듈 구현
  • 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야함(상속 단점)

2. Gradle은 Groovy를 사용하기 때문에, 동적인 Build는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 작성

  • Configuration Injection 방식을 사용해서, 공통 모듈을 상속해서 사용하는 단점 커버
  • 설정 주입시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게할 수 있다.

3. 결정적으로 Gradle가 메이븐보다 빠르다.

profile
개발자로 전직해보자

0개의 댓글