tsa system development maven

37
TSA System Development MAVEN MRACE corp. [email protected]

Upload: neci

Post on 14-Feb-2016

125 views

Category:

Documents


7 download

DESCRIPTION

TSA System Development MAVEN. MRACE corp. [email protected]. Maven 이란 ?. Maven 이 지원하는 작업은 다음과 같다 . Builds Documentation Reporting Dependencies SCMs Releases Distribution. MAVEN 설치. http://maven.apache.org 에서 Maven 최신 버전을 다운받는다 . apache-maven-2.2.1-bin.zip 을 받아서 압축풀고 설치 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: TSA System Development MAVEN

TSA System Development

MAVEN

MRACE [email protected]

Page 2: TSA System Development MAVEN

Maven 이 지원하는 작업은 다음과 같다 .• Builds• Documentation• Reporting• Dependencies• SCMs• Releases• Distribution

Maven 이란 ?

Page 3: TSA System Development MAVEN

http://maven.apache.org 에서 Maven 최신 버전을 다운받는다 . apache-maven-2.2.1-bin.zip 을 받아서 압축풀고 설치 환경변수 설정• M2_HOME = d:\apache-maven-2.2.1• M2 = %M2_HOME%\bin• Path = %M2%;%Path%

정상설치 확인• mvn -version

MAVEN 설치

Page 4: TSA System Development MAVEN

Template Java 프로젝트D:\java> mvn archetype:create -

DgroupId=net.javajigi -DartifactId=mysample

Template Webapp 프로젝트D:\java> archetype:create -

DgroupId=net.javajigi -DartifactId=mywebapp -DarchetypeArti-factId=maven-archetype-webapp

Maven 기반 프로젝트 생성

Page 5: TSA System Development MAVEN

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

Maven 프로젝트 설정<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>mysample</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>

Page 6: TSA System Development MAVEN

project : pom.xml 파일의 최상위 엘리먼트 modelVersion : POM model 의 버전 . groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정한다 .

일반적으로 Full 도메인 이름을 사용하는 경우가 많다 . artifactId : 해당 프로젝트에 의하여 생성되는 artifact의 고유 아이디를

결정한다 . Maven을 이용하여 pom.xml을 빌드할 경우 다음과 같은 규칙으로 artifact가 생성된다 . artifactid-version.packaging. 위 예의 경우 빌드할 경우 mysample-1.0-SNAPSHOT.jar 파일이 생성된다 .

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

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

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

pom.xml 파일

Page 7: TSA System Development MAVEN

compile goal• d:\myproject\>mvn compile

test-compile Goal : src/main/java 디렉토리에 위치한 구현 코드만 컴파일• d:\myproject\> mvn test-compile

test Goal : 테스트 코드 이용한 구현 코드를 테스트• d:\myproject\> mvn test

Package : 컴파일한 구현 코드를 jar, war 로 압축• d:\myproject\> mvn package

Maven 의 디폴트 Goals

Page 8: TSA System Development MAVEN

local Repository 에 등록• mvn install

Remote Repository 에 등록• mvn deploy

Goal 의 의존관계• compile, test-compile, test, package, in-

stall, deploy 순이다

Maven Repository 에 등록

Page 9: TSA System Development MAVEN

지금까지 외부 라이브러리를 관리하는 방법은 다음과 같은 문제점을 가지고 있다 .• 라이브러리의 추가 및 버전 변경이 불편하다 .• 버전 관리 시스템 (CVS, SVN) 을 이용하여 공유할 파일 크기가 커진다 .• 현재 사용하고 있는 라이브러리의 버전을 파악하기 힘들다 .• 컴파일 , 배포 , 테스트할 때만 사용하는 라이브러리를 분리하기 힘들다 .• WTP 의 경우 자동 클래스 패스 기능이 너무 느리다 .

하나의 애플리케이션을 개발할 때 외부 라이브러리의 의존도가 어떻게 변화하고 있는지 살펴보면 다음과 같다 .

기존 공유 라이브러리의 문제점

Page 10: TSA System Development MAVEN

