1. Maven
Maven
CoC
pom.xml
Maven?
Maven은 애플리케이션을 개발하기 위해 반복적으로 진행해왔던 작업들을 지원하기 위해 등장한 도구입니다.
Maven을 사용하면 빌드(Build), 패키징, 문서화, 테스트와 테스트 리포팅, git, 의존성관리, svn등과 같은 형상관리서버와 연동(SCMs), 배포 등의 작업을 손쉽게 할 수 있습니다.
CoC?
CoC(Convention over Configuration)이란 일종의 관습을 말하는데, 예를 들면 프로그램의 소스파일의 위치, 컴파일된 파일들의 위치를 미리 정해놓을 것을 말합니다.
Maven 장점
- 편리성 향상
의존성 라이브러리 제공
설정 파일을 약간 수정하여 직접 다운로드받는 작업 없이 새로운 라이브러리를 사용할 수 있습니다.
다양한 개발자가 일관된 방식으로 빌드를 수행할 수 있게 돕습니다.
다양한 플러그인을 제공하여 많은 일을 자동화할 수 있습니다.
Maven 기본
Archetype을 이용하여 Maven기반 프로젝트 생성 시, 생성프로젝트 하위에 pom.xml 파일이 생성됩니다.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>kr.or.connect</groupId>
<artifactId>examples</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>mysample</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
project : pom.xml 파일의 최상위 루트 엘리먼트
modelVersion : POM model 버전
groupId : 프로젝트를 생성하는 조직 고유 아이디를 결정합니다. 보통 도메인 이름을 거꾸로 적습니다.
artifactId : 프로젝트에서 생성되는 artifact의 고유 아이디를 결정합니다. artifactId-version.packaging 규칙으로 생성됩니다. 위 파일의 경우 빌드 시, examples-1.0-SANPSHOT.jar 파일이 생성 됩니다.
packaging : 어떤 형태로 프로젝트를 패키징할 것인지 결정합니다. (jar, war, ear 등)
version : 프로젝트 현재 버전을 의미하고, 개발 중일 때는 SNAPSHOT을 접미사로 사용합니다.
name : 프로젝트 이름
url : 프로젝트 사이트가 있을 때, 그 사이트의 URL
dependencies : Maven의 큰 이점은 Denpendency Managemnet 기능입니다. pom.xml 파일에서 이 부분이 가장 핵심적이며, 이 엘리먼트안에 필요한 라이브러리를 저장합니다.
2. Maven 이용한 웹 애플리케이션 실습
메이븐 프로젝트에서 웹 어플리케이션을 실행해봅니다.
pom.xml
project facet
project properties menu
eclipse >
File > New > Project
Maven > Maven Project > next 버튼
workspace location 설정 > next 버튼
아키타입(Archetype) 선택 - maven-archetypewebapp > next 버튼
아키타입은 프로젝트 템플릿(template)으로, 자동으로 파일을 생성하거나 라이브러리를 세팅하는 등의 일을 도와줍니다.
finish 버튼
프로젝트 선택 > 우측버튼 properties 선택 > Java Compiler메뉴
에서 JDK 1.5버전 사용확인한다는 것을 알 수 있습니다. JDK8 사용하도록 하려면 pom.xml파일을 수정해야 합니다.
pom.xml 에 다음을 추가합니다.
<build>
<finalName>mavenweb</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
mavenweb 프로젝트 우클릭 > properties > Maven > Java EE Integration > Enable Project Specific Settings 체크박스 선택 > Apply and Close
이것으로 JDK 1.8 이 사용되게 하였습니다.
webapp 폴더 > index.jsp
HttpServlet을 찾을 수 없다는 오류메시지가 보입니다.
WAS 런타임 지정을 안했기 때문에 서블릿 라이브러리를 찾을 수 없습니다.
pom.wml 의 dependencies 엘리먼트 아래에 다음을 추가합니다.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
scope에 provided는 servlet라이브러리를 컴파일 시에만 사용하고 배포 시에는 사용하지 않는다는 것을 의미합니다.
scope에는 4가지가 있습니다.
compile: 기본값, 컴파일 할 때 필요, 테스트 및 런타임에도 클래스 패스에 포함됩니다.
runtime: 런타임에 필요, 컴파일 시 필요하지 않지만 실행 시 필요합니다. (JDBC)
provided: 컴파일 시 필요하지만, 실제 런타임 때에는 컨테이너 같은 것에서 제공되는 모듈이며 배포 시 제외됩니다. (servlet, jsp, api)
test: 테스트 코드를 컴파일할 때 필요, 테스트시 클래스 패스에 포함되고 배포시 제외됩니다.
프로젝트실행
mavenweb 프로젝트 우클릭 > Run As > Run on Server > Fininsh
index.html이 정상적으로 웹 브라우저에 보여지게 됩니다.
JSTL 라이브러리 추가
pom.xml
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
JSTL은 tomcat이 기본으로 제공하지 않기 때문에, 컴파일, 배포할 때 둘다 사용되어야 합니다.
scope을 compile(아무것도 안하면 default로 compile)로 설정합니다.
webapp 폴더에 앞서만들었던 [(jsp02.jsp)](https://github.com/Wordbe/TIL/blob/master/Web/5. DB 연결 웹/jsp/jstl02.jsp) 파일을 넣고, 프로젝트를 실행시켜 봅시다.
실행해도 jsp파일에 있는 것은 실행되지 않는데,
project properties > Project facets 항목을 보면 Dynamic web module 버전이 2.3 입니다.
2.4 버전 이후부터 EL이 기본으로 사용될 수 있도록 설정되어있기 때문에, 2.3일 경우 EL 표기법 결과가 나오지 않습니다.
이는 이클립스 버그로, 수정되기 전 데이터와 수정된 데이터가 섞여서 실행되기 때문입니다.
이 경우 웹 어플리케이션을 깔끔히 초기화하고, 실행하는 것이 좋습니다.
- 기존 tomcat을 종료합니다.
- 혹시 바뀌지 않았다면 프로젝트를 선택하고, 우측버튼을 눌러서 Maven 메뉴 아래의 update project를 선택한 후 확인하세요.
- 상단메뉴 Windows > Show views > Servers 에서 기존 Tomcat Runtime을 삭제
- Project 메뉴의 Clean선택
- 프로젝트 익스플로러에서 Server 삭제
'lang > java web' 카테고리의 다른 글
[Spring] Java Spring 기본 (743) | 2020.01.04 |
---|---|
[Web] Rest API 설명 (604) | 2019.12.02 |
[Boostcourse] DB 연결 웹 - 6. JSTL & EL (680) | 2019.11.21 |
[Boostcourse] DB 연결 웹 - 5. Scope (595) | 2019.11.20 |
[Boostcourse] DB 연결 웹 - 4. Redirect & Forward (853) | 2019.11.19 |
댓글