Spring

maven과 gradle

block_626 2022. 4. 24. 14:48

Maven이란?

  • 아파치 메이븐은 자바용 프로젝트 관리 도구이다.
  • 아파치 Ant의 대안으로 만들어졌다.
  • 아파치 아리센스로 배포되는 오픈 소스 소프트웨어이다.

 

프로젝트를 진행하면서 사용하는 수많은 라이브러리들을 관리해주는 도구.

여기서 메이븐의 특징은 그 라이브러리들과 연관된 라이브러리들까지 거미줄처럼 모두 연동이 되서 관리가 된다는 것이다.

즉, 메이븐은 네트워크를 통해 연관된 라이브러리까지 같이 업데이트를 해주기 때문에 사용이 편리하다.

 

POM(Project Object Model)

  • Maven의 기능을 이용하기 위해 POM이 사용된다.

POM은 약자 이름 그대로 Project Object Model의 정보를 담고 있는 파일이다.

 

pom.xml에서 중요하게 다루는 기능

  • 프로젝트 정보 : 프로젝트의 이름, 라이센스 등
  • 빌드 설정 : 소스, 리소스, 라이프사이클별 실행한 플러그인 등 빌드와 관련된 설정
  • 빌드 환경 : 사용자 환경 별로 달라질 수 있는 프로파일 정보
  • pom 연관 정보 : 의존 프로젝트(모듈), 상위 프로젝트, 포함하고 있는 하위 모듈 등

 

Maven의 특징

  1. 빌드 절차를 간소화하는 빌드 도구이다.
  • 빌드란?
  • 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정, 결과물 

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

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

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

초기의 java 빌드 도구로 Ant를 많이 사용하였으나 최근 많은 빌드 도구들이 생겨나 Maven이 많이 쓰였고, 현재는 Gradle이 많이 쓰인다.

Ant는 스크립트 작성도 많고, 라이브러리 의존 관리가 되지 않아 불편하다.



  1. 동일한 빌드 시스템 제공

 

  1. 프로젝트 정보 제공

 

Maven의 장,단점

장점

  1. 모든 프로젝트의 디렉토리를 일관성이 있게 만들어준다.
  2. 아키타입을 통한 타 프로젝트 빌드에 적합한 환경을 배포가능
  3. 라이브러리의 관리를 메이븐 하나로 의존가능케 한다.
  4. 라이프사이클을 통한 테스트와 배포등 여러 기능을 제공

 

단점

  1. 레포지터리의 관리가 불편하다.
  2. 모든 과정을 pom.xml파일 하나로 해결하기에 파일의 가독성이 떨어지고 길어진다.
  3. 디테일한 빌드기능의 부재
  4. 프로젝트 관련 빌드기능을 제한함

 

Maven의 라이프사이클(lifecycle)

위부터 순서대로 라이프사이클이 실행된다.

 

mvn process-resources: resource 디렉토리에 있는 내용을 해당된 파일로 복사

 

mvn compile:src/java: 밑의 모든 자바 소스를 컴파일해서 해당된 파일로 복사

 

mvn process-testResources,

mvn test-compile: 앞의 과정이 src/java라면 test/java의 내용을 해당된 파일(테스트)로 복사

 

mvn test: surefire: test의 실행으로 target/test-classes에 있는 테스트케이스의 단위테스트를 진행

 

mvn package: 해당된 프로젝트 밑에 jar, ear등 패키지파일을 생성하고 build의 finalName의 값을 사용

 

mvn install: 로컬 저장소 배포

 

mvn deploy: 원격 저장소 배포

 

mvn clean: 빌드 과정에서 생성된 디렉토리 내용 삭제

 

mvn site: site에 문서 사이트 생성

 

mvn site-deploy: 문서 사이트를 서버로 배포

 

Ant와의 차이점

  • Ant는 비교적 자유도가 높은 편 (Ant : 전처리 / 컴파일 / 패키징 / 테스팅 / 배포 가능)
  • Maven은 정해진 라이프사이클에 의하여 작업 수행하며, 전반적인 프로젝트 관리 기능까지 포함.  (Build Tool + Project Management)

Gradle과의 차이점

  • XML 대신 groovy 스크립트를 사용하여 동적인 빌드 가능.
  • maven은 멀티프로젝트에서 상속 구조인데, gradle은 주입 방식이다. 멀티프로젝트에서 gradle이 더 적합하다.



