[스프링] Maven
● Maven이란?
프로젝트를 관리하는 도구로 빌드 자동화 기능과 프로젝트 관리 기능을 제공
빌드 자동화 : 빌드 작업들을 간단하고 일관성 있게 수행할 수 있는 통합환경 제공
빌드 = 소스코드 파일을 실행 코드로 변환하여 배포한느 과정
프로젝트(라이브러리) 관리 : pom.xml 파일을 이용하여 프로젝트 관련된 jar 파일을 다운로드하고 관리
프로젝트 산출물을 일관된 구조로 관리
● Maven 프로젝트 관리 기능
일반 개발자들이 하는 프로젝트 관리 설정들을 메이븐이 미리 정의한 설정들로 대체한다.
프로젝트 디렉토리 기본 설정 (pom.xml)

maven이 위와 같은 기본 디렉토리 구조를 만들어준다.
클래스나 패키지를 찾을때 기준이 되는 경로인 클래스 패스는src/main/resources 로 사용한다.
자바 실행파일은 jar 형식으로 target에 저장된다.
pom.xml은 maven의 정보를 담고 있는 파일로 project object model을 설정하는 부분이다.
pom.xml의 기본값은 superpom을 상속받는다. (들어가는 내용은 나중에)
의존관계(라이브러리) 설정 (pom.xml)
프로젝트 빌드에 필요한 라이브러리, 플러그인을 개발자 pc에 자동으로 다운로드 해준다. 이때 maven repository에서 가져온다.
의존관계 설정 역시 Pom.xml에서 해준다. 최상위 앨리먼트는 project이다.
3개의 필수 필드 : grouid(프로젝트 조직 고유 도메인), artifactid(프로젝트 명), version(프로젝트 버전)
의존관계 라이브러리 관리는 dependency
의존성 검색 절차 : (없으면 다음단계로) 지역 저장소 -> 중앙저장소 -> 원격 저장소 / 저장소는 아래서 설명
검색 방법 pom.xml dependency안에 넣어 놓은 필수 필드보고
의존 라이브러리 적용 스코프 : 의존 라이브러리 적용 시점을 제한하는 설정으로 종류는 아래와 같다.

Maven Repository
프로젝트에 사용되는 프로젝트 jar 파일, 라이브러리 jar 파일들이 위치하여 있는 저장소로 3가지 타입이 있다.
지역 저장소 : 메이븐을 빌드할 때 다우하는 라이브러리로 플러그인을 관리하는 저장소이다. -> 필수 필드에 따라 관리
중앙 저장소 : 오픈 소스 라이브러리로, 메이븐의 플러그인과 아키타입(구조생성)을 관리하는 저장소이다.
원격 저장소 : 중앙 저장소에 존재하지 않는 라이브러를 관리하기 위한 별도의 메이븐 저장소
● Maven 빌드 자동화 기능
메이븐은 소프트웨어 빌드를 위한 공통 인터페이스를 제공한다. 기능은 플러그인 설정을 통해 위임한다
전체 구조

빌드 라이프사이클
미리 정해진 빌드순서로 build, clean, site 3개의 라이프사이클이 있다.
build :여러개의 페이즈(phase)로 이루어져 있으며 compile, test, package 순서로 진행된다.

빌드라이프 사이클은 하나 이상의 골을 수행하는 페이지로 구성
플러그인
플러그인이란 브라우저에서 취급할 수 없는 인터넷상의 콘텐츠를 취급하는 프로그램을 말한다.
maven에선 maven을 구성하는 요소로 mavend은 여러개의 플러그인으로 만들어진다.
하나의 플러그인은 하나이상의 골(코드, 명령)을 가진다.

골
maven의 실행단위로 goal을 설정해서 실행하면 target에 jar 파일이 만들어진다(?)