JAVA

Maven이란 무엇인가?

Alex Han 2025. 3. 17. 01:53
반응형

프로젝트가 복잡해질수록 사용하는 라이브러리가 많아지게 된다. 프로젝트에 참여하는 사용자가 많아질수록 라이브러리의 관리는 어려워진다. 또한, 프로젝트가 복잡해질수록 소스를 컴파일하고 배포하는 것도 점점 어려워진다. 이러한 문제를 해결하기 위해 다양한 도구들이 존재하는데, 그중에서 Maven이 존재한다.

 

MavenJava 프로젝트의 빌드(Build), 의존성 관리(Dependency Management), 배포(Deployment) 등을 자동화해주는 빌드 도구이다.

Apache Software Foundation에서 관리하고 있으며, 현재 Java 생태계에서 가장 널리 사용되는 빌드 도구 중 하나이다.

 

Maven은 지금까지 애플리케이션을 개발하기 위해 반복적으로 진행해왔던 작업들을 지원하기 위하여 등장한 도구이다.

Maven을 사용하면 빌드(Build), 패키징, 문서화, 테스트와 테스트 리포팅, git, 의존성관리, svn등과 같은 형상관리서버와 연동(SCMs), 배포 등의 작업을 손쉽게 할 수 있다.

 

Maven을 이해하려면 CoC(Convention over Configuration)라는 단어를 먼저 이해해야 한다. CoC란 일종의 관습을 말하는데, 예를 들자면 프로그램의 소스파일은 어떤 위치에 있어야 하고, 소스가 컴파일된 파일들은 어떤 위치에 있어야 하고 등을 미리 정해놨다는 것이다.

Maven을 사용한다는 것은 어쩌면 이러한 관습 즉 CoC에 대해서 알아나가는 것이라고도 말할 수 있다.

 

CoC란 무엇인가?

 

CoC(Convention over Configuration)란 무엇인가?

Convention over Configuration (CoC)Convention over Configuration은 소프트웨어 개발에서 설정보다 관례를 우선시하는 철학을 의미한다. 즉, 프레임워크나 시스템이 기본적으로 정해놓은 규칙(관례)을 따르면

jyhan0625.tistory.com

 

 

 


1. Maven의 주요 기능

기능 설명
빌드 자동화 소스코드를 컴파일, 테스트, 패키징, 배포하는 과정을 자동으로 처리
의존성 관리 프로젝트에 필요한 외부 라이브러리(JAR 파일 등)를 자동으로 다운로드하고 관리
프로젝트 관리 표준화 표준 폴더 구조, 빌드 라이프사이클 제공
플러그인 기반 확장 다양한 플러그인을 통해 테스트, 리포트 생성, 배포 자동화 등 기능 확장 가능

 

 

 


2. POM (Project Object Model)

Maven에서 가장 중요한 파일은 pom.xml이다.

모든 설정은 이 POM 파일에 작성됨.

 

pom.xml 예시1

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0.0</version>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.7.0</version>
    </dependency>
  </dependencies>
</project>

 

여기서 관리하는 것들:

프로젝트 이름, 버전, 그룹ID

의존성 라이브러리 (자동 다운로드)

플러그인 설정

빌드 설정

 

pom.xml 예시2

<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 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>kr.or.connect</groupId>
    <artifactId>examples</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>mysample</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

 

각각의 태그의 의미는 다음과 같습니다.

  • project : pom.xml 파일의 최상위 루트 엘리먼트(Root Element)입니다.
  • modelVersion : POM model의 버전입니다. 
  • groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정합니다. 일반적으로 도메인 이름을 거꾸로 적습니다.
  • artifactId : 해당 프로젝트에 의하여 생성되는 artifact의 고유 아이디를 결정합니다. Maven을 이용하여  pom.xml을 빌드할 경우 다음과 같은 규칙으로 artifact가 생성됩니다. artifactid-version.packaging. 위 예의 경우 빌드할 경우 examples-1.0-SNAPSHOT.jar 파일이 생성됩니다.
  • packaging : 해당 프로젝트를 어떤 형태로 packaging 할 것인지 결정합니다. jar, war, ear 등이 해당됩니다.
  • version : 프로젝트의 현재 버전. 추후 살펴보겠지만 프로젝트가 개발 중일 때는 SNAPSHOT을 접미사로 사용합니다. Maven의 버전 관리 기능은 라이브러리 관리를 편하게 합니다.
  • name : 프로젝트의 이름입니다.
  • url : 프로젝트 사이트가 있다면 사이트 URL을 등록하는 것이 가능합니다.

 

 


3. 의존성 관리

Maven은 중앙 저장소(Maven Central)에서 필요한 라이브러리를 다운로드해줌.

버전 관리, 트랜잭션 관리, 라이브러리 충돌 해결도 지원.

 

예시

<dependencies>
  <dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.8.1</version>
    <scope>test</scope>
  </dependency>
</dependencies>

 

 

 


4. 빌드 라이프사이클

Maven은 표준 빌드 흐름을 제공.

 

1. validate - 프로젝트가 제대로 구성됐는지 확인

2. compile - Java 코드 컴파일

3. test - 테스트 코드 실행

4. package - .jar 또는 .war 파일 생성

5. verify - 통합 테스트 등 추가 검증

6. install - 로컬 저장소에 패키지 설치

7. deploy - 원격 저장소에 배포

 

 

 


5. Maven의 장점

장점 설명
자동 의존성 관리 복잡한 라이브러리 직접 관리 X, 필요한 라이브러리 자동 설치
표준화된 프로젝트 구조 프로젝트 디렉토리 구조 일관성 유지 (협업 편리)
플러그인 확장성 테스트, 문서화, 배포 등 다양한 플러그인 지원
다양한 IDE 지원 IntelliJ, Eclipse 등에서 완벽하게 통합 사용 가능
빌드 프로세스 단순화 일관된 빌드, 테스트, 배포 가능

 

 

 


6. Maven 기본 디렉토리 구조

project
 ├── src
 │   ├── main
 │   │   └── java         // 실제 소스코드
 │   └── test
 │       └── java         // 테스트 코드
 └── pom.xml              // Maven 설정 파일

 

 

 


한 줄 정리

Maven은 Java 프로젝트의 빌드와 의존성 관리를 표준화하고 자동화해주는 강력한 빌드 도구다.

 

반응형