[DEV] 기록

[Spring] Maven 정리

꾸준함. 2021. 3. 3. 23:42

Maven이란?

Maven은 프로젝트 관리 도구입니다. (비슷한 관리 도구로는 gradle이 있습니다.)

Maven은 보통 build 및 dependency 관리 용도로 많이 쓰입니다.

 

Maven과 같은 프로젝트 관리 도구가 필요한 이유

자바 프로젝트를 빌드할 때 jar 파일을 추가해야 하는 경우가 종종 발생합니다.

이때, 프로젝트 관리 도구를 사용하지 않을 경우 필요한 jar 파일들을 웹사이트에서 하나하나 다운로드를 한 뒤 수동으로 classpath와 build path에 추가해줘야하합니다.

 

다행히도 Maven을 사용한다면 Maven이 jar 파일들을 대신 다운로드하여주므로 이런 귀찮은 프로세스를 생략할 수 있습니다.

 

* Maven 프로젝트 내 pom.xml 파일에 필요한 dependency를 추가해주면 컴파일 타임/런타임에 jar 파일들을 추가해줍니다.

 

Maven이 동작하는 과정 (사진 한장으로 요약)

Maven Local Repository

본인 컴퓨터에 위치한 레포지토리입니다.

윈도우 기준 디폴트 위치: C:\사용자\<사용자의 홈 디렉토리>\.m2\repository

Mac과 Linux 기준 디폴트 위치: ~/. m2/.repository 

 

Maven은 빌드 시 우선 프로젝트에 필요한 jar 파일이 로컬 레포지토리에 있는지 확인합니다.

만약 로컬 레포지토리에 존재하지 않는다면 Maven Central Repository로부터 다운로드하고 로컬 레포지토리에 저장합니다.

 

Maven Central Repository

로컬 레포지토리에 jar 파일이 없다면 원격 레포지토리인 Maven Central Repository로부터 다운로드합니다.

(https://repo.maven.apache.org/maven2/)

 

원격 레포지토리로부터 다운로드를 하는 것이기 때문에 인터넷이 연결되어있어야 합니다.

 

Maven Private Repository

실제 배포된 서비스의 경우 보안을 위해 내부 레포지토리를 따로 구축하는 경우가 있습니다.

주로 사용되는 private repository로는 Nexus가 있습니다.

 

Maven 표준 디렉토리 구조

src/main/java: 자바 소스코드가 저장되는 디렉토리

src/main/resources: properties와 config 파일이 저장되는 디렉토리

src/main/webapp: 웹 config 파일들, 그리고 html, css, js와 같은 웹 관련 파일들이 저장되는 디렉토리

src/test: unit 테스트 코드와 properties 파일들이 저장되는 디렉토리

target: 컴파일된 코드들이 저장되는 디렉토리 (Maven에 의해 자동 생성)

pom.xml: 밑에 설명 예정

 

* 대부분의 IDE들이 Maven 표준 디렉토리 구조를 지원하기 때문에 협업할 때 상당히 유리합니다.

 

POM 파일 (pom.xml)

POM 파일은 프로젝트 구성 파일이며 Project Object Model 파일의 약자입니다.

pom 파일은 Maven 프로젝트 root에 위치하고 있습니다. 

 

POM 파일 구조

project meta data: 프로젝트명, 버전에 관한 내용 및 output 파일 타입 지정 ex) JAR, WAR

dependencies: spring, hibernate와 같이 프로젝트에 필요한 depdency들

plugins: 실행할 커스텀 task들 ex) JUnit 테스트 리포트 생성

 

POM 파일 내 주요 태그의 역할

groupId: 보통 기업, 그룹 혹은 조직의 이름으로 지정하며 통상적으로 역순으로 지정합니다. 예를 들자면, 조직명이 jaimemin.tistory.com이라면 groupId는 com.tistory.jaimemin으로 지정합니다.

 

artifactId: 프로젝트명

 

version: 1.0, 1.6, 2.0과 같이 릴리즈 버전 지정 (만약 개발계에 배포를 한다면 1.0-SNAPSHOT과 같이 지정)

 

* 외국계에서는 groupId, artifactId, version을 묶어 GAV라고 부른다고도 합니다.

 

packaging: output 파일 타입 지정 ex) JAR, WAR

 

properties: 인코딩 타입, 자바 버전과 같은 설정 관련

 

dependency: 프로젝트에 필요한 jar 파일 (http://search.maven.org에서 검색)

 

Maven Archetypes

Eclipse에서 Maven 프로젝트를 생성할 때 아래와 같이 archetype을 지정하라고 합니다.

 

Archetype은 Maven 프로젝트를 위한 템플릿 파일들을 가지고 있으며 소위 "스타터 팩"이라고 생각하시면 됩니다.

웹서비스를 개발할 때는 보통 "maven-archetype-webapp" archetype을 지정해주시면 됩니다.

 

[출처]

udemy 강의

 

반응형