Software Requirements Specification Template

Similar documents
Software Requirements Specification Template

Software Requirements Specification Template

문서의 제목 나눔고딕B, 54pt

Software Requirements Specification Template

Social Media and Social Computing

Software Requirements Specification Template

PowerPoint 프레젠테이션

슬라이드 1

Spring Boot

표준프레임워크 Nexus 및 CI 환경구축가이드 Version 3.8 Page 1

슬라이드 1

슬라이드 1

Apache Ivy

Intellij spring(mvc) + maven 환경구축 New Project에서좌측 template 유형에서 Maven을선택합니다. 오른쪽상단에 Project SDK는 java SDK가설치된폴더를선택하면됩니다. 오른쪽에 Create from archetyhpe을체

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

슬라이드 1

슬라이드 1

개발환경 교육교재

ISP and CodeVisionAVR C Compiler.hwp

지난시간에... 우리는 kernel compile을위하여 cross compile 환경을구축했음. UBUNTU 12.04에서 arm-2009q3를사용하여 간단한 c source를빌드함. 한번은 intel CPU를위한 gcc로, 한번은 ARM CPU를위한 gcc로. AR

[ 스프링부트, 그래들, HelloWorld]STS,Gradle 설치및 WEB MVC 심플예제 간단히 STS 및 Gradle Support Plugin 을설치하여간단히 Spring Boot, Gradle Web 응용프로그램을작성해보자. 0. STS 및 Gradle Su

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

PowerPoint 프레젠테이션

내장서버로사용. spring-boot-starter-data-jpa : Spring Data JPA 사용을위한설정 spring-boot-devtools : 개발자도구를제공, 이도구는응용프로그램개발모드에서유 용한데코드가변경된경우서버를자동으로다시시작하는일들을한다. spri

슬라이드 1

PowerPoint Presentation

파워포인트

쉽게 풀어쓴 C 프로그래밍

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인

문서의 제목 나눔고딕B, 54pt

1. 안드로이드개발환경설정 안드로이드개발을위해선툴체인을비롯한다양한소프트웨어패키지가필요합니다 툴체인 (Cross-Compiler) 설치 안드로이드 2.2 프로요부터는소스에기본툴체인이 prebuilt 라는이름으로포함되어있지만, 리눅스 나부트로더 (U-boot)


슬라이드 1

Secure Programming Lecture1 : Introduction

을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을

Microsoft PowerPoint - MonthlyInsighT-2018_9월%20v1[1]

슬라이드 1

10김묘선

4) 5) 6) 7)

C# Programming Guide - Types

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

Spring

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

소프트웨어 검증 및 설계

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

JVM 메모리구조

문서의 제목 나눔명조R, 40pt

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

슬라이드 1

리눅스 프로세스 관리

Spring Framework RESTful 지원 REST API는웹서비스를개발하는표준방법이되었고자바와관련하여사용할수있는많은프레임워크와라이브러리가있다. JAX-RS, Restlet, Jersey, RESTEasy, Apache CFX 등이있지만 Java

Mango-IMX6Q mfgtool을 이용한 이미지 Write하기

gnu-lee-oop-kor-lec06-3-chap7

01....b

00목차

¾Ë·¹¸£±âÁöħ¼�1-ÃÖÁ¾

2007백서-001-특집

(291)본문7

항목

2. 기능요약 Parallel 빌드지원등빌드자동화기능을지원하며다양한도구 ( 형상관리도구, Issue Tracker, Test 도구, IDE) 와의연동을지원함. 주요기능 Parallel 빌드지원 ( 다수프로젝트동시빌드 ) 분산빌드웹기반관리 알림형상관리도구지원

Microsoft PowerPoint - chap01-C언어개요.pptx

Design Issues

PowerPoint 프레젠테이션

JUNIT 실습및발표

PowerPoint 프레젠테이션

슬라이드 1

Install stm32cubemx and st-link utility

슬라이드 1

<31332DB9E9C6AEB7A2C7D8C5B72D3131C0E528BACEB7CF292E687770>

歯MW-1000AP_Manual_Kor_HJS.PDF

PowerPoint Presentation

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

4S 1차년도 평가 발표자료

슬라이드 1

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2.

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

슬라이드 1

PowerPoint Template

PowerPoint 프레젠테이션