pom.xml 파일의 dependencies 엘리먼트를 사용하여 외부 라이브러리와의 의존관계를 설정한다 .

<dependencies> 엘리먼트가 의미하듯 엘리먼트 하위에 여러 개의 <dependency> 엘리먼트를 가질 수 있다 .

"mvn compile" 명령을 실행하면 junit 3.8.1 버전의 jar 파일이 자동으로 Local Repository 디렉토리에 모든 Depen-dency 라이브러리가 다운 받아진다 . 위와 같이 pom.xml 파일을 설정한다면 다음 위치에 jar 파일이 다운 받아진다 .

Maven 의 Dependency 관리 기능<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies>

Page 11: TSA System Development MAVEN

Maven 이 Dependency 라이브러리를 관리 가능한 것은 Maven이 오픈 소스 라이브러리에 대한 중앙 Repository 를 유지하기 때문이다 . pom.xml 파일에 특별히 Repository 를 설정할지 않을 경우 Maven 의 중앙 Repository 는 http://www.ibiblio.org/maven/ 이다 . http://mvnrepository.com/에서 Maven 에서 사용 가능한 라이브러리를 검색할수 있다 .

Maven 의 중앙 Repository

좌측의 <dependency> 엘리먼트를 추가하게 되면 spring 프레임워크 라이브러가 Local Repository 에 자동으로 다운되어 Maven 이 빌드할 때 사용되게 된다 . 클래스패스에 하는 추가적인 작업을 할 필요도 없다 . Maven 은 pom.xml 설정 파일의 <depen-dency> 엘리먼트 정보를 이용하여 Local Repository 에서 해당 jar 파일을 찾게 되는 것이다 .

Page 12: TSA System Development MAVEN

Maven 을 사용할 때 Local Repository 의 경로는 디폴트로 USER_HOME/.m2/repository 가 된다 . Local Repository 의 경로를 바꾸고자 한다면 다음과 같은 방법으로 변경한다 .

MAVEN_HOME/conf 디렉토리 하위에 settings.xml 파일을 열어보면 localRepository 엘리먼트가 주석처리 되어 있는 것을 확인할 수 있다 . 주석처리되어 있는 localRepository 를 다음과 같이 변경해 주면 된다 .

Maven 의 Local Repository

<localRepository>D:/Repositories/MavenRepository</localRepository>

Page 13: TSA System Development MAVEN

Maven은 사용하고 있는 라이브러리의 성격에 따라 Scope를 지정하는 것이 가능하다 . 예를 들어 junit의 경우 단순히 테스트를 위해서만 사용되고 실제 배포될 때는 필요없는 라이브러리이다 .

• compile : scope를 설정할지 않았을 때의 디폴트 scope이다 . 컴파일 시에도 사용되며 , 배포시에도 같이 배포되어야 하는 라이브러리이다 .• provided : JDK가 컨테이너에 의하여 제공되는 라이브러리이다 . 예를 들어 servlet.jar의

경우 Servlet 컨테이너에 의하여 제공되기 때문에 이 scope를 사용한다 .• runtime : 이 scope는 말 그대로 컴파일 시에는 사용되지 않지만 애플리케이션을 실행할

때 사용되는 라이브러리일 경우 설정한다 .• test : 테스트를 위해서만 사용하는 라이브러리이다 .• system : 이 scope는 provided와 비슷하다 . 단지 우리가 직접 jar 파일을 제공해야 한

다 . 따라서 이 scope의 jar 파일은 repository에서 관리되지 않을 수도 있다 .

Maven Dependency 라이브러리를 관리하는 방법에 대하여 살펴보았다 . Maven을 사용하면서 가장 큰 도움을 얻을 수 있는 부분이며 , 정말 유용한 기능이다 . 현재 Ant를 사용하고 있다면 Antlib을 사용해서 Maven의 Dependency 기능을 이용하는 것이 가능하다 . 그러므로 외부 라이브러리 관리에 불편함을 겪고 있는 개발자라면 Maven의 Dependency 기능을 꼭 사용해보기 바란다 .

Dependency 라이브러리의 Scope

Page 14: TSA System Development MAVEN

