[Spring] 빌드 관리 도구 Maven VS Gradle

장크리수탉·2022년 7월 8일
0

Spring

목록 보기
1/1

Spring에서 프로젝트를 생성할 때에는 아래와 같이 빌드 도구를 Maven(메이븐), Gradle(그레이들)중 하나를 선택해야 한다. 그렇다면 빌드를 관리한다는 것은 무엇일까?

📌 빌드도구란?

: 소스코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 과정으로, 컴파일, 테스팅, 배포 등 모든 과정의 집합을 빌드라고 하는데, 이 과정을 자동으로 수행해주는 도구를 의미한다.

  애플리케이션을 개발할 때, 개발에 필요한 많은 외부 라이브러리들을 다운로드 하면서 개발해야하는 경우가 많다. 이 때 빌드도구를 이용하면 각 라이브러리 들을 번거롭게 모두 다운받을 필요없이, 빌드도구 설정파일에 필요한 라이브러리 종류와 버전들, 종속성 정보를 명시하여 자동으로 다운로드 해주고 관리해준다.

  최근 DevOps 방식이 주목받고 있다. 데브옵스의 본질은 개발자가 작성한 코드를 신속하게 배포하여 운영자에게 피드백을 받고 그것을 신속하게 반영하는 것이다. 이를 위해서는 빌드가 자동화 되어 있어야 가능하다.

- DevOps 란? 
:Development + Operations가 결합한 단어로, 포괄적인 아이디어 방식을 나타낸다. 
하나의 아이디어가 사용자에게 가치를 제공할 수 있도록, 
운영 환경에서 개발로부터 배포로 진행되는 프로세스의 속도를 높히는 접근방식을 의미한다.

📌 Maven

  • 라이브러리를 자동으로 추가 및 관리해주고, 라이브러리 버전을 자동으로 동기화 해준다. == 프로젝트 관리 도구
  • Java 기반 프로젝트를 빌드하고 관리하는데 사용할 수 있는 도구.
  • pom.xml 이란 이름을 쓴다.
  • 프로젝트의 전체적인 라이프사이클을 관리하는 도구이다.
  • JDK와 함께 설치할 수 있다. 설치는 메이븐 홈페이지에서 할 수 있다.

lifecycle

기본 Maven 수명주기는 다음과 같다.

1. Validate(검증)
: 프로젝트가 올바른지 검증하는 단계. 예를들어, 모든 dependencies가 다운로드 되었고, 로컬 repository에서 사용할 수 있는지 확인한다..

2. Compile(컴파일)
: 소스 코드를 컴파일 하고 .java 파일을 .class로 변환하고 클래스를 target/classes 폴더에 저장한다.

- 컴파일이란?
: 어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정이다.

3. Test(테스트)
: 프로젝트에 대한 단위 테스트를 실행한다.

4. Package(패키지)
: 컴파일된 코드를 JAR 또는 WAR과 같이 배포 가능한 형식으로 패키지 한다.

5. Integration Test(통합 테스트)
: 프로젝트에 대한 통합 테스트를 실행한다.

6. Verify(확인)
: 프로젝트가 유효하고 표준 품질을 충족하기 위한 검사를 실행한다.

7. Install(설치)
: 패키지된 코드를 로컬 Maven 저장소에 설치한다.

8. Deploy(배포)
: 패키지된 코드를 다른 개발자와 공유하기 위해 원격 저장소에 복사한다.

명령어

  • mvn clean : 프로젝트를 정리하고 이전 빌드에서 생성된 모든 파일을 제거한다.
  • mvn compile : 프로젝트의 소스 코드를 컴파일한다.
  • mvn test-compile : 테스트 소스 코드를 컴파일한다.
  • mvn test : 프로젝트에 대한 테스트를 실행한다.
  • mvn pakage : 프로젝트에 대한 JAR 또는 WAR 파일을 생성하여 배포 가능한 형식으로 변환한다.
  • mvn install : 패키지된 JAR/WAR 파일을 로컬 저장소에 배포한다.
  • mvn deploy : 컴파일, 테스트 실행 및 프로젝트 빌드 후 패키징된 JAR/WAR 파일을 원격 저장소에 복사한다.

📌 Gradle

  • Gradle 공식문서, hyojun Blog를 참고했다.

  • maven 이후에 나왔다. gradle로 넘어가는 추세이다.

  • 안드로이드 앱을 만들때 필요한 공식 빌드 시스템이다. 스프링부트에서 많이 쓴다.

  • Java, C/C++, Python 등을 지원한다.

  • 스크립트 언어로 구성되어 있기 때문에 xml(maven형식)과 달리 변수선언, if, else, for 등의 로직이 구현 가능하다.

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

  • 라이브러리 관리
    : 메이븐 repository를 동일하게 사용할 수 있어서 설정된 서버를 통하여 라이브러리를 다운로드 받아 모두 동일한 의존성을 가진 환경을 수정할 수 있다. 자신이 추가한 라이브러리도 repository server에 올릴 수 있다.

  • 프로젝트 관리
    : 모든 프로젝트가 일관된 디렉토리 구조를 가지고 빌드 프로세스를 유지하도록 도와준다.

  • 단위 테스트 시 의존성 관리
    : junit 등을 사용하기 위해서 명시한다.


Gradle이 Maven보다 좋은점

  • Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다.
- 설정 내용이 길어지고 가독성 떨어짐
- 의존관계가 복잡한 프로젝트 설정하기에는 부적절
- 상속구조를 이용한 멀티 모듈 구현
- 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 
  상속하게 해야함 (상속의 단점 생김)  
  • Gradle은 그루비를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
- Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 
  사용하는 단점을 커버했다.
- 설정 주입시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는
  설정을 다르게 할 수 있다.
Gradle은 메이븐보다 최대 100배 빠르다.
profile
4차 산업시대 핵심인재로 매일 반보씩 걷는 장크리수탉의 Dictionary

0개의 댓글