Microsoft Word - CPL-TR OM2M.doc

Syslog 서버개발예제 1. New project new.bat 파일을 d:\kraken\examples 에복사하고명령프롬프트에서다음과같이실행 new [artifact id] [package]..or.. mvn archetype:generate -DarchetypeG

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Angry MOMO Presentation

Microsoft PowerPoint - chap06-2pointer.ppt

XSS Attack - Real-World XSS Attacks, Chaining XSS and Other Attacks, Payloads for XSS Attacks

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

<3235B0AD20BCF6BFADC0C720B1D8C7D120C2FC20B0C5C1FE20322E687770>

Mango-AM335x LCD Type 커널 Module Parameter에서 변경하기

Microsoft Word - 안드로이드_개발_매뉴얼1.docx

OM2M 기반의 OHP-M2M 오픈소스설치가이드 2015 년 8 월 경북대학교통신프로토콜연구실 최예찬, 강형우 요약 사물인터넷 (Internet of Things: IoT) 이이슈가되면서다양한사

tut_modelsim(student).hwp

Microsoft PowerPoint - aj-lecture1.ppt [호환 모드]

소프트웨어설치 1. 소프트웨어설치및제거 ( 소스코드 ) 소스코드컴파일을이용한 S/W 설치 1. 소스코드다운로드 - 예 ) httpd tar.gz - 압축해제 : #tar xzvf httpd tar.gz - INSTALL 또는 README파일참조

Keil Flexlm 라이선스 설명서

Microsoft PowerPoint - jfeature장범석서재원박동현.pptm

PowerPoint 프레젠테이션

Transcription:

Maven Chapter3 Page 1 Table of Contents Table of Contents... 1 Revision History... 2 1. 내가꿈꾸는개발환경... 3 2. 메이븐설치및템플릿프로젝트생성... 3 3. 메이븐설정파일... 3 3.1 settings.xml 설정파일... 4 3.2 pom.xml 설정파일... 5 3.3 최상위 POM 설정파일... 8 3.4 위키북프로젝트기본디렉토리설정완료...12 4. 메이븐라이프사이클 lifecycle... 18 5. 메이븐을이용한의존라이브러리관리... 18 6. 메이븐과이클립스통합... 18 7. 메이븐과데이터베이스통합... 18 8. 메이븐프로파일, 배포... 18 9. 리포팅기능을활용한문서관리... 18 10. 메이븐모듈 module... 18 11. 메이븐사내저장소설치및활용... 18 12. 표준 POM 파일생성및리팩토링... 18 13. 메이븐아키타입 archetype... 19 14. 새로운프로젝트를시작하면서..... 19

Maven Chapter3 Page 2 Revision History Name Date Reason For Changes Version

Maven Chapter3 Page 3 1. 내가꿈꾸는개발환경 2. 메이븐설치및템플릿프로젝트생성 3. 메이븐설정파일 프로젝트시작 2 일째 ( 소제목 ) 메이븐은설정보다는관례 Convention over Configuration 패러다임에따라프로젝트의기본디렉토리가이미정의되어있다. 그렇다면이기본디렉토리에대한정보는어디에서관리하고있을까? 이미예약되어있는기본디렉토리구조는변경할수없을까? 지금까지메이븐으로빌드하지않던프로젝트까지메이븐으로빌드가가능하도록하기위해서는분명히변경이가능하도록구현되어있을것이다. 오늘은메이븐기본설정파일에대하여분석해봐야겠다. 메이븐기본설정파일을분석한다음위키북프로젝트를위한기반작업을완료해야겠다. 어제생성했던웹프로젝트는내가예상했던디렉토리구조가아니라보완하는작업이필요한상태이다. 위키북프로젝트가완성되면프로젝트를빌드해보고빌드한결과물이어떤구조로생성되는지까지확인해야겠다. 오늘은정말야근하지않기위하여최대한근무시간중에집중력을발휘해야겠다. 삽질만하지않는다면퇴근전까지완료할수있겠지만프로젝트초반설정작업을할때워낙삽질을해야하는상황이많이발생하는지라장담하기힘들다. 메이븐을사용하려면알아야할설정파일이두가지가있다. 첫째는메이븐빌드툴과관련한설정파일이며, 설정파일이름은 settings.xml 이다. 둘째는메이븐기반프로젝트에서사용하는설정파일이며, 설정파일의이름은기본으로 pom.xml 을사용한다. 개발자가원할경우 pom.xml 이아니라다른이름을사용할수있다.

