BoostCource/Back-end

#02. BE - Maven으로 프로젝트 만들기

칸타탓 2018. 7. 15. 18:03

<2. DB 연결 웹 애플리케이션 - Maven>

http://www.edwith.org/boostcourse-web




* Maven이란?


Maven은 지금까지 애플리케이션을 개발하기 위해 반복적으로 진행해왔던 작업들을 지원하기 위하여 등장한 도구이다.

Maven을 사용하면 빌드(Build), 패키징, 문서화, 테스트와 테스트 리포팅, git, 의존성관리, svn등과 같은 형상관리서버와 연동(SCMs), 배포 등의 작업을 손쉽게 할 수 있다.


Maven을 이해하려면 CoC(Convention over Configuration)라는 단어를 먼저 이해해야 한다.

CoC란 일종의 관습을 말한다. 프로그램의 소스파일은 어떤 위치에 있어야 하고, 소스가 컴파일된 파일들은 어떤 위치에 있어야 하는 것 등을 미리 정해놓은 것이다.




* Maven의 장


  • 편리한 의존성 라이브러리 관리

JSTL을 학습할 때, 몇 가지 파일을 다운로드 하여 /WEB-INF/lib폴더에 복사하여 사용했다. 관련된 라이브러리가 많아질수록 이러한 방식은 상당히 불편해진다. Maven을 사용하면 설정 파일에 몇 줄 적어줌으로써 직접 다운로드 받지 않아도 라이브러리를 사용할 수 있다.

  • Maven에 설정한 대로 모든 개발자가 일관된 방식으로 빌드를 수행할 수 있게 된다.

  • Maven은 다양한 플러그인을 제공하므로 많은 일들을 자동화시킬 수 있다.




* Maven 기본


Archetype을 이용하여 Maven 기반 프로젝트를 생성할 경우 생성된 프로젝트 하위에 pom.xml 파일이 생성된다.

- 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 파일의 최상위 루트 엘리먼트(Root Element)

  • modelVersion : POM model의 버전

  • groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인 이름을 거꾸로 적는다.

  • artifactId : 해당 프로젝트에 의하여 생성되는 artifact의 고유 아이디를 결정한다. Maven을 이용하여  pom.xml을 빌드할 경우 다음과 같은 규칙으로 artifact가 생성된다. artifactid-version.packaging. 위 예의 경우 빌드할 경우 mysamexamples-1.0-SNAPSHOT.jar 파일이 생성된다.

  • packaging : 해당 프로젝트를 어떤 형태로 packaging 할 것인지 결정한다. (jar, war, ear 등이 해당)

  • version : 프로젝트의 현재 버전. 추후 살펴보겠지만 프로젝트가 개발 중일 때는 SNAPSHOT을 접미사로 사용한다. Maven의 버전 관리 기능은 라이브러리 관리를 편하게 한다.

  • name : 프로젝트의 이름

  • url : 프로젝트 사이트가 있다면 사이트 URL을 등록하는 것이 가능하다.


위 pom.xml 파일에서 <dependencies/> 엘리먼트가 Dependency Management 기능의 핵심이라고 할 수 있으며 해당 엘리먼트 안에 필요한 라이브러리를 지정하게 된다.






* Maven 사용하기



1. 이클립스를 실행하고, 이클립스의 메뉴 중 File -> New -> Project를 선택한다.


2. 프로젝트 위자드(Wizard)가 뜨면 Maven아래의 Maven Project를 선택한 후 Next버튼을 클릭한다.




3. Maven프로젝트가 기존 워크스페이스 경로에 생성되도록 하고 Next버튼을 클릭



4. 아키타입(Archetype) 선택
아키타입이란 일종의 프로젝트 템플릿(Template)이다.
Maven을 이용하여 웹 어플리케이션을 개발하기 위해서 maven-archetype-webapp를 선택한 후 Next 버튼을 클릭



5. Group Id는 보통 프로젝트를 진행하는 회사나 팀의 도메인 이름을 거꾸로 적는다.
Artifact Id는 해당 프로젝트의 이름을 적는다.
버전은 보통 기본값(0.0.1-SNAPSHOT)으로 설정한다.


6. 프로젝트를 선택하고, 우측버튼을 눌러 properties -> Java Compiler 메뉴 선택

기본적으로 JDK 1.5 버전을 사용하는 것을 있다. Maven으로 프로젝트를 생성하면 기본적으로 JDK 1.5 사용하게 된다.

JDK8 사용하도록 하기 위해 Maven설정 파일인 pom.xml 수정한다.

아래와 같이 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>mavenweb</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>mavenweb Maven Webapp</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>
  <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>
</project>
7. 프로젝트 프로퍼티를 선택한 후 Maven메뉴 아래의 Java EE Integration을 선택한다.

Enable Project Specific Settings 앞의 체크박스를 선택하고 Apply and Close버튼을 클릭한다.
이제 JDK 1.8이 사용되는 것을 알 수 있다.


8. dependencies 엘리먼트 아래와 같이 추가한다. Maven프로젝트로 생성했을 경우에는 WAS 런타임이 지정을 안 했기 때문에 서블릿 라이브러리를 찾을 수 없으므로 추가해 주어야 한다.
<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
9. 해당 프로젝트를 실행하기.






* JSTL 라이브러리 추가하기




1. pom.xml 파일 수정

<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

2. 프로젝트 property -> Project facets 항목에서 다이나믹 웹 모듈의 버전이 2.3일 경우

다이나믹 웹 모듈의 2.4부터 EL이 기본으로 사용할 수 있도록 설정되기 때문에 2.3일 경우에는 EL표기법의 결과가 출력되지 않는다.


따라서 이럴 경우엔 아래와 같이 WEB-INF의 web.xml 파일 수정해야 한다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>Archetype Created Web Application</display-name>
</web-app>


3. 이클립스 navigator에서 프로젝트아래의 .settings/org.eclipse.wst.common.project.facet.core.xml 파일을 열고 아래와 같이 수정한다.

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
  <fixed facet="wst.jsdt.web"/>
  <installed facet="jst.web" version="3.1"/>
  <installed facet="wst.jsdt.web" version="1.0"/>
  <installed facet="java" version="1.8"/>
</faceted-project>


* 이후 적용되지 않고 오류가 발생하는 것은 수정되기 전의 데이터와 수정된 데이터가 섞여서 실행되기 때문이다.

  1. 기존 tomcat 종료

  2. 혹시 바뀌지 않았다면 프로젝트를 선택하고, 우측버튼을 눌러서 Maven 메뉴 아래의 update project를 선택한 후 확인

  3. Servers view에서 기존 Tomcat Runtime을 삭제

  4. Project 메뉴의 Clean 선택

  5. 프로젝트 익스플로러에서 Server 삭제





'BoostCource > Back-end' 카테고리의 다른 글

#02. BE - Rest API  (0) 2018.07.18
#02. BE - JDBC  (0) 2018.07.17
#02. BE - JSTL  (0) 2018.07.14
#02. BE - EL  (0) 2018.07.14
#02. BE - Scope  (0) 2018.07.14