Maven이란?

밍드라이브·2023년 8월 16일

Maven

목록 보기
1/1
post-thumbnail

Spring 프레임워크로 프로젝트를 진행하려하다 보니 Maven 프로젝트에 추가를 해주어야 했다 그런데 메이븐에 대해 아는게 없어서 정리해야겠다는 생각이 들었다ㅠ 왜이렇게 어려운게 많은거야 초보는 운다,,,🥲

Maven이란?

메이븐은 자바용 프로젝트 관리 도구이다.
Maven은 Apache사에서 만든 빌드툴(build tool)로써 pom.xml파일을 통한 빌드 시스템으로 프로젝트 관리를 해준다. 이렇게 프로젝트의 전체적인 라이프 사이클을 관리한다고 한다.
Java로 개발하다 보면 다양한 라이브러리를 필요로 하게 되는데, *pom.xml 파일에 필요한 라이브러리만 적으면 Maven이 알아서 다운받고 설치해주고 경로까지 지정해준다.
사용해보니 정말 간편한 친구였당! 전엔 라이브러리 다운받고 옮기고 막 이랬는데ㅋㅋㅋㅎㅎ

코드로 살펴보자면 ↓

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion> <!-- Maven 2 버전 이후 POM의 경우 항상 4.0.0 -->
	<groupId>edu.kh</groupId> <!-- 최상위 패키지 1, 2레벨 -->
	<artifactId>project</artifactId> <!-- 최상위 패키지 3레벨 == context-path -->
	<name>boardProject</name> <!-- 프로젝트 명 -->
	<packaging>war</packaging>  <!-- 배포 형식 -->
	<version>1.0.0--BUILD-SNAPSHOT</version>
    
<!-- properties : 메이븐이 적용된 프로젝트에서 공통적으로 사용할 값을 작성하는 태그(전역 변수) -->
	<properties>
		<java-version>11</java-version> <!-- 프로젝트에서 사용할 자바 버전 -->
		<org.springframework-version>5.3.14</org.springframework-version> <!--  스프링(Spring) 프레임워크의 버전을 지정한다 여기서는 5.3.14를 사용하도록 지정 -->
		<org.aspectj-version>1.9.9.1</org.aspectj-version>
		<org.slf4j-version>1.7.25</org.slf4j-version>
	</properties>
    
<!-- dependencies : Maven 프로젝트는 외부 저장소와 의존 관계를 맺고 있어 프로젝트에 필요한 파일을(라이브러리)
                    사용자가 직접 받을 필요 없이 해당 태그 내에 지정된 형식으로 작성하면 네트워크를 통해 외부 저장소에서 자동으로 얻어와 세팅함.
                    즉 dependencies 태그 안에는 프로젝트와 의존관계에 있는 라이브러리들을 관리한다 -->

<!-- Spring - Mybatis 연결 모듈, 연결 역할을 하는 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-spring</artifactId>
		<version>2.0.6</version>
	</dependency>
    
    이와같이 사용하면 나는 mybatis-spring 라이브러리를 사용할 수 있게된다.

메이븐은 한 개의 모듈을 아티팩트라는 단위로 관리한다.
즉, 각 모듈은 독립적으로 빌드될 수 있는 단위이며, 빌드된 결과물이 아티팩트가 된다.

주석에 있는 말을 풀어서 설명해보자면 메이븐은 POM에서 선언된 dependency설정으로 빌드 및 배포시 필요 라이브러리들을 관리하고 로컬 및 원격 저장소에서 선언된 라이브러리들을 다운받아 사용한다. 개발자는 프로젝트에 사용할 라이브러리를 직접 업로드하지 않고 pom.xml에 dependency로 정의만 해두면 메이븐이 repository에서 검색해서 자동으로 추가해준다. 심지어 참조하는 모든 라이브러리 까지 찾아서 추가해준다.

Maven 의존성 분석 순서

  1. 로컬 저장소에서 의존성 확인
  • 먼저 Maven은 프로젝트의 pom.xml 파일에 선언된 의존성 정보를 확인후 만약 로컬 저장소에 해당 의존성이 이미 다운로드되어 있는 경우, 해당 의존성을 로컬 저장소에서 가져와서 사용한다.
  1. 원격 저장소 리스트에서 의존성 확인
  • 만약 로컬 저장소에 해당 의존성이 없거나 업데이트된 버전이 필요한 경우, Maven은 원격 저장소 리스트를 확인한다. 원격 저장소 리스트에는 개발자나 조직이 직접 구성한 원격 저장소도 포함될 수 있고 Maven은 해당 의존성을 원격 저장소에서 찾아서 다운로드하여 로컬 저장소에 저장한 후 사용한다.
  1. 1번 2번이 실패하면 의존성 에러 보고
  • 만약 로컬 저장소와 원격 저장소에서 해당 의존성을 찾을 수 없는 경우, Maven은 의존성 에러를 발생시킨다. 이는 프로젝트의 빌드나 실행에 필요한 라이브러리가 존재하지 않아서 발생하는 문제이다.
의존성 <dependency> 필수 선언 항목

<groupId>: 부분적인 프로젝트나 조직에서의 라이브러리 집합을 식별하기 위해 제공한다.

<artifactId>: 프로젝트의 실제 이름으로 groupId와 합쳐져 프로젝트 식별에 쓰인다.

<version>: 선언한 의존성 artifact의 버전으로 프로젝트 내에서 사용하는 artifact의 일관성을 추구할 수 있다.
profile
민주입니다

2개의 댓글

comment-user-thumbnail
2023년 8월 16일

정리를 잘하셨네요!! 잘 보고 갑니다~~~ :)

1개의 답글