Eclipse 3.2 이상 , JDK 1.4 이상 , Eclipse 는 JRE 가 아닌 JDK 상에서 실행되는지 확인

Eclipse 플러그인인 Subclipse 와 Mylyn 을 설치• Subclipse 1.2 : http://subclipse.tigris.org/update_1.2.x• Mylyn (Eclipse 3.3) : http://download.eclipse.org/tools/mylyn/update/e3.3• Mylyn (Eclipse 3.4) : http://download.eclipse.org/tools/mylyn/update/e3.4• Mylyn Extras (JIRA 지원 ) : http://download.eclipse.org/tools/mylyn/update/extras

Help -> Software Updates -> Find and Install -> Install/Up-date 다이얼로그 상자 -> "Search for new features to install“ 선택사항 클릭하고 Next 를 클릭 -> Add Site.. -> update site URL 입력• m2eclipse 플러그인 : http://m2eclipse.sonatype.org/update

Eclipse 가 새로운 플러그인들을 설치한 후에 , 재시작에 대한 허가를 요청한다 .

m2eclipse 설치

Page 15: TSA System Development MAVEN

"Maven Integration for Eclipse JDK Warning" 경고

이클립스는 JRE 만 있어도 동작이 가능한데 Maven 코어의 플러그인들이 JDK 의 jars 를 사용하므로 eclipse.ini 에서 -vm 옵션으로 JDK 를 설정하라고 하네요 .

m2eclipse 설치후 경고 오류

--launcher.XXMaxPermSize256m-vmC:\Program Files\Java\jdk1.5.0_16\bin\javaw.exe-vmargs-Dosgi.requiredJavaVersion=1.5-Xms40m…

Page 16: TSA System Development MAVEN

Eclipse 프로젝트로 변환• Maven 기반으로 개발된 프로젝트를 Eclipse 프로젝트로 변환하는 작업은

간단하다 . 프로젝트 디렉토리로 이동한 다음 "mvn eclipse:eclipse" 명령어를 실행하면 Eclipse 기반 프로젝트로 변경된며 .project, .classpath 파일들이 자동적으로 생성된다 . .classpath 파일을 열어보면 pom.xml 파일에서 의존관계에 있는 모든 라이브러리들이 자동적으로 추가되어 있는 것을 확인할 수 있다 .

• 예를 들어 pom.xml 파일이 다음과 같이 설정되어 있다

• .classpath 는 다음과 같이 추가된다

Maven 기반 Eclipse 프로젝트 활용

<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope></dependency>

<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>

Page 17: TSA System Development MAVEN

Maven 라이브러리 자바소스 분리 배포

라이브러리 배포할 때 자바 소스까지 분리해서 배포• Eclipse 기반으로 애플리케이션을 개발할 때 F3 나 디버깅을 많이 이용할

것이다 . 이 기능들을 이용할 때 불편했던 점은 외부 라이브러리에 대한 소스 코드가 존재하지 않아 소스 코드를 분석하는데 한계가 있었던 것이 사실이다 . 그러나 Maven 을 이용할 경우 이 같은 단점을 보완할 수 있다 . Maven 을 이용하여 소스 코드를 배포하는 모든 라이브러리의 소스 코드는 자동적으로 Lo-cal Repository 에 다운받아져 위와 같이 설정이 가능하기 때문에 Eclipse 에서 외부 라이브러리 소스코드에 접근하기 용이해진다 .

디폴트 pom.xml 을 사용할 경우 자바 프로젝트가 생성된다 . 만약 웹 애플리케이션을 생성하기 위하여 WTP 기반으로 애플리케이션을 개발하고자 한다면 pom.xml 에 다음과 같은 설정을 추가함으로서 해결할 수 있다 .

<plugins> <plugin> <artifactId>maven-eclipse-plugin</artifactId> <version>2.4</version> <configuration> <downloadSources>true</downloadSources> <downloadJavadocs>true</downloadJavadocs> <wtpversion>1.5</wtpversion> </configuration> </plugin></plugins>

Page 18: TSA System Development MAVEN