Gradle이란?

  • 빌드, 프로젝트 구성/관리, 테스트, 배포 도구
  • 안드로이드 앱의 공식 빌드 시스템
  • 빌드 속도가 Maven에 비해 10~100배 가량 빠름
  • JAVA, C/C++M Python 등을 지원
  • 빌드 툴인 Ant Builder와 Groovy 스크립트 기반으로 만들어져 기존 Ant의 역할과 배포 스크립트의 기능을 모두 사용 가능

 

Gradle의 특징

  • Gradle은 앞서 살펴본 Ant와 Maven이 가진 장점을 모아 만들었다. 

의존성 관리를 위한 다양한 방법을 제공하고 빌드 스크립트를 XML 언어가 아닌 JVM에서 동작하는 스크립트 언어 ‘그루비’ 기반의 DSL(Domain Specific Language)를 사용한다.

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

 

Gradle의 장점

  • Ant, Maven과 같은 기존의 빌드들은 xml형식을 이용하여 정적인 설정정보를 구성했다.

Gradle은 Groovy라는 언어를 이용하여 코드로써 설정정보를 구성하기 때문에 구조적인 장점이 있다.

  • xml의 구조적인 틀을 벗어나 코딩에 의한 간결한 정의가 가능하다.
  • 프로젝트를 설정주입방식으로 정의하기 때문에 maven의 상속 구조보다 재사용에 용이하다.

 

Groovy?

  • Groovy는 Java 가상 머신에서 실행되는 스크립트 언어

Java 가상 머신에서 동작하지만, Java와는 달리 소스 코드를 컴파일 할 필요는 없다.

Groovy는 스크립트 언어이고, 소스 코드를 그대로 실행한다.

또한 Java와 호환되고, Java 클래스 파일을 그대로 Groovy 클래스로 사용할 수 있다.

Java 문법과 유사하여 빌드 처리를 관리할 수 있는 면에서 Gradle은 Java 개발자가 사용하기에 최고의 빌드관리도구이지 않을까 싶다.



Ant?

  • Ant는 Tomcat처럼 Jakarta프로젝트의 일환으로 만들어진 산출물로 C에서 말하는 make파일과 같은 Java 프로그램용 build이다.

기존의 make, gnumake와 같은 build tool도 존재하지만 Ant는 OS와 상관없이 사용하게 되어있다.

또한 Ant는 Configuration파일이 xml로 되어있어 애플리케이션 구조에 맞게 적용하기에 편리하게 되어있다.

 

Ant의 주요 기능

  • 자바 소스 파일 컴파일
  • jar, war, ear, zip 파일의 생성
  • avadoc을 실행하여 도움말 생성
  • 파일이나 폴더의 이동 및 복사, 삭제
  • 각각의 작업에 대한 의존성 설정
  • 유닉스에서처럼 파일이나 폴더에 퍼미션 설정
  • 파일의 변경 날짜를 설정하는 touch기능
  • 외부 프로그램의 실행
  • 플랫폼에 무관한 xml을 이용(build.xml : Configuration파일)
  • 이클립스에 기본 탑재되어 있는 플러그인( +@ 기능을 가진 것이 Maven)

 

Ant의 장점

  • 쉘 기반의 커맨드 형태를 확장할 수 있는 모델
  • 자바 클래스로 기능을 확장 가능
  • 빌드 파일을 xml형태로 작성 → 계층적으로 보기 쉬움
  • 독립적인 Task형태를 객체로 작성하여 확장 가능
  • 난해한 표기법 없음

 

Ant의 단점

  • 디폴트 규칙을 지정할 수 없음
  • 인수에서 파일명을 건네서 개별에 컴파일 하는 것이 귀찮다.
  • make파일 안에서 사용하는 변수의 연산자가 없다.
  • xml의 기본적인 지식이 필요하다.
  • 준비되어 있는 작업에서 처리할 수 없는 경우 그것에 대한 대응이 귀찮다.

 

'Spring' 카테고리의 다른 글

Form과 input  (0) 2022.04.25
마크업(MarkUp)언어  (0) 2022.04.24
DTO, DAO, VO  (0) 2022.04.24
Get과 Post  (0) 2022.04.24
파일 업로드 이해하기  (0) 2022.04.24