거누의 개발노트

[Spring] 빌드? 빌드도구? - gradle, maven 본문

Spring

[Spring] 빌드? 빌드도구? - gradle, maven

Gogozzi 2022. 6. 3. 22:54
반응형

빌드?

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

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

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

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

JAR?  

.jar 확장자 파일에는 Class와 같은 Java 리소스와 속성 파일,  라이브러리 파일이 포함되어 있다.
JAR 파일은 원하는 구조로 구성이 가능하며 JDK(Java Development Kit)에 포함하고 있는 JRE(Java Runtime Environment)만 가지고도 실행이 가능하다.
윈도우 ZIP 파일과 비슷한 구조를 가지고 있다고 한다.

WAR?

.war 확장자 파일은  servlet / jsp 컨테이너에 배치 할 수 있는 웹 어플리케이션(Web Application) 압축 파일 포맷이다.
war는 웹 응용 프로그램를 위한 포맷이기 때문에 웹 관련 자원만 포함하고 있으며 이를 사용하면 웹 어플리케이션을 쉽게 배포하고 테스트 할 수 있습니다.
원하는 구성을 할 수 있는 JAR 포맷과 달리 WAR은 WEB-INF 및 META-INF 디렉토리로 사전 정의 된 구조를 사용하며 WAR파일을 실행하려면 Tomcat, Weblogic, Websphere 등의 웹 서버 (WEB)또는 웹 어플리케이션 서버(WAS)가 필요하다.

빌드 도구?

빌드도구를 사용하지 않고 배포하려면 라이브러리를 다운 받고, 컴파일하고, 테스트하고, 실행파일로 만들고 여러가지 일을 해야한다.

이러한 이유때문에 여러가지 일들을 자동화 해주는 빌드도구를 사용하는 것이다.

Maven?

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

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

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

  • 의존성 자동 업데이트 (라이브러리 자동 다운)
  • 라이브러리 통합 관리
  • 모든 프로젝트에 적용가능한 일괄적인 사용법
  • 간단한 배포 관리

마크업 언어로 되어있다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.7.0</version>
    <scope>test</scope>
</dependency>

이런식으로 의존성을 추가해 주어야 한다.

Gradle?

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

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

  • Maven 보다 빠르다.
  • Wrapper를 통해 Gradle이 설치 되지 않은 환경에서도 빌드 가능하다.
  • XML기반이 아닌 Groovy기반 언어로 작성하여 가독성이 좋다.
  • 설정에 대한 구조적인 틀을 벗어나 코딩으로 정의가 가능하다.

groovy언어는 JVM에서 실행되는 스크립트 언어라고 생각하면 된다.

testImplementation 'org.springframework.boot:spring-boot-starter-test:2.7.0'
반응형
Comments