2019. 3. 5. 17:01ㆍJAVA Back-End
이전에 JSTL을 이용하기 전에 JSTL관련 라이브러리를 다운받아 웹 프로젝트의 WEB-INF/lib폴더에 복사해 사용했었습니다. 프로젝트가 커질수록 의존(사용)하는 라이브러리가 많아지고 복잡해집니다...
프로젝트에 참여하는 개발자가 많아지면 라이브러리 관리가 더 어려워지고, 프로젝트가 복잡해질수록 소스코드를 컴파일하고 배포하기도 어려워집니다.이러한 문제점들을 해결하기 위해서 다양한 도구가 존재하는데 Maven에 대해서 알아보겠습니다. 추후 성능면에서 뛰어난 Gradle에 대해서 정리해보겠습니다 :)
Maven?
Maven은 애플리케이션을 개발하기 위해 반복적으로 진행해왔던 작업들을 지원하기 위해서 등장한 소프트웨어 프로젝트 관리 및 이해 도구입니다.
CoC (Convention over Configuration)
소스코드 : ${basedir}/src/main/java
리소스 : ${basedir}/src/main/resources
테스트 코드 : ${basedir}/src/test
컴파일 시 : ${basedir}/target/classes 에 바이트 코드가 생성
배포할 수 있는 .jar 파일 : ${basedir}/target에 생성될 것을 가정
Maven을 사용한다는 건 CoC를 알아가는 것이라고 보면 좋겠습니다.
Maven을 사용해서 좋은 점?
- 편리한 의존성 라이브러리 관리 (dependency)
JSTL을 사용하기 전 .jar 파일들을 다운받아 내 프로젝트의 /WEB-INF/lib 폴더에 복사해 사용했었습니다.
하지만 프로젝트가 커지고 외부 라이브러리를 몇 백개 사용할 때마다 이런 방식은 상당히 불편합니다...
Maven을 사용하면 설정 파일에 몇 줄 적음으로써 직접 다운받지 않아도 라이브러리를 사용할 수 있습니다!
- 프로젝트 빌드(Build) 방법 가이드
큰 프로젝트에 참여하는 개발자가 많아지면, 프로젝트 빌드 방법에 대해 가이드하는 것도 상당한 힘이 들어갑니다.
Maven같은 빌드 도구를 사용하면 Maven 설정 대로 모든 개발자가 일괄된 방식으로 빌드 수행이 가능해집니다.
- 다양한 플러그인을 제공해줘, 많은 일들을 자동화시킬 수 있습니다.
Maven 기본
태그의 의미
- project : pom.xml 파일의 최상위 root Element입니다.
- modelVersion : pom 모델의 버전입니다.
- groupId : 프로젝트를 생성하는 조직의 고유아이디. 일반적으로 도메인 이름을 거꾸로 적습니다.
- artifactId : 해당 프로젝트에 의해 생성되는 artifacti의 고유 아이디를 결정합니다. Maven을 이용해 pom.xml을 빌드할 경우 다음과 같은 규칙으로 artifact가 생성됩니다. artifactid-version.packaging. 위 예의 경우 빌드할 경우 mysamexamples-1.0-SNAPSHOT.jar파일이 생성됩니다.
- packaging : 해당 프로젝트를 어떤 형태로 패키징 할 지 결정합니다. jar / war / ear 등이 해당됩니다.
- version : 프로젝트의 현재 버전. 프로젝트가 개발 중일 땐 SNAPSHOT을 접미사로 사용합니다. Maven의 버전 관리 기능은 라이브러리 관리를 편하게 합니다
- name : 프로젝트 이름.
- url : 프로젝트 사이트가 있다면 사이트 URL을 등록할 수 있습니다.
<참고>
https://julingks.tistory.com/entry/Maven-CoCConvention-over-Configuration [My Tech Notes]
[ edwith - 웹프로그래밍 부스트코스 ] 를 개인적으로 공부하고 정리한 공간입니다. 잘못된 부분은 피드백 주시면 감사하겠습니다
'JAVA Back-End' 카테고리의 다른 글
[JDBC] MySQL에서 JDBC 사용 (0) | 2019.03.09 |
---|---|
[JDBC] JDBC (Java Database Connectivity) (1) | 2019.03.06 |
[JSP/Servlet] JSTL (JSP Standard Tag Library) (0) | 2019.03.02 |
[JSP/Servlet] EL(Expression Language) (0) | 2019.03.01 |
[JSP/Servlet] 스코프(Scope) (0) | 2019.02.27 |