Maven 을 이용하여 생성한 프로젝트를 import 하면 빌드 에러가 발생할 것이다 . 그 이유는 앞의 .classpath 에서 확인할 수 있듯이 M2_REPO 가 classpath variable 에 추가되어 있지 않기 때문이다 . Window || Preferences || Java || Build Path || Classpath Variables 로 이동한 다음 M2_REPO 를 추가할 수 있다 .

M2_REPO 설정하기

Page 19: TSA System Development MAVEN

사내 Maven Repository 의 구축 사내 Maven Repository 구축의 필요성

사외 Maven Repository 사내 Maven Repository

Page 20: TSA System Development MAVEN

사내 Maven Repository 의 구축 Artifactory 활용 ( 오픈소스 )

• http://www.jfrog.org/download.php 에서 Artifactory 최신버전 다운로드• JDK 5.x 이상을 설치• Tomcat 5.5 이상을 설치

Artifactory 는 웹 애플리케이션으로 구현되어 있다 . 다운 받은 Artifac-tory 최신 버전을 풀어보면 webapps 디렉토리 아래에 artifacto-ry.war 파일을 찾을 수 있다 .

이 artifactory.war 파일을 TOMCAT_HOME/webapps 디렉토리 아래에 복사한다 . TOMCAT_HOME/bin 디렉토리 아래에 catalina.bat 파일을 열어 JAVA_OPTS 에 다음 항목을 추가한다 .• JAVA_OPTS = -Dartifactory.home=D:\Devs\Tools\artifac-

tory-1.2.2 TOMCAT 에 추가하지 않고 시스템 환경 변수에 추가해도 된다 . artifac-

tory.home 에 설정해야 하는 디렉토리는 Artifactory 최신 버전의 압축을 푼 디렉토리이다 . Artifactory 는 Artifactory 설치 디렉토리 하위의 data 디렉토리를 이용하기 때문에 위 항목을 반드시 추가해야 한다 .

Artifactory 설치는 위 과정만 거치면 간단하게 설치할 수 있다 .

Page 21: TSA System Development MAVEN

Artifactory 사용하기 라이브러리를 분리해서 관리하기 위해 Artifactory 를 다음과 같이 설정하는

것이 가능하다 . <ARTIFACTORY_INSTALLATION_FOLDER>/etc/artifacto-ry.config.xml 파일을 만든 후 다음과 같이 설정할 수 있다 .

<?xml version="1.0" encoding="UTF-8"?><config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://artifactory.jfrog.org/xsd/1.0.0" xsi:schemaLocation="http://artifactory.jfrog.org/xsd/1.0.0” http://www.jfrog.org/xsd/artifactory-v1_0_0.xsd"> <!-- Backup every 12 hours --> <!--<backupCronExp>0 0 /12 * * ?</backupCronExp>--> <localRepositories> <localRepository> <key>private-internal-repository</key> <description>Private internal repository</description> <handleReleases>true</handleReleases> <handleSnapshots>true</handleSnapshots> </localRepository> <localRepository> <key>3rd-party</key> <description>3rd party jars added manually</description> <handleReleases>true</handleReleases> <handleSnapshots>false</handleSnapshots> </localRepository> </localRepositories> <remoteRepositories> <remoteRepository> <key>ibiblio</key> <handleReleases>true</handleReleases> <handleSnapshots>false</handleSnapshots> <excludesPattern>org/artifactory/**,org/jfrog/**</excludesPattern> <url>http://repo1.maven.org/maven2</url> </remoteRepository> </remoteRepositories></config>

Page 22: TSA System Development MAVEN

Artifactory 사용하기 앞의 설정은 라이브러리를 3 가지 용도로 나뉘어 관리하겠다는 것이다 . 중앙 Maven

Repository 의 Mirror 역할을 하게 될 Repository(ibiblio), 3rd party 라이브러리를 관리하기 위한 Repository(3rd-party), 사내에서 개발되는 라이브러리를 관리하기 위한 Repository(private-internal-repository) 로 나누고 있다 . 물론 사내 정책에 따라 더 많은 Repository 를 관리하는 것 또한 가능하다 .

