빌드, 빌드도구, (gradle, maven, jar, war)

나의글·2024년 2월 27일

Spring

목록 보기
2/4

Maven, Gradle

우리가 많이 쓰는 Maven과 Gradle은 빌드 관리 도구이다. 그렇다면 빌드는 뭐고, 빌드 관리 도구란 무엇일까?

빌드

빌드와 컴파일은 개념을 혼동하기가 쉬운데, 빌드는 컴파일뿐만이 아니라 소스코드 파일부터 시작해서 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환되는 과정 전체를 말한다.
자바를 예로 든다면, 개발자가 작성한 .java이 컴파일돼서 .class파일로 변환되고 resource를 .class에서 참조할 수 있는 위치로 옮긴다. 또한 META-INF와 MANIFEST.MF 들을 하나로 압축하는 과정이다. 즉, 우리가 작성한 소스코드와 자원을 JVM이나 톰캣같은 WAS가 인식할 수 있도록 패키징하는 과정을 말한다.

빌드 관리 도구

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

빌드관리 도구는

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

Maven, Gradle이 이러한 빌드 관리도구이다.

Maven

메이븐은 대표적인 Lifecycle관리 목적 빌드 도구이다.

아래와 같은 라이프 사이클을 가진다.
(1) clean : 빌드 시 생성되어있었던 파일들을 삭제한다.
(2) validate : 프로젝트가 올바른지 확인하고 필요한 모든 정보를 사용할 수 있는지 확인하는 단계
(3) compile : 프로젝트 소스코드를 컴파일 하는 단계
(4) test : 단위 테스트를 수행하는 단계. 테스트 실패 시 빌드 실패로 처리하며, 스킵이 가능하다.
(5) package : 실제 컴파일된 소스 코드와 리소스들을 jar, war 등의 파일의 배포를 위한 패키지로 만든다.
(6) verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인한다.
(7) site : 프로젝트 문서와 사이트 작성, 생성하는 단계
(8) deploy : 만들어진 package를 원격 저장소에 release하는 단계

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

Gradle

gradle은 Ant Builde와 groovy script를 기반으로 구축된, maven을 대항(?)하는 빌드 툴이다.
캐시를 사용하고, 빌드 속도가 Maven에 비해 10~100배 가량 빠르며, Java, C/C++, Python 등을 지원한다.

Groovy

Groovy는 JVM에서 실행되는 스크립트 언어이다. 또한 컴파일 과정이 필요없다. Java문법과 유사하여 if else절등을 사용할 수 있다.

무엇을 사용하는 것이 좋을까?

예전에야 Maven을 많이 썼지만, 지금은 속도와 가독성면에서 Gradle이 압도적이기에 Gradle로 많이 넘어온 추세라고 한다. 시간과 비용이 들지만 배워두는게 좋다고 생각하다.

JAR, WAR

기본적으로 JAR, WAR 모두 Java의 jar 옵션 (java -jar)을 이용해 생성된 압축(아카이브) 파일로, 애플리케이션을 쉽게 배포하고 동작시킬 수 있도록 관련 파일(리소스, 속성 파일 등)을 패키징 한 것이다.

JAR (Java Archive)

JAVA 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일
-Class (JAVA리소스, 속성 파일), 라이브러리 파일을 포함함
-JRE(JAVA Runtime Environment)만 있어도 실행 가능함 (java -jar 프로젝트네임.jar)

WAR (Web Application Archive)

-Servlet / Jsp 컨테이너에 배치할 수 있는 웹 애플리케이션(Web Application) 압축파일 포맷
-웹 관련 자원을 포함함 (JSP, Servlet, JAR, Class, XML, HTML, Javascript)
-사전 정의된 구조를 사용함 (WEB-INF, META-INF)
-별도의 웹서버(WEB) or 웹 컨테이너(WAS) 필요
즉, JAR파일의 일종으로 웹 애플리케이션 전체를 패키징 하기 위한 JAR 파일이다.

스프링부트는 내장WAS가 있어, WAR를 사용할 필욘 없다. 외장 WAS를 이용할 계획이 있다면 WAR를 사용하는 것이 좋겠지만, 그렇계획이 없다면 JAR를 사용하는 게 좋다.

profile
기록 velog

0개의 댓글