Maven

Fox·2024년 2월 27일
0
post-thumbnail

Maven 이란?

Maven은 Apache에서 개발한 자바 프로젝트 관리 도구이며, 빌드, 문서화, 보고, 의존성 관리, 릴리스, 배포 등과 같은 프로젝트 관리에 필요한 모든 기능을 제공한다.

핵심적으로 Maven은 프로젝트의 구조를 파악하는 pom.xml이라는 중요한 파일을 사용한다.
이 파일에는 프로젝트가 필요로 하는 라이브러리와 그 버전, 빌드 설정, 플러그인 등이 정의되어 있으며, 이를 통해 Maven은 프로젝트에 필요한 라이브러리를 자동으로 다운로드하고, 이를 관리한다.

특히, Maven은 필요한 라이브러리뿐 아니라, 해당 라이브러리가 작동하는 데 필요한 다른 라이브러리들까지 자동으로 다운로드 받아주는 특징이 있다.
이는 라이브러리 간의 의존성 관리를 자동화하여 개발자가 복잡한 의존성 관리에서 벗어나, 비즈니스 로직에 집중할 수 있게 해준다.

Maven 장점과 단점

장점

  1. 필요한 라이브러리를 자동으로 다운로드하고 관리한다.
  2. 정해진 빌드 방법을 사용하여 여러 사람이 함께 작업하기 유리하다.
  3. 다양한 플러그인을 통해 많은 작업들이 자동화된다.
  4. 일관된 디렉토리 구조를 제공하여 프로젝트의 구조를 쉽게 이해할 수 있게 한다.

단점

  1. 처음 사용하는 데 있어서 시간이 필요하다.
  2. 많은 기능을 제공하는 대신 프로젝트 크기가 커질 수 있다.
  3. 세부적인 설정이 필요한 경우, 자동화의 한계를 느낄 수 있다.
  4. pom.xml 파일 등의 설정 파일이 복잡하고 다양한 옵션을 가지고 있어, 이해하고 관리하는 데 어려움이 있을 수 있다.

Maven 라이프 사이클

Maven은 빌드 프로세스를 관리하기 위해 미리 정의된 라이프 사이클을 제공하며, 각 단계는 특정 목적을 가지고 있다.
또한 Maven의 기본 라이프 사이클에는 다음의 세 가지가 있다:

  1. Default (or Build) Lifecycle: 실제 소프트웨어 빌드와 배포에 사용된다. compile, test, package, install, deploy 등의 단계를 포함하고 있다.
  2. Clean Lifecycle: 이전에 생성된 파일을 청소하는 데 사용된다. pre-clean, clean, post-clean의 단계를 가지고 있다.
  3. Site Lifecycle: 프로젝트 문서와 사이트 생성에 사용된다. pre-site, site, post-site, site-deploy의 단계를 가지고 있다.

빌드란?

빌드는 소스 코드를 실행 가능한 소프트웨어 시스템으로 변환하는 과정을 말하며, 이 과정은 컴파일, 테스트, 패키징 등 여러 단계를 포함 한다.

Maven에서의 빌드 과정은 다음과 같다:

  1. 컴파일: Maven은 mvn compile 명령을 통해 자바 소스 코드를 바이트 코드로 컴파일 한다. 이 과정에서 Maven은 pom.xml에서 정의한 라이브러리를 참조한다.
  2. 테스트: mvn test 명령을 사용하여 단위 테스트를 실행한다. Maven은 JUnit과 같은 테스팅 프레임워크를 지원하며, 테스트 결과를 자동으로 생성한다.
  3. 패키징: mvn package 명령을 통해 컴파일된 코드와 리소스 파일들을 JAR나 WAR와 같은 배포 가능한 형태로 패키징한다.
  4. 설치: mvn install 명령을 사용하면, 패키징된 아티팩트를 로컬 저장소에 설치한다. 이렇게 해서 다른 Maven 프로젝트에서 이 아티팩트를 참조할 수 있게 된다.
  5. 배포: mvn deploy 명령을 통해 아티팩트를 원격 저장소에 배포한다. 이렇게 배포된 아티팩트는 다른 개발자들이 사용할 수 있다.

