Spring

Spring 프레임워크_Chapter02_Maven

강용민 2022. 3. 12. 03:36

1.Maven

Maven은 프로젝트를 관리하는 도구이다.

빌드 자동화 기능과 프로젝트 관리 기능을 제공한다.

  • 프로젝트(라이브러리) 관리는 pom.xml 파일을 이용하여 프로젝트와 관련된 jar 파일을 다운로드하고 관리한다.
  • 빌드 자동화는 빌드 작업들을 간단하고 쉽게 그리고 일관성 있게 수행할 수 있는 통합 환경을 제공한다.
    이때 빌드는 소스코드 파일을 실행 코드로 변환하여 배포하는 과정을 말한다.

2. 프로젝트 관리 기능

프로젝트 관리 설정들을 메이븐이 미리 정의한 설정들로 대체한다.

  • 정형화된 프로젝트 디렉토리 구조 관리(pom.xml)
    CoC(Convention over COnfiguration)패러다임을 따른다. - 설정보다는 규범
  • 의존성 관리기능
    편리한 라이브러리 관리 기능이다.(pom.xml, Repository)
    프로젝트 빌드에 필요한 라이브러리, 플러그인을 개발자 PC에 자동으로 다운로드한다
  • 빌드 프로세스를 관리(pom.xml)
    플러그인 설정을 통해 빌드를 자동화한다.

프로젝트 디렉토리 기본 설정은 다음과 같다.

pom.xml 코드 구성

프로젝트 당 한 개의 pom.xml 파일을 관리한다.pom.xml코드는 다음과 같이 구성되어 있다.

  • 최상위 엘리먼트(root element) : project
  • pom.xml은 3개의 필수 필드를 가진다.
    • groupId : 프로젝트 조직 고유 도메인
    • artifactId : 프로젝트명
    • version : 프로젝트 버전
  • 프로젝트 의존관계의 라이브러리 관리는 dependency필드에 존재한다.

 

프로젝트 빌드 설정

  • 프로젝트 기본 정보, 저장소, 프로퍼티, 디렉토리 구조
  • 플러그인(plugins)
  • 골(goals)

Maven Repository

메이븐 저장소는 프로젝트에 사용되는 프로젝트 jar 파일, 라이브러리 jar 파일들이 위치하며 3가지 타입이 있다.

메이븐의 의존 라이브러리 검색 동작 절차대로 타입을 나열했다.

  • 지역(local) 저장소
    로컬 저장소는 메이븐을 빌드할 때 다운로드하는 라이브러리, 플러그인을 관리하는 저장소이다.
  • 중앙(central) 저장소
    오픈 소스 라이브러리, 메이븐 플러그인, 메이븐 아키타입을 관리하는 저장소이다.
  • 원격(remote) 저장소
    중앙 저장소에존재하지 않는 라이브러리를 관리하기 위하여 별도의 메이븐 저장소를 설치해 관리하는 것이 가능하다.

의존 라이브러리 적용 스코프

의존 라이브러리를 적용할 수 있는 시점을 제한할 수 있다.

scope Description
compile 스코프를 설정하지 않았을 떄의 기본 스코프
provided 컴파일시에는 직접 의존성을 참조하고 런타임시에는 다른 환경에서 의존성을 제공받는다.(해당 컨네이너의 서블릿 API)
runtime 컴파일 시에는 사용되지 않지만 애플리케이션을 실행할 떄 사용되는 라이브러리일 경우 설정한다.
test 테스트하는 시점에만 사용하는 라이브러리에 대한 스코프를 설정할 때 사용한다.(JUnit)
system provided와 비슷하다. 단지 우리가 직접 jar 파일을 제공해야 한다.
import import : 다른 POM 설정 파일에 정의 되어 있는 의존 관계 설정을 현재 프로젝트로 가져온다.  

4.빌드 자동화 기능

메이븐은 소프트웨어 빌드를 위한 공통 인터페이스를 제공하는 프레임워크이다.

플러그인 설정을 통해 기능을 위임한다.

  • 빌드 단계(컴파일, 테스트, 패키징, 배포)들을 빌드 라이프 사이클이라고 한다.
  • 각 빌드 단계에서 수행되는 작업을 골(Goal)이라 한다.
  • 실제 골은 그 단계에 연결된 플러그인(Plugin)에 의해 실행된다.

Maven 빌드 라이프사이클

Maven은 기본, clean, site 3개의 라이프사이클이 있다.

  • 기본라이프사이클
    여러 단계의 페이즈(phase)로 나뉘어져 있으며, 각 페이즈는 의존관계를 가진다. compile -> test -> package deploy순서로 진행된다.
  • clean 라이프사이클
    clean 페이즈를 이용하여 이전 빌드에서 생성된 모든 파일(target 디렉토리)들을 삭제한다.
  • site 라이프사이클
    site, site-deploy 페이즈를 이요하여 생성된 문서들을 대상 사이트에 배포한다.

 Maven Phase & Goal

빌드 라이프사이클은 하나 이상의 골을 수행하는 페이즈(phase)들로 구성한다.

각 페이즈 별로 플러그인이 작업을 수행한다. 이 작업을 Goal이라 한다.