들어가며
당근시장 프로젝트를 진행하면서 Dynamic Web Project로 프로젝트를 작성하는 것과 Maven으로 프로젝트를 작성하는 것이 얼마나 다른 지 의문점이 생겼다. 그러면서 Maven에 대한 개념과 그 둘의 차이점에 대해 알아보려고 한다.
Maven이란?
- Maven은 지금까지 애플리케이션을 개발하기 위해 반복적으로 진행해왔던 작업들을 지원하기 위하여 등장한 도구
- Maven을 사용하면 빌드(Build), 패키징, 문서화, 테스트와 테스트 리포팅, git, 의존성관리, svn등과 같은 형상관리서버와 연동(SCMs), 배포 등의 작업을 손쉽게 할 수 있다.
- Maven은 자바용 프로젝트 관리도구이다.
- Maven을 사용한다는 것은 어쩌면 이러한 관습 즉 CoC에 대해서 알아나가는 것이라고도 할 수 있다.
* CoC(Convention over Configuration)란 일종의 관습을 말하는데, 예를 들자면 프로그램의 소스파일은 어떤 위치에 있어야 하고, 소스가 컴파일된 파일들은 어떤 위치에 있어야 하고 등을 미리 정해놨다는 것입니다.
Maven을 사용할 때 장점
- 가장 큰 장점 : 편리한 의존성 라이브러리 관리
- JSTL을 학습할 때, 몇 가지 파일을 다운로드 하여 /WEB-INF/lib폴더에 복사하여 사용했다. 이렇게 관련된 라이브러리가 많아질수록 이러한 방식은 상당히 불편해진다.
- Maven을 사용하면 설정 파일에 적어줌으로써 직접 다운로드 받지 않아도 라이브러리를 사용할 수 있다.
- Maven에 설정한 대로 모든 개발자가 일관된 방식으로 빌드를 수행
- 개발자가 많을수록 프로젝트를 빌드하는 방법에 대해 가이드하는 것도 쉽지 않기 때문에
Maven 디렉터리 구조
- WEB-INF폴더 :
- web.xml파일 : 배포 기술자(DeploymentDescriptor). 웹 어플리케이션에 대한 정보들을 다 가지고 있는 파일. Servlet 3.0 미만에서는 필수, 3.0 이상에서는 어노테이션을 사용
- lib폴더 : library의 약자, 각종 자료 파일들을 넣는 곳
- classes 폴더 : java 패키지들, 실제 class들이 있는 곳, 내가 작성한 서블릿 파일들
- 내가 원하는 각종 폴더 : 프론트엔드에서 작성했던 파일들, 이미지 등 다양한 리소스 들
소스 디렉터리
- main : (기본 디렉토리)소스 코드용이며 아래에는 java, resources, webapps 등과 같은 더 많은 디렉토리가 있다.
- test : (테스트 디렉토리) 테스트 코드용이다.
- java : 모든 자바 코드와 패키지를 포함
- resources : 프로젝트에 필요한 다른 리소스가 포함되어있다. 예를 들면 응용 프로그램의 국제화에 사용되는 속성 파일 등
- webapp : 웹 응용 프로그램의 경우 디렉토리, 자바 웹 응용 프로그램이 포함되어 있다.
대상 디렉터리
- target : Maven에 의해 생성. Maven에서 생성 한 모든 컴파일 된 클래스, JAR 파일 등을 포함한다. 정리 빌드 단계를 실행할 때 정리되는 디렉토리이다.
pom.xml 파일
pom : Project Object Model의 약어
pom.xml을 보면 해당 프로젝트의 모든 설정, 의존성 등을 알 수 있다.
태그의 의미
- project : pom.xml 파일의 최상위 루트 엘리먼트(Root Element).
- modelVersion : POM model의 버전.
- groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정. 일반적으로 도메인 이름을 거꾸로 적습니다.
- artifactId : 해당 프로젝트에 의하여 생성되는 artifact의 고유 아이디를 결정. Maven을 이용하여 pom.xml을 빌드할 경우 다음과 같은 규칙으로 artifact가 생성. artifactid-version.packaging. 위 예의 경우 빌드할 경우 examples-1.0-SNAPSHOT.jar 파일이 생성.
- packaging : 해당 프로젝트를 어떤 형태로 packaging 할 것인지 결정. jar, war, ear 등
- version : 프로젝트의 현재 버전. 프로젝트가 개발 중일 때는 SNAPSHOT을 접미사로 사용. Maven의 버전 관리 기능은 라이브러리 관리를 편하게 한다.
- name : 프로젝트의 이름.
- url : 프로젝트 사이트가 있다면 사이트 URL을 등록하는 것이 가능.
pom.xml 예시 소스코드
1 |
|
Dynamic Web Project
- 동적 웹 프로젝트
- PHP, JSP, ASP, Servlet 등과 같은 파일들을 만드는 프로젝트이다.
Maven과 Dynamic Web Project
- Maven은 많은 개발자들이 모여 프로젝트를 만들 때 좀더 편리하게 개발하기 위한 프로젝트 관리도구, 관습인 것이다.
- Dynamic Web Project는 동적인 웹을 만들기 위한 프로젝트이다.
- Static Web Project는 정적인 웹을 만들기 위한 프로젝트