Maven Chapter3 Page 4 3.1 settings.xml 설정파일 메이븐빌드툴과관련한 settings.xml 파일은 MAVEN_HOME/conf 디렉토리에서위치한다. MAVEN_HOME/conf 디렉토리에위치하는 settings.xml 은메이븐을설치하면기본으로제공한다. MAVEN_HOME/conf 디렉토리의 settings.xml 설정파일은메이븐을설치한컴퓨터의모든사용자에동일한설정을하기위한용도로사용된다. 이 settings.xml 설정파일을열어보면기본엘리먼트를제외한대부분의설정엘리먼트가주석처리되어있다. 따라서추가적인설정이필요할경우주석처리되어있는부분을참고하여설정하는것이가능하다. 만약각사용자별로다른설정을하고자한다면 USER_HOME/.m2( 예를들어윈도우즈 XP 는 C:\Documents and Settings\javajigi\.m2) 디렉토리에 settings.xml 설정파일을추가하여설정하는것이가능하다. 각사용자별설정파일은각사용자별로직접생성해야한다. 매번직접생성하는것이번거롭다면 MAVEN_HOME/conf/settings.xml 파일을복사해설정하는것도좋은방법이다. 메이븐은빌드할때의존관계에있는라이브러리, 플러그인을중앙저장소에서개발자 PC 로다운로드한다. 이와같이다운로드한라이브러리는개발자 PC 의특정디렉토리에위치하게되는데이디렉토리를로컬저장소라부른다. 로컬저장소의기본설정은 USER_HOME/.m2/repository 이다. 그런데기본경로를사용하지않고로컬저장소의경로를바꾸고싶다면다음과같은방법으로변경할수있다. MAVEN_HOME/conf 디렉토리의 settings.xml 파일을열어보면 <settings/> 루트엘리먼트하위의 <localrepository/> 엘리먼트가주석처리된것을확인할수있다. <localrepository/> 엘리먼트의주석을 제거한다음자신이원하는로컬저장소의경로를지정해주면된다. <settings> <localrepository>d:/repositories/mavenrepository</localrepository> [...] </settings> 예제 3-1 settings.xml 파일에서로컬저장소의경로를변경하는예제소스 이절에서는 settings.xml 설정파일의각엘리먼트에대하여별도의설명은하지않고, 위키북프로젝트를 진행하면서 settings.xml 파일을변경해설정을해야하는상황이발생하는시점에추가적인설명을 진행하도록하겠다.

Maven Chapter3 Page 5 3.2 pom.xml 설정파일 메이븐은빌드와관련된정보를프로젝트객체모델 Project Object Model ( 이하 POM) 1 이라는이름으로정의하고있다. POM 의이름을따서기본설정파일은 pom.xml 파일이다. 메이븐은 mvn 명령을실행하면기본적으로 pom.xml 파일을읽어빌드를실행한다. 만약 pom.xml 파일이아닌다른설정파일을사용하고자한다면 -f 또는 --file 옵션을사용하면된다. mvn -f mypom.xml test 메이븐 POM 은크게 4 개의카테고리로구분할수있다. 그림 3-1 메이븐 POM 설정파일의기본구성요소 메이븐빌드설정파일의주요구성요소는그림 3-1 에서보는바와같이기본적인프로젝트정보, 빌드 설정, POM 관계설정, 빌드환경 4 개의카테고리로나뉜다. 1 프로젝트객체모델 (Project Object Model) 은프로젝트에기본적으로필요한정보를관리할수있도록정의한모델이다. 메이븐은이와같이정의한프로젝트기본구조를기반으로빌드를하며, 빌드를진행할때필요한설정정보를포함하고있다. POM 은메이븐 1.X 에서는 project.xml 에서메이븐 2.x 에서 pom.xml 로이름이변경되었다. POM 과관련한더자세한내용은 http://maven.apache.org/guides/introduction/introduction-to-the-pom.html 문서에서참고할수있다.