위와 같이 설정한 다음 Tomcat 을 시작한 다음 Artifactory 에 접근할 수 있다 . http://localhost:8080/artifactory 로 접근하면 Artifactory 로그인 화면에 접근할 수

있다 . host 파일에 서버명을 설정하여 사용할 수 있다 .

Artifactory 의 디폴트 사용자는 UserName : admin, Password : passwordrepository. javajigi.net 127.0.0.1

Page 23: TSA System Development MAVEN

Artifactory 사용하기 Maven 빌드툴이 새로 설치한 Artifactory 를 사용할 수 있도록 설정하는 것이다 .

사내 Maven Repository 를 사용하도록 설정하는 방법은 다음과 같다 . USER_HOME/.m2/settings.xml 파일을 다음과 같이 설정한다 . 디폴트의 경우 C:\

Documents and Settings\ 유저 \.m2\settings.xml 파일을 다음과 같이 설정했다 . Artifactory 의 디폴트 사용자는 UserName : admin, Password : password

<settings 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/xsd/settings-1.0.0.xsd"> <profiles> <profile> <id>dev</id> <properties> <tomcat6x.home>D:/Devs/Servers/Tomcat-6.0.14</tomcat6x.home> </properties> <repositories> <repository> <id>central</id> <url>http://repository.javajigi.net:8080/artifactory/repo</url> <snapshots><enabled>false</enabled></snapshots> </repository> <repository> <id>snapshots</id> <url>http://repository.javajigi.net:8080/artifactory/repo</url> <releases><enabled>false</enabled><releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>central</id> <url>http://repository.javajigi.net:8080/artifactory/repo</url> <snapshots><enabled>false</enabled><snapshots> </pluginRepository> <pluginRepository> <id>snapshots</id> <url>http://repository.javajigi.net:8080/artifactory/repo</url> <releases><enabled>false</enabled><releases> </pluginRepository> </pluginRepositories> </profile> </profiles></settings>

Page 24: TSA System Development MAVEN

Artifactory 사용하기 위와 같이 설정한 다음 Maven 빌드툴을 실행해보자 . Maven 중앙 Repository 에서

다운되는 모든 라이브러리가 Artifactory Repository 에 다음과 같이 저장된다 .

Page 25: TSA System Development MAVEN

Artifactory 에 라이브러리 배포하기 개발하고 있는 라이브러리를 사내 Maven Repository 에 배포하여 관리할 필요가 있

다 . 프로젝트간의 Dependency 를 관리하기 위하여 개발 라이브러리를 사내 Maven Repository 에 배포하고 사용할 수 있도록 개발 환경을 설정하는 것이 중요하다 .

Artifactory 에 라이브러리를 배포하는 방법은 Artifactory 관리툴을 이용하는 방법과 Maven 빌드툴을 이용하는 방법이 있다 .

Artifactory 관리툴을 이용하는 방법은 간단하다 . Artifactory 관리툴의 Deploy an artifact 를 이용하여 새로운 라이브러리를 배포할 수 있다 . 배포할 라이브러리를 업로드하면 다음과 같이 라이브러리에 대한 정보를 입력하는 것이 가능하다 .

Page 26: TSA System Development MAVEN

Artifactory 에 라이브러리 배포하기 앞의 방법은 3rd party 라이브러리를 관리할 때 유용하게 사용할 수 있는 방법이다 .

개발하고 있는 라이브러리를 매번 이 방식으로 배포하기에는 적합하지 않다 . 개발을 진행하는 중에는 상당히 자주 배포할 필요가 있기 때문에 개발 환경에 바로 배포할 수 있어야 한다 . Maven 빌드툴은 deploy goal 을 통하여 사내 Repository 에 배포하는 것이 가능하도록 지원한다 .

로컬에 설치한 Artifactory 에 개발 라이브러리를 배포하기 위해서 먼저 USER_HOME/.m2/settings.xml 파일에 다음과 같이 Artifactory 인증에 필요한 정보를 추가해야 한다 .

Artifactory 에 로그인할 때 사용했던 username 과 password 를 이용하여 인증이 가능하도록 설정한다 .

