1. pom. xml
pom.xml이란 Maven의 빌드 정보를 담고 있는 파일이다. pom(project object model)을 설정하는 부분으로 프로젝트 내 블디 옵션을 설정하는 부분이다. 다른 프로젝트에도 복사 붙여넣기를 하면 되기 때문에 범용성과 협업할 때 버전관리에 용의하다. 프로젝트의 세부 메타데이터 정보를 포함한다.
1-1. pom.xml 태그의 설명과 분석
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
</project>
<project> : Maven의 XML 네임스페이스를 지정
<modelVersion> : Maven의 model Version
<groupId> : 그룹 ID태그
<artifactId> : 아티팩트ID 태그
<version> : 버전명 태그
<packaging> 패키징 형식을 지정하는 태그
<name> : 프로젝트의 이름
<url> : Maven의 url
<properties> : 프로젝트 관련 속성
<parent> : pom.xml의 상속에 관련된 태그
<dependencies> : 프로젝트가 의존하는 라이브러리들의 정보
Spring framework 라이브러리의 의존성 주입이 된 프로젝트의 Maven Dependencies를 확인해 보면 spring-webmvc는 spring-core, spring-context, spring-web, spring-aop, spring-beans, spring-expression에 대한 의존성이 포함되기 때문에 이러한 의존 라이브러리들이 자동으로 포함되어진 것을 볼 수 있다. 라이브러리는 C:\Documents and Settings\Administrator\.m2\repository 경로에 확인 가능하다.
즉 POM.xml 파일에 라이브러리 A, B를 명시에 놓으면 원격 Repository에 있는 라이브러리가 내 컴퓨터로 다운되어 프로젝트에 해당 라이브러리를 쉽게 사용할 수 있도록 하는 역할을 한다.
2. Maven
프로젝트를 진행하게 되면 단순히 자신이 작성한 코드만으로 개발하는 것이 아니라 많은 라이브러리들을 활용해서 개발한다. 이때 라이브러리들의 수가 수십개가 넘는 일이 발생하곤 하는데, 라이브러리들이 많아지면 관리가 힘들어지게 된다. 이때 필요한게 Maven이다.
Maven은 내가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해서 자동으로 다운받아 준다.
필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 네트워크를 통해서 라이브러리들을 자동으로 다운ㅂ다아 준다. 따라서 Maven을 사용하면 jar 파일을 공유하고 카톡으로 보내는 등의 행동을 할 필요 없이 pom.xml에 필요한 것을 명시해 놓으면 라이브러리를 아주 쉽게 관리할 수 있다.
Maven은 프로젝트 전체적인 라이프 사이클을 관리하는 도구이며 최근에는 Maven과 같은 라이브러리 관리 프로그램인 Gradle이 많이 사용되고 있다.
2-1. Maven의 장단점
장점 | 단점 |
컴파일과 빌드 동시 수행 가능 | 지원하지 않는 빌드 과정을 추가해야하는 경우 상당한 고생이 발생 |
서버의 deploy 자원을 관리할 수 있는 환경을 제공한다. | 특정 플러그인의 경우 설정이 약간만 달라도 해당 설정을 분리해서 중복 기술할 떄가 발생한다. 불필요하게 설정이 길어지고 중복, 가독성 저하가 발생하여 유지보수성을 떨어뜨린다. |
pom.xml 파일을 통해 관리하므로 개발, 유지보수 측면에서 오픈소스 라이브러리, 프로젝트 등 관리가 용이하다. | 이와 같은 단점을 해결하기 위해 Gradle(그레이들) 이라는 새로운 빌드 툴이 등장하였다. Gradle은 안드로이드 애플리케이션의 기본 빌드 툴로 채택되었다. |
IDE에 종속된 부분들을 제거할 수 있다. | |
Maven Profile 기능을 통해 배포 설정 파일을 관리하고 배포 파일을 생성할 수 있다. |
'program > Java, Spring' 카테고리의 다른 글
[Spring boot] Spring boot 라이브러리 (0) | 2023.07.05 |
---|---|
[Spring boot] Spring boot 프로젝트 간편하게 만들기(start.spring.io) (0) | 2023.07.05 |
Java에서 Collection이란? Map이란? (0) | 2022.05.14 |
[Spring] @Configuration 안에 @Bean을 사용해야 하는 이유, proxyBeanMethods - (2/2) (0) | 2022.04.26 |
[Spring] 빈 등록을 위한 어노테이션 @Bean, @Configuration, @Component 차이 및 비교 - (1/2) (0) | 2022.04.26 |