Maven Chapter3 Page 6 3.2.1 프로젝트기본정보 이카테고리에서는프로젝트이름, 프로젝트 URL, 프로젝트에참여하는개발자목록, 프로젝트의 라이센스와같은기본적인정보를관리한다. 이부분에대한설정에대해서는별도로설명하지않는다. 3.2.2 빌드설정 메이븐빌드와관련한기본적인빌드설정을변경하기위한카테고리이다. 기본소스디렉토리나리소스디렉토리에대한변경이필요할때사용가능하다 (3 장참조 ). 또한기본으로제공하는플러그인의설정을변경할때나새로운플러그인을추가하여메이븐빌드과정에포함시키기위한설정을하는데사용한다 (6,7 장참조 ). 메이븐은프로젝트와관련한다양한리포트문서를생성하는것또한가능하다 (9 장참조 ). 3.2.3 POM 관계설정 대부분의프로젝트는다른라이브러리또는프로젝트와의존관계를가지며, 각프로젝트간에는상속 관계를가지는경우도있다. 이와같이각프로젝트간의관계를관리하는부분이다. 이부분에대해서는 5 장과 10 장에서자세하게다룬다. 3.2.4 빌드환경 모든프로젝트는다양한환경에배포하는것이가능해야한다. 각환경에따라변경되는부분이발생한다. 이와같이다양한환경에따라다른설정정보를관리하는것이이카테고리이다. 메이븐에서는다양한환경에대한지원을위하여대표적으로프로파일기능을제공한다. 프로파일기능에대해서는 8 장에서다룬다. 그림 3-1 을기반으로 pom.xml 설정파일의주요엘리먼트를살펴보면다음과같다. <project...> <build> 3 <defaultgoal>...</defaultgoal> <finalname>...</finalname> <resources>...</resources> <testresources>...</testresources> <plugins>...</plugins> 6 </build> <reporting>...</reporting> 9 <modules>...</modules> 10

Maven Chapter3 Page 7 <dependencies>...</dependencies> 5 <dependencymanagement>...</dependencymanagement> 12 <distributionmanagement>...</distributionmanagement> 11 <pluginmanagement>...</pluginmanagement> 12 <repositories>...</repositories> 5 <pluginrepositories>...</pluginrepositories> 7 <properties>...</properties> 5 <profiles>...</profiles> 8 </project> 예제 3-2 pom.xml 설정파일의주요설정 예제 3-2 는 pom.xml 설정파일의중심이되는엘리먼트를포함하고있다. 각엘리먼트에대한내용은지금시점에모두다룰경우재미도없을뿐만아니라이해도도떨어지기때문에프로젝트를진행하면서새로운설정이등장할때마다하나씩다루도록하겠다. 예제 3-2 의각엘리먼트우측의숫자는해당엘리먼트를다루고있는장의번호이다. 먼저 2 장에서생성한위키북프로젝트의 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>net.javajigi</groupid> <artifactid>wikibook</artifactid> <packaging>war</packaging> <version>1.0-snapshot</version> <name>wikibook 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>wikibook</finalname> </build> </project> 예제 3-3 위키북프로젝트의 pom.xml 파일 project: pom.xml 파일의최상위엘리먼트

