Maven

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.10.03
조회수
18
버전
v1

Maven

Maven은 자바 기반 소프트웨 프로젝트의 드 자동화, 의존성 관리,프로젝트 정보 관리**를 위한 강한 오픈소스 도구. 아파치 소프트웨어 재단에서 관리하는 Maven은 소프트웨어 개발 생명주기 전반에 걸쳐 표준화된 구조와 프로세스를 제공함으로써 개발자들이 프로젝트 설정에 소요되는 시간을 줄이고, 실제 코드 개발에 집중할 수 있도록 돕습니다.

Maven은 Ant와 같은 기존 빌드 도구의 복잡성과 반복적인 스크립트 작성 문제를 해결하기 위해 2004년에 처음 등장했으며, 현재는 자바 생태계에서 가장 널리 사용되는 빌드 도구 중 하나로 자리 잡고 있습니다.


개요

Maven의 핵심 철학은 "Convention over Configuration"(규약 우선 구성)입니다. 이는 개발자가 일일이 빌드 스크립트를 작성하지 않아도, 미리 정의된 표준 구조와 라이프사이클을 따라 프로젝트를 구성하면 자동으로 빌드, 테스트, 패키징, 배포 등의 작업이 수행된다는 것을 의미합니다.

Maven은 프로젝트를 관리하기 위해 [pom.xml](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%20%EA%B5%AC%EC%84%B1%20%ED%8C%8C%EC%9D%BC/pom.xml)(Project Object Model)이라는 XML 기반의 설정 파일을 사용하며, 이 파일을 통해 프로젝트의 메타데이터, 의존성, 빌드 설정, 플러그인 등을 선언합니다.


주요 기능

1. 의존성 관리 (Dependency Management)

Maven은 프로젝트가 필요로 하는 외부 라이브러리(예: Spring, JUnit, Log4j 등)를 자동으로 다운로드하고 관리합니다. 개발자는 pom.xml에 필요한 라이브러리의 그룹 ID(group ID), 아티팩트 ID(artifact ID), 버전(version)만 명시하면, Maven이 중앙 저장소(Central Repository)에서 해당 라이브러리와 그 라이브러리의 하위 의존성까지 자동으로 해결합니다.

예시:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

의존성 스코프(scope)를 통해 라이브러리의 사용 범위를 제어할 수 있습니다: - [compile](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EB%B9%8C%EB%93%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4/compile): 기본값, 모든 상황에서 사용 - [test](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%ED%85%8C%EC%8A%A4%ED%8A%B8/test): 테스트 코드에서만 사용 - provided: 런타임 환경에서 제공됨 (예: 서블릿 API) - runtime: 컴파일 시 필요 없고 실행 시에 필요 - system: 로컬 시스템 경로에 있는 JAR

2. 빌드 라이프사이클 (Build Lifecycle)

Maven은 표준화된 빌드 라이프사이클을 제공합니다. 주요 라이프사이클은 다음과 같습니다:

  • [clean](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EB%B9%8C%EB%93%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4/clean): 이전 빌드 결과를 삭제
  • default(또는 build): 컴파일, 테스트, 패키징, 설치 등 주요 빌드 작업
  • site: 프로젝트 문서 생성

각 라이프사이클은 여러 단계(phase)로 구성되며, 예를 들어 default 라이프사이클에는 다음과 같은 단계가 포함됩니다: - [validate](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EB%B9%8C%EB%93%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4/validate): 프로젝트가 올바른지 확인 - compile: 소스 코드 컴파일 - test: 단위 테스트 실행 - [package](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%ED%8C%A8%ED%82%A4%EC%A7%95/package): JAR, WAR 등으로 패키징 - [verify](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EB%B9%8C%EB%93%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4/verify): 품질 기준 검증 - [install](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EB%B9%8C%EB%93%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4/install): 로컬 저장소에 아티팩트 설치 - [deploy](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EB%B0%B0%ED%8F%AC/deploy): 원격 저장소에 배포

명령어 예시:

mvn compile        # 컴파일
mvn test           # 테스트 실행
mvn package        # 패키징 (JAR 생성)
mvn install        # 로컬 저장소에 설치
mvn deploy         # 원격 저장소에 배포

3. 플러그인 시스템

Maven의 모든 작업은 플러그인을 통해 수행됩니다. 예를 들어, 컴파일은 [maven-compiler-plugin](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%EB%B9%8C%EB%93%9C%20%EB%8F%84%EA%B5%AC/maven-compiler-plugin), 테스트는 [maven-surefire-plugin](/doc/%EA%B8%B0%EC%88%A0/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4%20%EA%B0%9C%EB%B0%9C/%ED%85%8C%EC%8A%A4%ED%8A%B8/maven-surefire-plugin)이 담당합니다. 플러그인은 pom.xml에 추가하여 커스터마이징할 수 있습니다.

예시: Java 11로 컴파일 설정

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.11.0</version>
            <configuration>
                <source>11</source>
                <target>11</target>
            </configuration>
        </plugin>
    </plugins>
</build>


디렉터리 구조

Maven은 표준 디렉터리 구조를 따르며, 이로 인해 프로젝트 간 일관성이 유지됩니다.

src/
├── main/
│   ├── java/          → 자바 소스 코드
│   ├── resources/     → 설정 파일, 프로퍼티 등
│   └── webapp/        → 웹 애플리케이션 리소스 (WAR 프로젝트)
└── test/
    ├── java/          → 테스트 코드
    └── resources/     → 테스트용 리소스
target/                → 빌드 결과물 (class 파일, JAR 등)
pom.xml                → 프로젝트 설정 파일


저장소 (Repository)

Maven은 의존성과 아티팩트를 저장하는 세 가지 유형의 저장소를 사용합니다:

  • 로컬 저장소(Local Repository): 개발자의 머신에 위치 (~/.m2/repository)
  • 중앙 저장소(Central Repository): 공개된 라이브러리 저장소 (https://repo.maven.apache.org)
  • 원격 저장소(Remote Repository): 기업 내부 또는 커스텀 저장소 (예: Nexus, Artifactory)

의존성 해결 시 Maven은 로컬 → 원격 → 중앙 저장소 순으로 탐색합니다.


활용 사례

  • 대규모 자바 프로젝트에서의 의존성 버전 충돌 방지
  • CI/CD 파이프라인에서의 자동 빌드 및 배포
  • 다중 모듈 프로젝트 관리 (multi-module project)
  • 문서 생성 및 코드 품질 분석 통합

참고 자료 및 관련 문서

Maven은 여전히 많은 기업과 오픈소스 프로젝트에서 핵심 빌드 도구로 사용되며, Gradle과 함께 현대 자바 개발의 기반을 이루고 있습니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?