Backend/Spring Boot

Maven

간지나제 2021. 3. 29. 00:48

아래 참조 블로그를 보고 명확하게 이해하기 위해 클론한 것입니다.
Maven을 알아보기 전에 사전 지식을 알아보자.

1. 빌드(Build)

Build는 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정 또는 그에 대한 결과물이다. - wiki

한 마디로 개발자가 작성한 소스코드 및 각 자원들(xml, jpg, properties)을 JVM이나 WAS가 인식할 수 있는 구조로 패키징하는 과정 및 결과물이다.(jar, war 등)

2. 빌드 도구(Build Tool)

  • 프로젝트 생성, 테스트, 빌드, 배포 등의 작업을 위한 프로그램
  • 라이브러리 추가, 버전 동기화 등의 어려움을 해소하기 위해 등장
  • Ant -> Maven -> Gradle의 추세

Maven

1. 정의 및 특징

  1. 자바용 프로젝트 관리 도구로 Apache Ant의 대안으로 만들어졌다.
  2. 프로젝트의 라이프 사이클을 관리하는 도구이며 편리하고 이점이 많다.
  3. 특정 문서(pom.xml)에 필요한 라이브러리를 명시해 놓으면 해당 라이브러리를 네트워크를 통해 중앙 저장소에서 자동으로 다운 받아 사용가능하다.(해당 라이브러리의 의존 관계에 있는 라이브러리까지 모두 다운)
  4. 중앙 저장소(아파치 재단에서 관리)를 통해 라이브러리를 공유하는게 가능하고 private한 중앙 저장소를 구축할 수도 있다.
  5. 간단한 설정을 통한 배포가 가능하다.

2. Lifecycle

메이븐은 프레임워크이기 때문에 동작 방식이 미리 정해져있다. 이를 라이프 사이클(Lifecycle)이라 한다.

  • Default(Build) : 일반적인 빌드 프로세스를 위한 모델이다.
  • Clean : 빌드 시 생성되었던 파일들을 삭제한다.(target)
  • Validate : 프로젝트가 올바른지 확인하고 필요한 정보를 사용할 수 있는지 확인하는 단계
  • Compile : 프로젝트 소스코드를 컴파일한다.
  • Test : Unit Test Framework를 통해 컴파일 된 소스 코드를 테스트한다.
  • Package : 실제 컴파일된 소스 코드와 리소스들을 jar, war 등의 배포를 위한 패키징한다.
  • Verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인한다.
  • Install : 패키지를 로컬 저장소에 설치한다.(다른 프로젝트에서 접근가능)
  • Site : 프로젝트 문서와 사이트 작성, 생성한다.
  • Deploy : 만들어진 package를 원격 저장소에 release한다.

최종 빌드 순서는 compile -> test -> packaging

  1. compile : src/main/java 디렉토리 아래의 모든 소스 코드가 컴파일된다.
  2. test : src/test/java, src/test/resources 테스트 자원을 복사 및 테스트 소스 코드가 컴파일된다.
  3. packaging : 컴파일과 테스트가 완료된 후 jar, war 등과 같은 형태로 묶어준다.

* Phase(단계)

Build Lifecycle의 각 단계를 Phase라 한다.
Phase는 의존관계를 가지고 있어 해당 Phase가 수행되려면 이전 Phase가 수행되어야 한다.

* Goal

  • 특정 작업, 최소한의 실행 단위
  • 하나의 플러그인에서는 여러 작업을 수행할 수 있도록 지원하며, 플러그인에서 실행할 수 있는 각각의 기능(명령)을 Goal이라고 한다.(각각의 Phase에 연계된 Goal을 실행하는 과정을 Build라고 한다.)
  • 플러그인의 goal을 실행하는 방법은 다음과 같다.
    • mvn groupId:artifactId:version:goal
    • mvn plugin:goal

3. 설정파일

1) settings.xml

  • 메이븐 빌드 툴과 관련한 설정파일
  • MAVEN_HOME/conf 디렉토리에 위치(메이븐 설치 시 기본 제공)
    • 메이븐을 빌드할 때 라이브러리, 플러그인을 중앙 저장소에서 다운로드 하는 기본 위치는

USER_HOME/.m2/repository (C:\Users\user.m2)

인데 setting.xml에 원하는 로컬 저장소의 경로를 지정, 변경할 수 있다.

2) POM(Projecgt Object Model)

  • POM은 pom.xml을 말하며 pom.xml은 메이븐을 이용하는 프로젝트의 root에 존재하는 xml파일이다.(메이븐 프로젝트 생성 시 최상위 디렉터리에 존재한다.)
  • 프로젝트 당 1개며 프로젝트의 의존성 및 설정을 확인할 수 있다.
  • 다른 파일 이름으로 지정 가능하나(mvn -f 파일명.xml test) pom.xml로 사용하기를 권장

엘리먼트(Element)

  • modelVersion : POM model의 버전
  • parent : 프로젝트의 계층 정보, pom도 부모가 존재해서 중복을 제거할수 있다고 한다.
  • groupId : 프로젝트를 생성하는 조직의 고유 아이디.
  • artifactId : 프로젝트 빌드 시 파일 대표이름. groupId내에서 유일해야 한다.
  • version : 프로젝트의 현재 버전, 개발 중일 때는 SNAPSHOT을 접미사로 사용
    • Maven Build시 artifactId-version.packaging 과 같은 규칙으로 생성된다.(YJ-0.0.1-SNAPSHOT.war)
  • packaging : 패키징 유형(jar, war, ear 등)
  • name : 프로젝트 이름
  • description : 프로젝트 설명
  • url : 프로젝트에 대한 참고 Reference
  • properties : pom.xml에서 사용할 수 있는 변수 같은 개념, 재사용 가능하다.
    ex) <version.>${java.version}</version.>
  • dependencies : 프로젝트와 의존관계 있는 라이브러리를 명시하는 곳
  • build : 빌드에 사용할 플러그인 목록
  • plugin : 프로젝트를 입맞에 맞게 패키징, 배포 등을 위한 간단한 설정
    각각의 플러그인은 하나 이상의 goal(명령, 작업)을 포함하고 있다.
    Goal은 maven의 실행단위.
    각 goal도 사실상 plugin이 내장되어 있다.

https://goddaehee.tistory.com/199
http://itnovice1.blogspot.com/2018/12/mvn-package.html
https://www.baeldung.com/maven-local-repository
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

'Backend > Spring Boot' 카테고리의 다른 글

Spring Boot란?  (0) 2021.02.03