<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-in-stance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>organisation-internal</id> <username>admin</username> <password>password</password> </server> </servers> <profiles> .... </profiles></settings>

Page 27: TSA System Development MAVEN

Artifactory 에 라이브러리 배포하기 다음은 개발 프로젝트의 pom.xml 파일에 다음과 같이 배포할 서버를 지정해야 한다 .

위와 같이 설정한 다음 "mvn deploy" 를 실행하면 로컬에 설치한 Artifactory 에 개발 라이브러리를 배포하는 것이 가능하다 .

개발 라이브러리를 배포하면 다음과 같이 private-internal-repository 에 배포되게 된다 .

<distributionManagement> <repository> <id>organisation-internal</id> <name>MyCompany Repository</name> <url>http://repository.javajigi.net:8080/artifactory/private-internal-repository</url> </repository> </distributionManagement>

Page 28: TSA System Development MAVEN

사내 Maven Repository 의 구축 참조Tomcat - Zero configuration

• http://wiki.jfrog.org/confluence/display/RTF/Deploying+the+WAR+File• artifactory 를 다운 받아 artifactory.war 를 tomcat 의 webapps 폴더에 넣는다 .

The $ARTIFCTORY_HOME Folder• zero configuration 에서 아주 중요한 곳으로 , artifactory 설정 등을 저장하는 폴더 .• artifactory 가 tomcat에서 처음 실행되면 $ARTIFACTORY_HOME 변수에 저장한다 .• $ARTIFACTORY_HOME=${user.home}/.artifactory

$ARTIFACTORY_HOME 을 변경하려면• tomcat의 시작 인자에 -Dartifactory.home=$ARTIFACTORY_HOME 에 지정하거나 ,• $ARTIFACTORY_HOME 환경 변수를 설정한다 .

특정 ARTIFACTORY_HOME에 수동 설치• $ARTIFACTORY_HOME 으로 지정한 폴더에 artifactory를 푼다 .• 이 곳에 $ARTIFACTORY_HOME/etc/artifactory.config.xml 가 존재하는 것으로 $ARTIFACTORY_HOME으로 인정한다 .• tomcat의 vm 인자에 -Dartifactory.home=$ARTIFACTORY_HOME 에 지정 . 혹은 tomcat 5.5 이후는 $TOMCAT_HOME/bin/

setenv.sh의 JAVA_OPTS에 $ARTIFACTORY_HOME 을 지정하며 이전 버전은 $TOMCAT_HOME/bin/catalina.sh 에 지정

HTTPd 에 연동하기• Tomcat JK connector 를 이용

