[Spring] 빌드 도구 부터 알고보자

nopecho·2022년 1월 3일
3

스프링 부트를 공부하면서 스프링 이니셜라이저 에서 Project를 MavenGradle 중 이유도 모른채 그냥 그렇게 하라고 하니까 Gradle Project로 선택했다.

이 글은 왜?? 빌드 도구는 뭐고 Maven? Gradle? 무슨 차이지? 라는 궁금증에서 작성하게 됐다.

빌드 도구

빌드 도구의 종류는 위에서 언급한 Maven이나 Gradle을 말한다.
먼저 빌드 도구를 이해하기 위해 빌드(Build)라는 용어부터 정리 해보자.

빌드?

프로그래머가 작성한 소스 코드를 실행할 수 있는 독립적인 형태(.war, .jar)로 변환하는 과정 및 결과를 말한다. 변환하는 과정에는 컴파일 과정도 포함이 된다.

예를 들어 개발자가 이클립스나 인텔리제이와 같은 IDE로 java코드를 작성하면 개발자는 '실행'버튼을 눌러서 코드의 결과물을 볼 수 있다.

그런데 개발자가 아닌 사용자가 코드의 결과물을 보려면? 사용자가 자바를 설치하고 IDE를 설치하고 해당 코드를 가져와서 실행을 눌러야 하는가?

아니다, 사용자는 어떠한 형태로든 빌드 된 결과물(.war, .jar 등)을 실행만 하면 된다. 그리고 이러한 빌드 결과물을 실제 서버에 업로드하는 것을 배포라고 한다.

만약 java프로젝트가 하나 있다치자, 해당 프로젝트에는 개발자가 작성한 ~~. java 파일들이 있을것이고, 여러가지 정적 파일을 관리하는 resource 파일들이 있을것이다.

이 프로젝트를 빌드 한다면 .java 파일들을 .class 파일로 컴파일하고, resource파일들을 .class를 참조 할 수 있는 위치로 옮기는 등 여러 데이터들을 압축하는 과정을 거쳐 하나의 결과물로 나올것이다.

빌드(Build) : 프로젝트의 소스코드 개발에서 최종 사용자에게 전달되기까지의 모든 과정(프로젝트 생명주기)을 아우르는 행위

그리고 이러한 빌드를 자동화해서 도와주는 도구가 빌드 도구(빌드 툴)이다.


그렇다면 빌드 도구를 사용할까?

아니다, 이렇게 생각해보자 만일 빌드 도구를 사용하지 않고 개발자가 직접 프로젝트를 빌드 해야된다면?

우선 개발자는 프로젝트에 필요한 수 많은 라이브러리를 다운받고, 라이브러리에 대한 의존성도 수동으로 잡아주고, 컴파일 하고, 테스트 하고, 실행 파일로 만들고.. 등등 프로젝트 환경을 설정하는데 한 세월을 쏟을것이다.

그런데 빌드 도구는 이러한 과정들을 자동화 시켜준다.
이제 왜 빌드 도구를 사용해야되는지 알것같다..

빌드 도구 : 빌드 자동화를 도와주는 프로그램

그래서 이제 Spring 프로젝트의 빌드 도구인 MavenGradle을 알아보자


Maven

Maven : XML기반의 대표적인 Java 프로젝트용 빌드 도구

역할

  • 라이브러리를 자동으로 추가, 관리 및 라이브러리 버전을 자동 동기화

  • 프로젝트의 정보 전달

  • 프로젝트 라이프 사이클 관리


프로젝트에서 Maven을 사용한다면, 프로젝트 최상위 디렉토리에 pom.xml라는 파일이 생성된다.
pom.xml은 프로젝트의 전반적인 정보를 담고 있는 xml파일이다.

pom.xml파일을 살펴보면<dependenceise>태그가 존재하는데 이 태그의 데이터들로 해당 프로젝트가 의존하는 여러 라이브러리를 설정해준다.

그래서 만약 라이브러리를 추가할 일이 있으면 <dependenceise>태그 내에 추가해주면 된다.

XML(eXtensible Markup Language) : 마크업 언어로 표현 된 데이터 전달 언어

  • <데이터설명> 데이터 </데이터설명>

장점

  • 의존성 자동 업데이트 (라이브러리 자동 다운)

  • 라이브러리 통합 관리

  • 모든 프로젝트에 적용가능한 일괄적인 사용법

  • 간단한 배포 관리

단점

  • 설정 파일이 XML 기반으로 작성 되어 가독성이 떨어짐

  • 라이브러리가 서로 종속될 경우 XML이 복잡해짐

  • 정해진 라이프 사이클이 있어서 임의의 라이프 사이클 설정이 복잡함

Gradle

Gradle : Ant와 Maven을 보완한 groovy기반의 빌드 도구

Gradle은 가장 최근에 나온 Maven과 같은 빌드 자동화를 도와주는 빌드 도구다.

그래들은 프로젝트 설정을 위해 groovy언어를 사용한다. 스크립트 언어를 사용하기 때문에 유연하게 빌드 스크립트를 작성할 수 있다.
Mavenpom.xml파일과 같은 build.gradle파일에 groovy언어로 의존성이나 플러그인 설정과 같은 빌드에 필요한 설정을 작성할 수 있다.

groovy : JVM에서 실행되는 스크립트 언어

  • Java와 문법이 비슷하고 호환이 된다.

장점

  • 빠르다. (Maven보다 최대 100배)

  • Wrapper를 통해 Gradle이 설치 되지 않은 환경에서도 빌드 가능

  • XML기반이 아닌 Groovy기반 언어로 작성하여 높은 가독성

  • 설정에 대한 구조적인 틀을 벗어나 코딩으로 정의가 가능

Gradle.Wrapper : 환경에 상관 없이 Gradle 빌드를 수행할 수 있도록 하는 내장 task

  • Java나 Gradle이 설치 되어 있지 않아고 빌드 가능
  • 사용자가 프로젝트 개발자와 동일한 버전의 Gradle버전 사용 가능

그래들 자체가 기존 빌드 도구들의 장점만 모아 만든 빌드 도구지만 물론 단점도 조금 존재한다.

단점

  • 프로그램 자체가 메모리를 많이 차지

  • 정확한 사용을 위해선 groovy문법 필요


정리

아직까진 Maven의 점유율이 더 높다고 하지만, 요즘 대부분의 프로젝트는 Gradle을 이용 한다고 한다. (대규모 프로젝트 일수록 가독성이 좋은 gradle을 사용하는 것이 더 유리 하기 때문에?)

여러가지 이유가 있겠지만 많이 사용하는 이유는 단점보다 장점이 주는 개발의 편리함이 많아서 인것 같다.

Gradle을 씁시다!

0개의 댓글