본문 바로가기
Data Engineering/메이븐

Maven 뽀개기 1 - Maven이란? Maven 설치

by 무언가 하는 소소 2022. 8. 23.
728x90
반응형

 

 

Java로 개발하려면 세 가지 방법이 있다. 1) vim과 JDK만으로 하거나, 2) eclipse, intelij 같은 IDE를 사용하거나, 3) 빌드 툴을 사용하거나. 1)은 취향이 확고한 사람 외에는 없을 거라 생각이 된다. 2)는 정말 편하다. 하지만 IDE에 의존성이 생겨서 다른 IDE를 써야할 때 난감하다. 그래서 회사에서는 거의 대부분 Maven, Gradle과 같은 빌드 툴을 이용한다. 이 글에서는 자바의 대표적 빌드 툴인 메이븐에 대해 다룬다. 

참고로 https://www.tutorialspoint.com/maven/index.htm, https://maven.apache.org/index.html 두 사이트에서 많은 도움을 받았다. 영어가 괜찮은 분들은 정독해보면 좋을 것 같다.

 

1. 빌드 툴 (build tool)이란?

빌드는 소스코드를 실행가능한 파일로 만들어주는 과정이다. 하지만 메이븐과 같은 빌드 툴은 단순 빌드 기능만 제공하는 것이 아니라 디펜던시 관리, 리포트, 버전 관리, 배포 등의 작업을 도와준다. 한마디로 프로젝트를 관리해주는 프레임워크이다. 

 

 

2. Maven 이란?

메이븐은 자바의 대표적인 빌드 툴로 앞서 말했 듯이 빌드, 디펜던시 관리, 버전 관리, 리포팅 등의 기능을 제공한다. 빌드 프로세스를 단순화하고 스탠더라이즈 하는 것에 초점을 둔다. 

 

 

3. Maven 설치

다른 프로그램과 마찬가지로 바이너리 파일을 다운받아 환경변수를 설정하는 방법이 있고, 명령어로 설치하는 방법이 있다. 여기서는 간단하게 명령어를 사용해서 설치하는 것만 다룬다. 

#for Ubuntu
apt-get install maven
#for Mac
brew install maven
#설치 확인
mvn version

 

 

4. Maven 라이프사이클

메이븐은 여러 단계로 나누어 빌드를 진행한다. 이때 이 순서를 포함한 빌드 과정을 라이프 사이클(life cycle), 각 단계를 페이즈(phase)라고 한다. 메이븐의 라이프 사이클에는 디폴트, 클린, 사이트(default, clena, site)가 있다. 아래에 각 라이프 사이클을 설명해 놓았는데 각 사이클은 아주 많은 페이즈로 나뉜다. 더 자세히 알고 싶으면 위에 올린 링크를 참고 바란다. 

 

1) 디폴트 (default)

메이븐의 메인 라이프 사이클로 리소스 준비-검증-컴파일-테스트-패키지-인스톨-디플로이 (resource-validation-compile-test-package-install-deploy)의 페이즈로 이루어져있다. 패키지 페이즈는 JAR/WAR 패키지를 만드는 단계이다. 인스톨 페이즈는 패키지를 로컬 레포지토리에 설치하는 단계이고 디플로이는 최종 패키지를 리모트 레포지토리(원격 저장소)에 저장하는 단계이다.

 

2) 클린 (clean)

메이븐 빌드 중 생성된 파일을 삭제하는 라이프사이클 이다.

 

3) 사이트 (site)

프로젝트에 대한 사이트, 문서를 생성하는 단계이다.

 

 

5. Maven 리포지토리

메이븐 리포지토리는 메이븐이 사용할 수 있는 프로젝트, 라이브러리 jar 파일, 플러그인 등이 있는 디렉토리이다. 메이븐 리포지토리에는 local, central, remote 세종류가 있다.

 

1) 로컬 (local repository)

로컬 리포지토리는 사용자의 호스트에 있는 디렉토리를 의미한다. 메이븐을 처음 실행할 시에 생성된다. 메이븐은 빌드를 하면서 필요한 라이브러리를 모두 다운받아 로컬 리포지토리에 저장한다. 따라서 빌드마다 리모트 리포지토리에 있는 라이브러리를 참조해야할 일이 없어서 오버헤드를 줄여준다. 메이븐의 로컬 리포지토리는 보통 $USER_HOME에 생성된다. 메이븐의 컨피겨레이션 파일을 수정하면 로컬 리포지토리 경로를 바꿀 수 있다. 

 

2) 센트럴 (central repository)

센트럴 리포지토리는 메이븐 커뮤니티에 의해 운영되는리레포지토리이다. 흔히 사용되는 라이브러리들을 보유하고 있다. 빌드를 할 때 로컬 리포지토리에 찾는 라이브러리가 없으면 센트럴 리포지토리에서 찾는다. https://search.maven.org/#browse 에서 이용 가능한 라이브러리를 검색할 수 있다. 

 

3) 리모트 (remote repository)

만약 센트럴 리포지토리에도 찾는 라이브러리가 없으면 메이븐은 빌드를 멈추고 에러를 띄운다. 이런 경우를 방지하기 위해 메이븐에서는 리모트 리포지토리를 제공하는데 이는 사용자가 pom.xml 파일에 직접 정의하는 리포지토리이다.  아래와 같이 pom.xml 파일에 리포지토리를 추가해주면 된다. 

<repositories>
    <repository>
        <id>레포지토리아이디</id>
        <url>레포지토리주소</url>
    </repository>
    .
    .
    .
</repositories>

 

4) 탐색 순서

당연한 얘기겠지만 로컬-센트럴-리모트 순대로 찾는다. 만약 로컬에 없고 센트럴이나 리모트에 있다면 로컬에 다운받는다.

 

 

6. Maven과 POM (Project Object Model)

메이븐을 위한 모든 설정은 프로젝트의 베이스 디렉토리에 pom.xml에 적으면 된다. 해당 내용에 대해서는 추후 글에서 자세히 다룰 예정이다. 

 

 

다음편

 2022.08.24 - [Data Engineering/Maven] - Maven 뽀개기 2 - 간단한 실습

 

Maven 뽀개기 2 - 간단한 실습

전편 링크 2022.08.20 - [Data Engineering/Maven] - Maven 뽀개기 1 - Maven이란? Maven 설치 아직 다루지 않은 내용이 많지만 일단 실습부터 해보면 훨씬 감이 더 잘 올 것 같아서 실습을 먼저 넣었다. 이론을..

dogfootja.tistory.com

728x90
반응형

'Data Engineering > 메이븐' 카테고리의 다른 글

Maven 뽀개기 4 - Maven Goals, Maven Plugins  (0) 2022.08.27
Maven 뽀개기 3 - POM  (0) 2022.08.26
Maven 뽀개기 2 - 간단한 실습  (0) 2022.08.24

댓글