JKMount /artifactory/* worker1• ajp connector 이용

#ProxyPreserveHost on # Use with Tomcat with the AJP connector #ProxyPass /artifactory/ ajp://localhost:8009/artifactory/ #ProxyPassReverse /artifactory/ ajp://localhost:8009/artifactory/

Page 29: TSA System Development MAVEN

사내 Maven Repository 의 구축 참조Changing the Default Database

• artifactory 는 기본 derby database 를 내장하여 production-level 의 저장소를 위한 데이터를 관리할 수 있다 .• http://wiki.jfrog.org/confluence/display/RTF/Changing+the+Default+Database

Once-and-Only-Once Identical Content Storage• 동일한 파일 ( 사이즈 , 이름 , 체크섬 ) 은 오로지 한 번만 저장되고 동일한 파일 저장 요구가 나타나면 메타데이터에 링크한다 .

• $ARTIFACTORY_HOME/etc/artifactory.system.properties file: artifactory.jcr.configDir=repo/[selected-storage-type]• 위 경로는 $ARTIFACTORY_HOME/etc 아래 상대경로 혹은 절대경로로 repo.xml file 이 있는 디렉토리이다 .

(which is a Jackrabbit configuration file)

Artifactory on MySQL• http://wiki.jfrog.org/confluence/display/RTF/Running+Artifactory+on+MySQL• $ARTIFACTORY_HOME/etc/artifactory.system.properties: artifactory.jcr.configDir=repo/mysql Note: this path is relative to $ARTIFACTORY_HOME/etc $ARTIFACTORY_HOME/etc/repo/mysql/repo.xml - DB 연결 정보 수정 .

특정 ARTIFACTORY_HOME 에 수동 설치• $ARTIFACTORY_HOME 으로 지정한 폴더에 artifactory 를 푼다 .• 이 곳에 $ARTIFACTORY_HOME/etc/artifactory.config.xml 가 존재하는 것으로 $ARTIFACTORY_HOME 으로

인정한다 .• tomcat 의 vm 인자에 -Dartifactory.home=$ARTIFACTORY_HOME 에 지정 . 혹은 tomcat 5.5 이후는

Page 30: TSA System Development MAVEN

Appfuse 프로젝트 활용 Appfuse 프로젝트 소개

• Appfuse 는 다양한 프레임워크의 조합으로 프로젝트를 진행할 때 템플릿을 생성하기 위한 오픈 소스 프로젝트이다 . Appfuse 를 이용하면 진행하는 프로젝트의 프레임워크 조합에 따라 샘플 프로젝트를 생성할 수 있다 . 이 샘플 프로젝트를 기반으로 개발 환경을 구축하는 것이 가능하다 .

Appfuse 가 지원하는 프레임워크• JSF Basic• Spring MVC Basic• Struts 2 Basic• Tapestry Basic

위 예는 프리젠테이션 레이어를 담당하는 프레임워크들이다 . 그외 Hibernate, IBatis 등 다양한 프레임워크의 조합의 템플릿 프로젝트를 생성하는

것이 가능하다 .

Page 31: TSA System Development MAVEN

Appfuse 프로젝트 생성 Appfuse 는 각 프레임워크의 조합에 따라 각각 다른 archetype 을 제공하며 Appfuse

에서 제공하는 archetype 은 http://appfuse.org/display/APF/AppFuse+QuickStart 에서 확인할 수 있다 . 이번 예제에서는 Spring MVC Basic 을 이용하도록 하겠다 .

먼저 DOS Prompt 에서 Appfuse 프로젝트를 생성하고자 하는 디렉토리로 이동한 다음 Spring MVC Basic archetype 을 생성한다 .mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-

basic-spring \-DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0 -DgroupId=net.javajigi.app \-DartifactId=myappfuse

위와 같이 실행하면 Appfuse 디렉토리 하위에 myappfuse라는 디렉토리가 생기면서 템플릿 프로젝트가 생성된다 . Maven 디폴트 디렉토리 구조로 다음과 같이 생성된다 .

Page 32: TSA System Development MAVEN

Appfuse 프로젝트 생성 Maven archetype 을 통하여 생성된 myappfuse 디렉토리 하위를 보면 pom.xml

파일이 생성되어 있는 것을 확인할 수 있다 . Appfuse 예제를 테스트하기 위하여 데이터베이스 설정을 해야 한다 . pom.xml 파일을 열어 자신의 데이터베이스 설정과 맞도록 수정해준다 . Mysql 데이터베이스를 사용하여 예제를 진행했다 .

<dbunit.dataTypeFactoryName> org.dbunit.dataset.datatype.DefaultDataTypeFactory</dbunit.dataTypeFactoryName><dbunit.operation.type>CLEAN_INSERT</dbunit.operation.type><hibernate.dialect>org.hibernate.dialect.MySQLInnoDBDialect</hibernate.dialect><jdbc.groupId>mysql</jdbc.groupId><jdbc.artifactId>mysql-connector-java</jdbc.artifactId><jdbc.version>5.0.5</jdbc.version><jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName><jdbc.url><![CDATA[jdbc:mysql://localhost/myappfuse?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=utf-8]]></jdbc.url><jdbc.username>root</jdbc.username><jdbc.password>password</jdbc.password>

위 와 같이 데이터베이스 설정을 변경한 다음 myappfuse 디렉토리로 이동한 다음 mvn install eclipse:eclipse 명령을 실행하여 Eclipse 프로젝트를 생성한다 . Eclipse 프로젝트를 생성한 다음 Eclipse 에서 import 한다 . mvn install eclipse:eclipse 명령을 실행하면 관련 라이브러리를 다운받는데 많은 시간이 소요된다 .

mvn install eclipse:eclipse 를 실행하면 Maven 기반의 프로젝트를 Eclipse 프로젝트로 변환할 뿐만 아니라 빌드까지 진행하게 된다 . 생성한 myappfuse 프로젝트는 WTP 기반의 프로젝트로 생성된다 .

Page 33: TSA System Development MAVEN

Appfuse 프로젝트 테스트 생성한 myappfuse 프로젝트를 Eclipse 에서 import 한다 .

appfuse 를 WTP 와 연동하기 위해서는 추가적인 설정이 필요하다 . 기본적으로 Maven 기반의 프로젝트를 Eclipse로 변경할 경우 특별한 추가 설정이 필요없다 . 그러나 app-fuse 는 Common 프로젝트와 이 프로젝트와 의존관계에 있는 프로젝트로 분리되어 있기 때문에 추가적인 설정이 필요하다 .

생성한 myappfuse 프로젝트의 pom.xml 파일을 열어보면 다음과 같이 war 파일과 의존관계를 가지는 것을 알 수 있다 .

<dependency> <groupId>org.appfuse</groupId> <artifactId>appfuse-${web.framework}</artifac-tId> <version>${appfuse.version}</version> <type>war</type> </dependency>

Maven 의 경우 war 파일과 의존관계에 있을 경우 빌드시 war 파일을 다운받아 빌드 디렉토리에 압축을 풀어 같이 배포할 수 있도록 지원한다 . appfuse 프로젝트를 생성하면 webapp 디렉토리는 다음 그림과 같다 .

Page 34: TSA System Development MAVEN

Appfuse 프로젝트 테스트 그러나 Maven 을 이용하여 빌드를 하면 target

디렉토리가 다음과 같이 구성되는 것을 확인할 수 있다 .

디폴트 Eclipse 플러그인은 src/main/webapp 를 디폴트 웹 리소스 디렉토리로 인식한다 . 그러나 빌드 후 Common war 파일이 target 디렉토리에 배포되기 때문에 WTP 설정 파일을 다음과 같이 변경해야 된다 .

.settings 디렉토리 아래의 org.eclipse.wst.common.-component 파일을 연다 .

<wb-resource deploy-path="/" source-path="src/main/we-bapp"/> 삭제<wb-resource deploy-path="/" source-path="target/myappfuse-1.0-SNAPSHOT"/> 추가<wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/> 삭제

Page 35: TSA System Development MAVEN

Appfuse 프로젝트 테스트다음은 myappfuse 프로젝트를 Tomcat 서버에 배포하여 테스트를 진행하는 과정을 보자 .Preferences -> Java -> Installed JREs 로 이동하여 JDK 를 추가한다 . 디폴트는 JRE 가 설정되어 있을 것이다 . JRE 가 아니라 JDK 를 추가한다 .

Page 36: TSA System Development MAVEN

Appfuse 프로젝트 테스트JDK 를 설정한 다음 Tomcat 서버를 추가해야 한다 .Preferences -> Server -> Installed Runtimes: Apache -> Tomcat 5.5 server 를

선택하여 로컬에 설치한 Tomcat 5.5 를 추가한다 . Tomcat 5.5 를 추가할 때 앞에서 추가한 JDK 5.0 을 사용하도록 한다 .

Window -> Show View -> Other -> Server -> Servers 로 이동한 다음 새로운 서버를 추가한다 . 오른쪽 클릭 New -> Server

Page 37: TSA System Development MAVEN

Appfuse 프로젝트 테스트앞의 myappfuse 프로젝트를 WTP 기반 프로젝트로 설정되어 있기 때문에 서버를

추가할 때 배포하도록 설정하는 것이 가능하다 . 추가한 서버를 시작한다 .

서버를 시작한 다음 http://localhost:8080/myappfuse 로 접근하면 다음과 같은 로그인 화면을 볼 수 있다면 appfuse 에 대한 설정이 성공한 것이다 .

admin/admin 으로 로그인하면 Appfuse 의 기능을 확인할 수 있다 .