본문 바로가기

Dev. Etc/knowledge

[메이븐] Maven은 무엇일까?

Spring 프레임워크 공부를 하면서 프로젝트를 진행하려하다 보니 Maven 프로젝트에 추가를 해주어야 했습니다.

처음 메이븐을 접하게 되었기에, 제가 알아보고 공부한 내용을 포스팅 하려합니다.


메이븐(Maven)이란 무엇일까?

Java기반 프로젝트의 *라이프사이클 관리를 목적으로 하는 빌드 도구이다. 컴파일과 빌드를 동시에 수행, 테스트를 병행하거나 서버 측 Deploy 자원을 관리할 수 있는 환경을 제공한다. 또한 라이브러리 관리 기능도 내포하고 있다. Java로 개발하다 보면 다양한 라이브러리를 필요로 하게 되는데, *pom.xml 파일에 필요한 라이브러리만 적으면 Maven이 알아서 다운받고 설치해주고 경로까지 지정해준다.

 

프로젝트를 진행하다 보면 라이브러리들을 많이 활용하게 됩니다. 점점 많아지는 라이브러리들을 일일히 관리하기 힘들어집니다. 하지만 Maven을 이용하게 된다면 코드 몇줄로 필요한 라이브러리를 작동시키고 그 라이브러리가 필요로 하는 다른 라이브러리(의존 라이브러리)들까지 자동으로 관리해줍니다. 

 

* Life cycle      : 논리적인 작업 흐름

* pom.xml       : Project Object Model, 메이븐이 프로젝트를 처리하는 필요한 정보를 제공하는 파일

* Artifact         : 프로젝트에 필요한 jar, war, pom 등등

* Deploy         : 아티페그를 로컬 저장소에 저장하는 행위

 

만약에 여러명의 개발자가 하나의 프로젝트를 진행중이라면 라이브러리를 사용하는 일이 다수 발생하게 됩니다.

이럴경우, 개발자들끼리 어떤 라이브러리를 사용했는지 쉽게 알수있도록 사용하는 빌드 도구중 하나가 메이븐입니다.

즉, 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 네트워크를 통해서 라이브러리들을 자동으로 다운받아줍니다. 

 

 

 


 

 

예시 코드)

 

08행 : 프로젝트의 식별자를 지정합니다. 

12~16행 : 프로젝트에서 5.0.5.RELEASE 버전의 spring-context 모듈을 사용한다고 설정합니다.

21~29행 : 1.8버전을 기준으로 자바 소스를 컴파일하고 결과 클래스를 생성합니다.

자바 컴파일러가 소스 코드를 읽을 때 사용할 인코딩은 UTF-8로 설정합니다.

 

 

메이븐은 한 개의 모듈을 아티팩트라는 단위로 관리합니다.

11~17행에서 5.0.5.RELEASE버전의 아티팩트에 대한 의존을 추가한 것입니다.

이 설정은 메이븐 프로젝트의 소스 코드를 컴파일하고 실행할 때 사용할 클래스 패스에 spring-context-5.0.2.RELEASE.jar 파일을 추가 한다는 것을 의미합니다.

하지만, spring-context-5.0.2.RELEASE.jar 파일을 어디서도 다운로드 하지 않았습니다.

원격 리포지토리와 로컬 리포지토리를 이용하여 파일이 다운로드 되고, 사용됩니다.

 

 

만약 위 파일을 다운로드 받았다면, C:/사용자/.m2/repository/org/springframework/spring-context/5.0.2.RELEASE가

존재할 것입니다.

 

해당 파일이 없다면, 아래와 같이 명령 프롬프트로 이동한 뒤, 위 파일이 있는 경로로 이동하여 메이븐을 컴파일 해줍니다.

(메이븐이 설치되어있어야 가능합니다.)

위 사진에서 보이는대로 메이븐 명령어(mvn compile)를 사용하면 필요한 파일을 인터넷에서 다운로드 합니다.

인터넷이 연결 되어 있지 않다면 올바르게 동작하지 않습니다.

위 빨간 박스를 보면 http://repo.maven.apache.org사이트에서 spring-context-5.0.2.RELEASE.jar 파일을 다운로드 한것을 알 수 있습니다. (원격 리포지토리)

 

이제 C:/사용자/.m2/repository/org/springframework/spring-context/5.0.2.RELEASE에 보면 jar파일이 생성된 것을 확인할 수 있습니다. (로컬 리포지토리)

 

로컬 리포지토리에 아티팩트 파일을 다운로드하면, 이후에는 원격 리포지토리에서 다운로드 하지 않습니다.

 

 


 

 

 

 

Ref 

* 스프링 5 프로그래밍 입문 서적 : 최범균 

* https://monny.tistory.com/129