이렇게 Maven은 빌드 생명주기를 관리하며, 각 단계마다 필요한 작업을 자동으로 수행한다.
이를 통해 개발자는 빌드와 관련된 복잡한 작업들에서 벗어나 비즈니스 로직에 더 집중할 수 있으며, 이 모든 과정은 pom.xml에 정의된 설정에 따라 수행된다.

빌드 도구 종류와 차이점

Ant(앤트)

자바 프로젝트 빌드 도구로 가장 널리 사용되던 빌드 도구였다.

Eclipse에 기본적으로 탑재되었으며, XML 스크립트를 기반으로 하였는데, 최근에 나온 빌드 도구들과 달리 자동으로 라이브러리를 업데이트 하는 기능이 없어

현재는 주로 레거시 시스템에서만 사용된다.

Maven(메이븐)

Ant이후에 나온 자바 빌드 도구로 자동으로 라이브러리와 의존성을 관리하는 기능이 있다.

Ant와 마찬가지로 XML 스크립트를 기반으로 하며, pom.xml 파일로 의존성을 관리한다.

Maven에서는 라이프 사이클 개념이 도입되어 빌드 순서 등을 정의 할 수 있다.

Gradle(그래들)

가장 최근에 나온 자바 빌드 도구로 "Groovy (그루비)" 문법을 사용한다.

build.gradle에 스크립트를 작성하며, 대규모 프로젝트에서 복잡해지는 경향이 있는 XML 기반 스크립트에 비해 관리가 편하다는 장점을 갖는다.

Gradle은 현재 안드로이드 프로젝트의 표준 빌드 시스템으로 채택되어 있다고 한다.

Maven 설정 파일

pom.xml

이 파일은 프로젝트의 기본 정보와 빌드 설정을 담고 있으며, 프로젝트에 필요한 라이브러리와 그 버전, 빌드 플러그인, 프로젝트의 메타데이터 등을 정의한다.
pom.xml은 프로젝트의 루트 디렉토리에 위치하며, Maven의 빌드 프로세스를 제어한다.

<project>
  <modelVersion>4.0.0</modelVersion>
  
  <groupId>com.spring.app</groupId>
  <artifactId>my-spring</artifactId>
  <version>1.0-SNAPSHOT</version>
  
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

pom.xml 파일은 다음과 같은 주요 요소들을 포함한다:

  • <modelVersion>: POM model의 버전이다. 현재는 4.0.0을 사용한다.
  • <groupId><artifactId><version>: 프로젝트의 고유 식별자이다.
  • <dependencies>: 프로젝트가 사용하는 라이브러리와 그 버전을 명시한다.
  • <build>: 빌드 관련 설정을 포함한다. 예를 들어, 플러그인 설정, 소스 코드 및 리소스 디렉토리의 위치 등을 지정한다.

settings.xml

이 파일은 Maven 설정을 담고 있다.
로컬 레포지토리의 위치, 원격 레포지토리 정보, 서버 인증 정보 등을 설정한다.
settings.xml은 사용자의 홈 디렉토리의 .m2 디렉토리 (~/.m2) 또는 Maven 설치 디렉토리의 conf 디렉토리 ($M2_HOME/conf)에 위치할 수 있다.











참고: https://velog.io/@changyeonyoo/Maven-%EC%9D%B4%EB%9E%80#settingsxml
참고: https://hstory0208.tistory.com/entry/Gradle%EC%9D%B4%EB%9E%80-%EC%99%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EC%A7%80%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84-%EB%B3%B4%EC%9E%90

profile
주니어개발자 Fox 입니다 🦊

0개의 댓글