tools & libs/빌드툴(maven,gradle)

[maven] maven 활용 메뉴얼 1

  • -
반응형

이번 포스트에서는 maven을 이용한 프로젝트 관리에 대해서 살펴본다.

Maven이란?

Maven은 아파치 재단에서 관리하는 소프트웨어 프로젝트 관리 도구로 POM 개념을 기반으로한다. 여기서 POM(Project Object Model: 프로젝트 객체 모델)이란 프로젝트의 구성요소, 빌드 설정, 의존성 관리 등을 XML 파일 형태(pom.xml)로 정의하며 이를 통해 프로젝트 컴파일, 테스트 실행 시 필요한 라이브러리 및 플러그인을 관리하는 것을 이야기 한다.

Maven을 이용해 프로젝트를 생성하면 POM 기반으로 동작하기 때문에 프로젝트의 구조를 강제해서 여러 개발 환경(OS, IDE 등)에서 동일한 개발 환경을 구축할 수 있다. 이는 프로젝트의 이식성과 호환성 향상에 큰 도움이 된다.

추가적으로 Maven은 다음과 같은 이점을 제공한다.

  • Maven Central Repository: 방대한 라이브러리 저장소를 통해 필요한 의존성을 쉽게 찾아 사용할 수 있다. 이를 통해 프로젝트 설정 시간을 대폭 줄여주며 의존성 관리를 간소화 한다.
  • 빌드 생명 주기 관리: 표준화된 빌드 생명주기를 제공하여 개발자가 빌드 프로세스를 명확히 이해하고 관리할 수 있게 한다. 

 

프로젝트 구조

다음은 maven 기반의 프로젝트를 생성했을 때 기본적으로 구성되는 구조이다.  프로젝트들이 공통적으로 이런 구조를 가진다면 어떤 IDE를 사용하든 통일된 환경에서 작업이 가능하다. 이 구조들은 권장되는 것이고 필요에 따라 변경할 수도 있다.

경로 설명
src/main/java Application/Library sources
src/main/resources Application/Library resources
src/main/filters Resource filter files
src/main/webapp Web application sources
src/test/java Test sources
src/test/resources Test resources
src/test/filters Test resource filter files
src/it Integration Tests (primarily for plugins)
src/assembly Assembly descriptors
src/site Site
LICENSE.txt Project's license
NOTICE.txt Notices and attributions required by libraries that the project depends on
README.txt Project's readme

[출처: https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html]

 

pom.xml과 의존성 관리

프로젝트를 하다 보면 프로젝트의 구성에 대해서 공유하면서 싱크를 맞춰야 할 정보들이 많다. 이런 정보들이 필요할 때마다 매번 물어가며 프로젝트를 진행하기는 너무 힘들다. 

POM 기반의 maven은 pom.xml 파일프로젝트에서 필요한 모든 내용을 담는다. 따라서 pom.xml만 배포되면 어떤 프로젝트를 어떤 플랫폼에서 어떤 IDE로 하더라도 동일한 환경이 된다.

다음은 스프링 부트에서 사용되는 pom.xml 파일의 예이다.

 

의존성(라이브러리) 관리

그럼 Maven은 어떤 방식으로 프로젝트에서 필요한 라이브러리를 관리하고 배포해주는 것일까?

Maven은 중앙 저장소(Central Repository: https://repo.maven.apache.org/maven2/)라는 곳에 관리하는 라이브러리들에 대한 정보가 등록돼 있다. 저장소에 등록된 라이브러리들은 group id, artifact id, version 등의 정보가 함께 저장되는데 각각 다음의 의미를 갖는다.

  • group id: 프로젝트를 생성하는 조직을 구분할 수 있는 구분자로 일반적으로 java의 package naming rule을 따라 도메인을 거꾸로 사용한다.
  • artifactid: 프로젝트의 이름으로 일반적으로 배포될 때 사용되는 jar 파일에서 version 정보가 빠진 내용이다.
  • version: '.'로 구분되는 버전 정보 (1.0, 2.0.1, ...)로 메이저.마이너.패치 버전을 의미한다.

Central Repository에 있는 라이브러리를 편리하게 검색하는 서비스를 제공하는 사이트들이 여럿 있는데 그중 대표적인 곳으로 https://mvnrepository.com이 있다.

라이브러리 검색 서비스를 제공하는 mvnrepository.com

위 사이트에서 필요한 라이브러리를 검색하면 아래와 같은 xml 태그를 얻을 수 있는데 이 정보를 pom.xml의 <dependencies>에 추가해주면 중앙 저장소에 저장되어있는 라이브러리를 다운로드 해서 로컬 레포지터리에 저장하고 사용할 수 있게 해준다.

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>
반응형

'tools & libs > 빌드툴(maven,gradle)' 카테고리의 다른 글

[maven] maven 활용 메뉴얼 3  (0) 2022.04.12
[maven] maven 활용 메뉴얼 2  (0) 2022.04.12
[maven]서버에 배포하기  (0) 2021.08.22
[gradle]build.gradle  (0) 2021.01.30
[gradle]gradle을 위한 살짝 Groovy  (0) 2021.01.30
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.