FrameWork/Spring

[Spring] 빌드 관리 도구

JiWonSon 2023. 7. 31. 11:34

1. 빌드 관리 도구?

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

예를 들어 .java, .xml, properties 등의 파일을 jvm이나 톰캣같은 was서버가 인식할 수 있도록 변환해주는 것이다.

 

빌드 관리 도구는 소스 코드가 빌드 하는 과정에서 여러가지 외부 라이브러리를 사용하는데, 빌드 관리 도구는 사용자가 관리할 필요 없이 필요한 라이브러리들을 자동으로 관리해주는 것이다.

 

크게 Ant, Maven, Gradle 세 가지가 있다.

 

빌드 관리 도구의 과정은 아래와 같다.

  1. 종속성 다운로드 
  2. 소스코드를 바이너리 코드로 컴파일
  3. 바이너리 코드 패키징
  4. 테스트 실행
  5. 시스템에 배포

 

2. Maven

(1) maven이란?

 - Maven은 Java용 프로젝트 관리 도구로써, Lifecycle 관리 목적 빌드 도구이다.

 프로젝트를 진행할 때, 단순히 내가 작성한 코드로만 개발하는 것이 아니라 여러 라이브러리를 활용해서 개발할 때가 많다. 이 때 사용되는 라이브러리들의 수가 너무 많아지면 관리하는 일이 힘든데, Maven은 이러한 문제를 해결할 수 있다. Maven은 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리까지 다운로드해준다.

- Maven은 필요한 라이브러리를 전부 pom.xml에 정의한다.

- 플러그인을 통한 재사용 : Maven은 빌드에 대한 대부분의 책임을 플러그인에 위임한다. 플러그인들은 Maven저장소에 저장된다.

 

(2) maven 빌드 과정

* clean - validate - compile - test - package - verify - install - site - deploy ( 위에서 말한 과정과 같다)

  1. Clean : 이전 빌드에서 생성된 파일들을 삭제하는 단계
  2. Validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는 지 확인하는 단계
  3. Compile : 프로젝트의 소스코드를 컴파일하는 단계
  4. Test : 유닛(단위) 테스트를 수행하는 단계(테스트 실패시 빌드 실패로 처리, 스킵 가능)
  5. Package : 실제 컴파일된 소스 코드와 리소스들을 jar등의 배포를 위한 패키지로 만드는 단계
  6. Verify : 통합테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인하는 단계
  7. Install : 패키지를 로컬 저장소에 설치하는 단계
  8. Site : 프로젝트 문서를 생성하는 단계
  9. Deploy : 만들어진 Package를 원격 저장소에 release하는 단계

(3) maven설정 파일인 pom.xml (Project Object Model) 의 주요 기능

  1. 프로젝트 정보 
  2. 빌드 설정
  3. 빌드 환경
  4. pom 연관 정보

3. Gradle

(1) Gradle이란?

- Maven을 대체할 수 있는 프로젝트 구성 관리 및 빌드 관리 도구이다.

- 빌드 속도가 Maven에 비해 10~100배 가량 빠르다.

- 스프링부트와 안드로이드에서 사용된다.

- Java, C/C++, Python 등의 언어를 지원한다.

- maven은 xml로 라이브러리를 정의하고 활용하지만, gradle은 별도 스크립트를 작성한다. 이 스크립트는 groovy script를 기반으로 구축되어 있으며, xml과 달리 변수 선언, if, else, for 등의 로직이 구현가능하다.

 

(2) gradle 빌드 과정

  1. 초기화(initialization) : 빌드 대상 프로젝트를 결정하고 각각에 대한 Project객체를 생성한다. settings.gradle 파일에서 프로젝트 구성한다.
  2. 구성(Configuration) : 빌드 대상이 되는 모든 프로젝트의 빌드 스크립트를 실행한다.
  3. 실행(Execution) : 구성 단계에서 생성하고 설정된 프로젝트의 태스크 중에 실행 대상을 결정한다. gradle 명령행에서 지정한 태스크 이름 인자와 현재 디렉토리를 기반으로 태스크를 결정하여 선택된 태스크들을 실행한다.

(3) gradle 설정 파일

- build.gradle : 빌드에 대한 모든 기능을 정의함. 환경 설정, 빌드 방법, 라이브러리 정보 등 프로젝트 관리 환경을 구성

- setting.gradle : 프로젝트 구성을 설정할 때 작성, 프로젝트간의 의존성, 멀티 프로젝트 시 작성한다. 프로젝트가 하나일 경우 생략 가능하다.

 

4. 결론

 의존성이 늘어날 수록 품질의 차이가 다르다.

maven은 멀티 프로젝트 환경에서 특정 설정을 다른 모듈에서 사용하려면 상속을 받아야 하지만, gradle은 설정 주입 방식을 사용한다. 따라서 멀티 프로젝트일 경우 gradle이 더 적합한 방식이다. 

이처럼 프로젝트 상황에 따라 빌드 도구를 잘 선택해야 한다.

'FrameWork > Spring' 카테고리의 다른 글

[Spring] RequestMapping  (0) 2022.01.27
[Spring] 의존성 주입  (0) 2022.01.05
[Spring] 파일업로드, 다운로드 구현  (0) 2020.12.12
[Spring] 쿠키, 세션 사용법  (0) 2020.12.12
[Spring] 초기설정  (0) 2020.12.12