Maven Chapter3 Page 8 modelversion: POM 모델의버전. 가장최근버전이 4.0.0 이다. POM 모델이변경되지않으면수정할필요가없다. groupid: 프로젝트를생성하는조직의고유아이디를결정한다. 일반적으로도메인이름을사용한다. artifactid: 프로젝트를식별하는유일한아이디를의미한다. 예를들어 net.javajigi 라는 groupid 를사용하고있는조직에여러개의프로젝트가존재할수있다. packaging: 프로젝트를어떤형태로패키징할지결정한다. jar, war, ear, pom 등이해당된다. version: 프로젝트의현재버전이다. 개발이완료된버전일경우 1.0, 2.0 과같이사용하겠지만프로젝트가개발중에는 SNAPSHOT 을접미사로사용할수있다. SNAPSHOT 은메이븐의예약어이며, SNAPSHOT 을사용한다면라이브러리를다른방식으로관리한다. name: 프로젝트이름 url: 프로젝트사이트가있다면사이트 URL 을등록한다. dependencies: <dependencies/> 엘리먼트와하위엘리먼트인 <dependency/> 는프로젝트와의존관계에있는라이브러리를관리한다. 예제 3-3 과같이 <dependency/> 를설정하면메이븐저장소에서 junit 3.8.1 버전을개발자 PC 에다운로드한다. 메이븐에서의존관계에있는라이브러리를관리하는기능에대해서는 5 장에서자세하게다룬다. 예제 3-3 의 pom.xml 에서사용한 groupid, artifactid, packaging, version 정보는프로젝트를배포하고, 배포한라이브러리를다른프로젝트에서참조할때사용한다. 메이븐은중앙저장소를가지고있으며, 모든라이브러리를관리해야하기때문에모든프로젝트는고유한값을가져야한다. 따라서 groupid + artifactid 의값이유일한값이되어야한다. 그렇지않을경우중앙저장소에라이브러리를관리할때충돌하는상황이발생할수있기때문이다. 3.3 최상위 POM 설정파일 메이븐은기본적인프로젝트디렉토리구조와메이븐에서사용할수있는기본적인플러그인정보를 포함하고있는 POM 설정파일을제공한다. 이책에서는이 POM 설정파일을최상위 POM 이라고부르도록 하겠다. 최상위 POM 설정파일은메이븐에포함되어있는 jar 파일을통하여배포하고있다. 이최상위 POM 파일은우리가생성하는모든메이븐설정파일의부모 POM 역할을하며, 모든설정 파일은기본으로최상위 POM 을상속 inheritance 하는구조이다 2. 2 상속하고자하는설정파일은 <parent/> 엘리먼트를활용하여변경하는것이가능하다. 메이븐설정파일 간의상속과 <parent/> 엘리먼트에대해서는 10 장에서다루고있다.

Maven Chapter3 Page 9 그림 3-2 최상위 POM 과프로젝트별로생성되는 POM 설정파일의관계 메이븐설정파일이상속하고있는 POM 파일의내용을확인하려면 mvn help:effective-pom 명령어를 실행해보면확인할수있다. 2 장에서생성했던 wikibook 디렉토리로이동해 mvn help:effective-pom 을 실행하면다음과같은결과가출력되는것을확인할수있다. <project > [ ] <build> <sourcedirectory>src/main/java</sourcedirectory> <testsourcedirectory>src/test/java</testsourcedirectory> <outputdirectory>target/classes</outputdirectory> <testoutputdirectory>target/test-classes</testoutputdirectory> <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> <testresources> <testresource> <directory>src/test/resources</directory> </testresource> </testresources> [...] </build> <repositories> <repository> <id>central</id> <name>maven Repository Switchboard</name> <url>http://repo1.maven.org/maven2</url> </repository> </repositories> <pluginmanagement> <plugins> <plugin>

Maven Chapter3 Page 10 <artifactid>maven-antrun-plugin</artifactid> <version>1.3</version> </plugin> <plugin> <artifactid>maven-assembly-plugin</artifactid> <version>2.2-beta-2</version> </plugin> <plugin> <artifactid>maven-clean-plugin</artifactid> <version>2.2</version> </plugin> <plugin> <artifactid>maven-compiler-plugin</artifactid> <version>2.0.2</version> </plugin> [...] <plugin> <artifactid>maven-war-plugin</artifactid> <version>2.1-alpha-2</version> </plugin> </plugins> </pluginmanagement></project> 예제 3-4 help:effective-pom 을실행했을때의결과소스 위키북프로젝트에서생성한예제 3-3 의 pom.xml 설정은단순하지만 mvn help:effective-pom 를실행한예제 3-4 의결과는메이븐에서기본으로사용하는디렉토리 ( 소스코드, 테스트소스코드, 리소스, 테스트리소트등등 ) 구조, 중앙저장소, 플러그인과같은많은정보를포함하고있다. 그이유는각각의프로젝트에서생성한 pom.xml 설정은기본적으로최상위 POM 설정을상속하기때문이다. 예제 3-4 의설정은메이븐에서기본으로제공하는최상위 POM 설정에서제공하고있는내용이다. 따라서 2 장에서생성한 myfirst, wikibook 프로젝트의 pom.xml 설정의내용이단순하더라도메이븐의기본적인규약을따르는것이가능한이유이다. 예제 3-4 의최상위 POM 에서새롭게등장한설정을보면다음과같다. build: 프로젝트빌드와관련한기본적인소스디렉토리구조, 빌드산출물디렉토리구조, 빌드시사용할플러그인정보를관리한다. sourcedirectory: 실제서비스를담당하는자바소스코드를관리하는디렉토리. 기본값은 src/main/java testsourcedirectory: 테스트소스를관리하기위한디렉토리. 메이븐빌드툴은서비스소스코드와테스트소스코드를분리해서관리하며, 배포시테스트소스코드가같이배포되지않게한다. 기본값은 src/test/java outputdirectory: sourcedirectory 의소스를컴파일한결과물이위치하는디렉토리. 기본값은 target/classes

