Spring | Maven 메이븐

파과·2022년 8월 7일
0

Spring

목록 보기
3/9

메이븐이란?

Maven

아파치 메이븐 Apache Maven은 소프트웨어 프로젝트 관리 및 이해 도구입니다. 프로젝트 객체 모델(POM)의 개념을 기반으로 하는 Maven은 정보의 중앙에서 프로젝트의 빌드, 보고 및 문서를 관리할 수 있습니다.

즉 메이븐은 아파치에서 개발한 자바용 프로젝트 관리 도구로, 한번에 여러 프로젝트를 빌드, 게시 및 배포할 수 있는 오픈 소스 빌드 툴이다.

자바 프로젝트에 많은 dependency, 빌드, 요구사항이 포함되어 있으면 이 모든 것들을 직접 처리하는 것은 매우 어렵고 지치는 일이다. 메이븐은 이를 도와주는 도구로, 의존성 추가, 프로젝트 클래스 패스 관리, war 및 jar파일의 자동 생성 등 여러 작업은 수행해주는 빌드 관리 도구라고 할 수 있다.

그렇다면 프로젝트 객체 모델(POM)은 무슨 뜻일까?

POM 프로젝트 객체 모델

POM

POM(프로젝트 객체 모델; Project Object Model)은 메이븐의 기본 작업 단위로, 메이븐이 프로젝트를 빌드할 때 사용되는 프로젝트와 그 구성에 대한 세부 정보들을 담고 있는 XML파일이다.

이 POM 파일이 바로 Maven을 작동시키는 핵심 파일이다. 이 XML파일은 dependency(의존성), 소스의 위치(디렉토리), 플러그인, 버전 등 다양한 정보를 담고 있다. 메이븐 명령을 실행하려면 메이븐에게 POM파일을 줘야 하고, 메이븐은 구성과 작업 수행을 위해 pom.xml파일을 읽는다.

pom.xml파일에 들어가는 요소에는 다음과 같은 것들이 있다.

<modelVersion>4.0.0</modelVersion>
<groupId> com.project.loggerapi </groupId>
<artifactId>LoggerApi</artifactId>
<version>0.0.1-SNAPSHOT</version>
  • project - pom.xml 파일의 루트 요소입니다.
  • modelVersion - modelversion은 사용 중인 POM 모델의 버전을 의미합니다. maven 2 및 maven 3에 버전 4.0.0을 사용하세요.
  • groupId - groupId는 프로젝트 그룹의 ID를 의미합니다.
  • artifactId - artifactId는 빌드 중인 프로젝트의 이름을 지정하는 데 사용됩니다. 예시처럼 자바 패키지 이름과 비슷하게 사용하는 경우가 많다.
  • version - version 요소는 프로젝트의 버전 숫자를 포함합니다. 프로젝트가 여러 버전으로 출시된 경우 프로젝트 버전을 제공하는 것이 유용합니다.
<!-- Add typical dependencies for a web application -->
<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.11.0</version>
  </dependency>
</dependencies>
  • dependencies - dependecies 요소는 프로젝트의 의존성 목록을 정의하는 데 사용됩니다.
  • dependency - dependency는 의존성을 정의하고 dependencies 태그 내에서 사용됩니다. 각 dependency는 groupId, artifactId 및 버전으로 설명됩니다.
  • name - 이 요소는 maven 프로젝트에 이름을 지정하는 데 사용됩니다.
  • scope - 이 요소는 컴파일, 런타임, 테스트, 제공 시스템 등이 될 수 있는 이 maven 프로젝트의 범위를 정의하는 데 사용됩니다.
  • packaging - 패키징 요소는 JAR, WAR 등과 같은 출력 유형으로 프로젝트를 패키징하는 데 사용됩니다.

메이븐 dependency에 대해서는 🔗 Dependency를 참조.

Repository

Repository

메이븐 Repository는 일부 메타데이터가 포함된 패키징된 JAR파일의 디렉토리이다.

쉽게 말하면 저장소라고 할 수 있다. repository는 3개 유형으로 구분된다.

  • Local Repository 로컬 저장소
  • Central Repository 중앙 저장소
  • Remote Repository 원격 저장소

로컬은 개발자 컴퓨터의 디렉터리로, 메이븐이 다운로드하는 모든 dependency가 여기에 있다. 기본적으로 maven 로컬 저장소는 user_home/m2 디렉토리다.

중앙 저장소는 Maven 커뮤니티로, 필요로 하는데 로컬에서 찾을 수 없는 dependency를 이곳에서 찾는다. 찾은 다음 이를 로컬 repository로 다운로드한다. https://search.maven.org/#browse 여기서 cetral repository를 볼 수 있다.

원격 저장소는 Maven이 dependency를 다운로드할 수 있는 웹 서버의 리포지토리이다. 종종 조직 내부의 프로젝트를 호스팅하는 데 사용된다. 그런 다음 Maven은 이러한 dependency를 로컬 저장소에 다운로드한다.

Maven의 적용

장점

Maven은 pom 파일을 읽어 프로젝트에 필요한 모든 의존성을 자동으로 추가할 수 있습니다.
Maven을 사용하여 요구 사항에 따라 jar, war 등으로 프로젝트를 쉽게 빌드할 수 있습니다.
Maven을 사용하면 다양한 환경에서 프로젝트를 쉽게 시작할 수 있으며 의존성 주입, 빌드, 처리 등을 처리할 필요가 없습니다.
새 의존성을 추가하는 것은 매우 쉽습니다. pom 파일에 dependency 코드를 작성하기만 하면 됩니다.

단점

Maven은 작업을 위해 시스템에 maven 설치가 필요하고 ide에는 maven 플러그인이 필요합니다.
기존 dependency에 대한 maven 코드를 사용할 수 없는 경우, maven을 사용하여 해당 의존성을 추가할 수 없습니다.




참고

0개의 댓글