ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PROGRAMMING] Maven
    programming 2020. 7. 25. 17:26

    Maven

    - Maven은 자바용 프로젝트 관리 도구로 Apache Ant의 대안으로 만들어졌다.

    - Ant와 마찬가지로 프로젝트의 전체적인 라이프 사이클을 관리하는 도구이며 많은 편리함과 이점이 있어 널리 사용됨.

    - 'POM.xml'이라는 파일에 필요한 라이브러리를 정의해놓으면 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는 데에 필요한 다른 라이브러리까지 관리하여 네트워크를 통해서 자동으로 받아준다.

    - Maven은 중앙 저장소를 통한 자동 의존성 관리를 한다.

    - 간단한 설정을 통한 배포 관리가 가능하다.

     

    생명주기

    메이븐 실행 단위를 골(Goal)이라고 하며 골들이 상호 연관해 실행되는데 그러한 관계를 메이븐 골의 생명주기라고 한다.

    Clean

    validation -> compile -> test -> package -> integration-test -> verify -> install

    Deploy

     

    - Clean : build 후 만들어지는 Target의 디렉터리를 삭제

    - Validate : 올바른 Pom.xml인지 확인

    - Compile : 의존성들을 가져오고, Target/classes 디렉터리에 빌드

    - Test : 테스트 코드를 실행

    - Verify : 통합 테스트 결과에 대한 검사를 실행하여 품질 기준을 충족하는지 확인

    - Package : Test 상태가 성공적으로 실행된 다음에 실행되며 war나 jar 파일같은 결과물을 생성

    - Intall : 빌드된 결과물을 내부 메이븐 저장소로 보냄

    - Deploy : 결과물을 배포

     

    저장소

    1. 중앙 저장소 : 오픈 소스 라이브러리, 메이븐 플러그인, 메이큰 아키타입을 관리하는 저장소

    2. 원격 저장소 : 중앙 저장소에 없는 라이브러리를 한 곳에 모아두기 위하여 별도의 메이븐 저장소를 설치해 관리하는 저장소

    3. 로컬 저장소 : 메이븐을 빌드할 때 다운로드하는 라이브러리, 플러그인을 관리하는 개발자 PC의 저장소

     

    메이븐은 빌드를 하는 시점에 중앙 저장소나 원격 저장소에서 로컬 저장소로 라이브러리를 다운로드한다.

    로컬 저장소에 이미 다운로드한 라이브러리가 있다면 다시 다운로드하지 않고 로컬 저장소의 라이브러리를 사용한다.

     

    POM 구조

    메이븐은 프로젝트 객체 모델 (POM, Project Object Model)이라는 개념을 바탕으로 프로젝트 의존성 관리, 라이브러리 관리, 프로젝트 생명주기 관리 기능 등을 제공하는 프로젝트 관리 도구이다.

    다른 빌드도구와는 다르게 선언적 접근 방법을 사용한다.

    빌드 프로세스를 이벤트 단위로 기술하는 것이 아니고 프로젝트를 설명하고 프로젝트 구조에 대해서 정의하고 이와 관련된 연관 정보들을 기술하는 형태이다.

    기본정보 

    프로젝트 정의(컨텍스트와 아티팩트를 정의) : 필수

    연관 정보(라이브러리 연관 관계 및 상위 프로젝트 등 관련 정보에 대한 기술) : 필수

    프로젝트 정보

    선택

    빌드 설정

    빌드 정의(기본 설정되어 있는 빌드 프로세스에 변경을 위하여 별도의 플러그인을 적용할 때 사용) : 선택

    리포트 정의(빌드 프로세스에 대한 리포팅 뿐 아니라 연관된 시스템과 결과 정보 등을 리포트로 만들기 위해 정의) : 선택

    환경설정

    선택

     

    pom.xml에서 사용되는 태그

    <build>

     : 메이븐의 기본 디렉터리 구조가 정의되어 있다.

     

    <version>

    <version>0.0.1-SNAPSHOT</version>

     : 메이븐에서 버전에 대한 명명 규칙을 SNAPSHOT 과 RELEASE로 구분한다.

    SNAPSHOT - 완성되지 않은 버전 / RELEASE - 완성되어서 공식 배포된 버전

     

    <properties>

    <properties>
            <java.version>1.8</java.version>
    </properties>

     : pom.xml 파일 내부에서 사용할 속성을 정의. 주로 버전 정보같이 공통적으로 많이 사용하는 내용을 속성으로 정의

     

    <scm>

     : 버전 관리 시스템과 연계하기 위한 정보를 기술

     

    <repositories>

     : 메이븐 저장소 정보를 기술. 주로 사내 사설 저장소를 사용할 때 사용

     

    <distributionManagement>

     : 빌드의 결과물을 배포할 위치를 지정. 주로 사내 사설 저장소 정보를 사용

     

    <profiles>

     : 특정 항목 혹은 특정 속성에 따라 빌드를 다르게 수행할 수 있다. 주로 하나의 pom.xml 파일로 개발, 테스트 운영환경에서 모두 실행 가능하도록 유용하게 사용

     

    최소 pom

    <project>
        <modelVersion></modelVersion>
        <groupId></groupId>
        <artifactId></artifactId>
        <version></version>
    </project>

    - groupId : 일반적으로 도메인명을 주로 사용

    - artifactId : 프로젝트의 이름으로 인식하는 경우가 많음. groupId와 조합하여 식별자로 사용

     

    마무리

    Maven 한 줄 정의

    POM이라는 개념을 바탕으로 프로젝트 의존성 관리, 라이브러리 관리, 프로젝트 생명 주기 관리 등을 제공하는 프로젝트 관리 도구(빌드 도구)

     

    Maven을 사용하는 경우 또는 이유 ( 장점 )

    1. 라이브러리의 관리를 용이하게 해줌

    2. 프로젝트의 작성부터 프로젝트 라이프사이클에 포함되는 각 테스트를 지원해줌.

     

    단점

    1. 프로젝트 관리에 대한 모든 내용이 pom.xml 파일에 담기게 되므로 코드가 길고 장황하게 될 수 있음

    2. 메이븐 프로젝트 특성상 소프트 웨어 빌드에 통용되는 생명 주기를 제공하고 있어서 세부 항목 또는 특화된 빌드 환경에 대한 지원이 미약함

     

    다른 빌드 도구들과의 차이점

    1. Ant는 자유도가 높은 편에 속하는 반면 Maven은 정해진 라이프 사이클에 의하여 작업을 수행하고 전반적인 프로젝트 관리 기능까지 포함함 ( Build Tool + Project Management )

    2. Ant의 문제점이었던 장황한 빌드 스크립트 문제를 해결

    3. Gradle에 비해 Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많음 ( 가독성이 떨어지고, 내용이 길어짐 )

    4. Gradle에 비해 빌드와 테스트 실행 결과가 느림 ( Gradle이 캐시를 사용하기 때문에 테스트 반복시 차이가 더 커진다.)

     

     

     

    참고

    https://cornswrold.tistory.com/48?category=806549

     

    [Maven] 메이븐(Maven) 설치 및 프로젝트 생성

    메이븐 설치 메이븐은 해당 url에서 쉽게 다운로드 가능 (http://maven.apache.org/download.cgi) 메이븐을 설치한 후에는 자바를 설치한 것처럼 환경변수를 잡아 주어야한다. (보통 JAVA_HOME 처럼, 메이븐에�

    cornswrold.tistory.com

    https://goddaehee.tistory.com/199

     

    [Maven] Maven 이란? (정의, 예제)

    [Maven] 메이븐 이란? (정의, 예제) 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 메이븐 알아보기 ] 입니다. : ) 1. 빌드 (Build) #1 빌드란?  - 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립�

    goddaehee.tistory.com

     

Designed by Tistory.