Maven Chapter3 Page 11 testoutputdirectory: testsourcedirectory 의소스를컴파일한결과물이위치하는디렉토리. 기본값은 target/test-classes resources: 서비스에사용되는자원을관리하는디렉토리. 기본값은 src/main/resources testresources: 테스트시에필요한자원을관리하기위한디렉토리. 기본값은 src/test/resources repositories: 빌드할때접근할저장소의위치를관리한다. 메이븐기본저장소 URL 은 http://repo1.maven.org/maven2 이다. 저장소와관련된더자세한내용은 5 장에서다룬다. pluginmanagement: 빌드설정파일에서관리하는플러그인목록. 이엘리먼트에설정되어있다고해서반드시사용하는것은아니다. 이와관련한더자세한내용은 12 장에서다룬다. 위키북프로젝트는기본적으로최상위 POM 을상속하고있기때문에메이븐의기본디렉토리구조를따라야한다. 메이븐을처음사용하는대부분의개발자들은최상위 POM 에서기본값을정의하고있기때문에메이븐기반프로젝트는반드시이구조를따라야할것으로생각한다. 하지만이미개발자에게익숙한디렉토리구조가존재할수있으며, 다른빌드툴기반으로생성된프로젝트가있는경우에는기본디렉토리를변경하는것이가능해야한다. 메이븐이이같은유연성을보장하기위하여최상위 POM 에서정의한기본설정을변경하고자한다면하위설정파일에서재정의하면된다 3. 만약기본디렉토리가아닌다른디렉토리를사용하고싶다면 pom.xml 설정파일에서변경하면된다. 예를 들어기본디렉토리를다음과같이변경하고자한다. src/main/java => src/java: 3 단계의디렉토리를 2 단계로줄임. src/main/resources => src/resouces: 테스트소스에서사용할자원이없을것으로판단해 src/resources 하나로통합 src/test/java => src/test: 3 단계의디렉토리를 2 단계로줄임. src/main/webapp => webapp: 3 단계의디렉토리를 1 단계로줄임. 웹자원의경우 3 단계까지디렉토리를열고접근해야한다면작업하기불편할것으로판단되어최상위로이동하였다. 그런데위키북프로젝트에서 mvn help:effective-pom 을실행해보면웹자원에대한기본디렉토리를 설정하는부분이없는것을확인할수있다. 메이븐에서웹자원은 maven-war-plugin 에서관리하고있으며, 기본값은 src/main/webapp 디렉토리이다. 위와같이디렉토리구조를변경하고자한다면 pom.xml 설정파일을다음과같이재정의하면된다. 3 이개념은자바언어에서메써드를오버라이딩 overriding 하면메써드의기능을재정의할수있는것과 비슷하다.

Maven Chapter3 Page 12 <project > <modelversion>4.0.0</modelversion> <groupid>net.javajigi</groupid> <artifactid>wikibook</artifactid> <packaging>war</packaging> <version>1.0-snapshot</version> <name>wikibook Maven Webapp</name> <url>http://maven.apache.org</url> <build> <finalname>wikibook</finalname> <sourcedirectory>src/java</sourcedirectory> <testsourcedirectory>src/test</testsourcedirectory> <resources> <resource> <directory>src/resources</directory> </resource> </resources> <plugins> <plugin> <artifactid>maven-war-plugin</artifactid> <configuration> <warsourcedirectory>webapp</warsourcedirectory> </configuration> </plugin> </plugins> </build> [...] </project> 예제 3-5 메이븐기본소스디렉토리구조를변경하는 pom.xml 파일 4 메이븐은최상위 POM 에서정의한모든설정을재정의하는것이가능하기때문에메이븐의기본규약을 무조건따라야하는것은아니다. 프로젝트의상황에따라얼마든지유연하게바꿀수있다. 물론 4 장에서 다루게될메이븐의기본빌드라이플사이클에대한변경은할수없다. 3.4 위키북프로젝트기본디렉토리설정완료 메이븐설정파일에대한기본적인내용은파악했으니위키북프로젝트에대한기본디렉토리와설정을 완료해야겠다. 위키북프로젝트는메이븐에서제공하는아키타입을이용하여템플릿프로젝트를생성했다. 4 플러그인설정과관련한내용은이책의 6 장에서다루고있다. 이장에서 maven-war-plugin 플러그인 설정을다룬이유는웹자원을관리하는기본디렉토리와기본디렉토리를변경하는것이가능하다는것을 보여주기위함이다. 이장에서는플러그인은이렇게설정하는것이가능하다는것만알아두기바란다.

Maven Chapter3 Page 13 그런데 2 장에서만들었던위키북프로젝트는웹자원을관리하는디렉토리만존재하고자바소스를관리하기위한디렉토리는생성되지않았다. 프로젝트를시작하는시점부터자바소스만별도의프로젝트에서관리할필요가있을까? 처음부터분리해봤자관리비용만늘어날뿐이지별다른효과는없을듯하다. 그렇다면 wikibook 디렉토리와 myfirst 디렉토리를통합해서하나의프로젝트로만든다면웹자원과자바소스를같은프로젝트에관리할수있겠다. wikibook 디렉토리와 myfirst 디렉토리를통합하기위하여 wikibook 디렉토리에 2 장에서생성한 myfirst 프로젝트의 src 디렉토리전체를복사한다 5. 위키북프로젝트의 pom.xml 파일은위키북프로젝트에서생성한설정파일을사용할것이기때문에복사하지않는다. 이과정을통하여생성된위키북프로젝트의디렉토리구조는다음그림과같다. 그림 3-3 위키북프로젝트의기본디렉토리구조 그림 3-3 을보면위키북프로젝트에서웹자원을관리하는기본디렉토리가 src/main/webapp 이다. 과거의경험에비추어볼때이클립스와같은통합개발환경을사용해작업을해보면자바소스는디렉토리단계가많아지더라도큰불편함이없는데웹자원은불편하다. src/main/webapp 를그대로사용하지말고디렉토리의단계를줄여서 webapp 로재정의하는것이좋겠다. 자바소스와리소스디렉토리는메이븐기본디렉토리를유지하고웹자원을관리하는 src/main/webapp 디렉토리를 webapp 로재정의하고자한다. 따라서 maven-war-plugin 의 warsourcedirectory 값만 5 메이븐프로젝트를반드시이와같은과정을통하여생성하지않아도된다. 자바소스와리소스가 추가되는시점에수동으로디렉토리를추가해도된다. 이책에서는편의를위해서 jar 프로젝트의 src 디렉토리를복사하는방법을택했다.

Maven Chapter3 Page 14 src/main/webapp 에서 webapp 로재정의한다. 설정파일을변경한후 webapp 디렉토리를 wikibook 디렉토리의 최상위로이동한다. <project...> [ ] <build> <finalname>wikibook</finalname> <plugins> <plugin> <artifactid>maven-war-plugin</artifactid> <configuration> <warsourcedirectory>webapp</warsourcedirectory> </configuration> </plugin> </plugins> </build> </project> 예제 3-6 웹자원경로를변경하기위한위키북프로젝트의 pom.xml 설정 위키북프로젝트에대한기본디렉토리구조와설정파일을완료하였다. 마지막으로위키북프로젝트의설정이정상적으로되었는지확인해보기위하여 mvn package 명령어를실행한다. mvn package 명령을실행하면컴파일, 테스트를완료하고 war 파일로압축까지진행한다. 더자세한내용은 4 장에서다룬다. 위키북프로젝트빌드를완료되면다음과같은디렉토리구조가생성된다.

Maven Chapter3 Page 15 그림 3-4 위키북프로젝트를빌드한후의디렉토리구조 위키북프로젝트를빌드하면그림 3-4 와같이 wikibook 디렉토리아래에 target 디렉토리가생성된다. 메이븐은기본적으로빌드후의모든산출물을 target 디렉토리아래에서관리한다. 그림 3-4 의 target 디렉토리아래에생성되는하위디렉토리의용도를살펴보면다음과같다. target/classes: src/main/java 디렉토리의자바소스가컴파일된바이너리코드와 src/main/resources 디렉토리의자원이복사된다. target/test-classes: src/test/java 디렉토리의자바소스가컴파일된바이너리코드와 src/test/resources 디렉토리의자원이복사된다. target/wikibook: war 로패키징하는데필요한모든자원의위치. target/classes 디렉토리하위의파일이 wikibook/web-inf/classes 디렉토리아래에복사된다. target/test-classes 디렉토리하위의파일은제외한다. target/surefire-reports: 빌드하면서생성된리포트문서의위치. < 참고사항 >

Maven Chapter3 Page 16 이와같이메이븐에서제공하는아키타입을이용하여프로젝트의뼈대를만들수도있다. 하지만이방법을 사용하여웹기반프로젝트를생성하는경우두개의아키타입기반으로프로젝트를생성한후합치는 작업을하고불필요한설정과소스코드를제거해야하는불편함이있다. 나는일반적으로두가지방식으로프로젝트의뼈대를만든다. 첫번째방법은 m2eclipse(http://m2eclipse.sonatype.org/) 이클립스플러그인을기반으로메이븐 프로젝트를생성하는방법이다. 이방법에대해서는이책의 6 장에서자세하게다룬다. 두번째방법은 2 장에서와같이 maven-archetype-webapp 아키타입기반으로프로젝트를생성한후 src/main/java, src/test/java 와같은기본디렉토리를필요한시점에직접생성한다. 어떤방법이편할것인지에대해서는개발자의성향마다다르기때문에각자테스트해본후에본인에게 맞는방법을선택하면될것으로생각한다. </ 참고사항 > 작은단계이기는하지만위키북프로젝트를위한메이븐기반프로젝트를완성했다. 지금까지생성한 위키북프로젝트의최종모습을살펴보니다음과같다. 그림 3-5 위키북프로젝트의최종디렉토리구조 지금까지메이븐설정의대부분은미리정의하고있기때문에정해진규칙을반드시따라야하는것으로이해했다. 그런데오늘설정파일을공부하면서이같은선입견이얼마나잘못된것인지느낄수있었다. 지금까지의경험으로비추어봤을때웹자원을관리하는디렉토리의깊이가깊어질경우불편한점이많았다. 그런데어제위키북프로젝트를생성했을때웹자원을관리하는메이븐기본디렉토리가 src/main/webapp 라는것을알았다. 만약이디렉토리를변경할수없다면많은개발자들이불만을토로할것이다. 그동안앤트 Ant 에익숙한상태에서메이븐으로전환하는것도불만인데앤트에서정말쉽게

Maven Chapter3 Page 17 지원하는기능도지원할수없다면메이븐에대한불만이더커지리라생각했다. 하지만오늘메이븐설정 파일에대한학습을하면서디렉토리구조를변경하는것이어렵지않다는것을확인하고안도의한숨을쉴 수있었다. 왜메이븐은웹자원에대한기본디렉토리구조를 src/main/webapp 로정했을까? 를고민해봤다. 아무래도웹자원또한개발자가관리해야할소스코드이기때문에모든소스가위치해있는 src 디렉토리아래에위치하는것이맞다. 이론적으로따지면이같은구조가맞지만실질적으로프로젝트를진행하는개발자의입장을고려한다면디렉토리깊이를 webapp 와같이단계를줄이는것이더실용적인접근이겠다. 는생각으로디렉토리를변경했다. 프로젝트에참여하는다른개발자들도내가선택한방법을좋아했다. 오늘은위키북프로젝트의기본디렉토리구조를정하고메이븐설정파일까지완료할수있어뿌듯하다. 이런식으로하나씩배우면서설정파일을발전시켜나간다면메이븐을적용하는것도문제없겠다.

Maven Chapter3 Page 18 4. 메이븐라이프사이클 lifecycle 5. 메이븐을이용한의존라이브러리관리 6. 메이븐과이클립스통합 7. 메이븐과데이터베이스통합 8. 메이븐프로파일, 배포 9. 리포팅기능을활용한문서관리 10. 메이븐모듈 module 11. 메이븐사내저장소설치및활용 12. 표준 POM 파일생성및리팩토링

Maven Chapter3 Page 19 13. 메이븐아키타입 archetype 14. 새로운프로젝트를시작하면서..