====== 전자정부 표준프레임워크 기반 개발 시작하기(Getting Started) ======
===== 개요 =====
본 가이드는 전자정부 표준프레임워크 기반의 단순한 응용프로그램(HelloWorld)를 직접 실습해 봄으로써 빠른 시간 내에 전자정부 프레임워크의 기본 기능을 파악하기 위하여 제공한다. 본 가이드의 사용자는 java 및 spring framework에 대한 기본적인 지식이 있다는 것을 가정하였다.
아래의 3가지 단계에 따라 순서대로 따라하기 방식으로 진행된다.
- 개발환경 설치 : 실습을 위한 개발환경을 구축한다.
- 프로젝트 생성 : 제공한 샘플 프로젝트를 이용하여 HelloWorld 응용 어플리케이션을 생성하고 실행해 본다.
- 자세히 들여다 보기 : 생성/실행한 프로젝트의 내부 소스코드를 학습하여 전자정부 표준프레임워크 기반의 응용 어플리케이션 구현의 원리를 이해한다.
전자정부 표준프레임워크 기반의 Hello World 응용 프로그램 개발 및 실행을 위한 구현도구의 환경정보는 다음과 같다.
^항목 ^설명 ^ 비고 ^
| OS | Windows 2000, xp, vista | |
| JDK | Java SE SDK 5.0 이상 | |
| IDE | Eclipse 4.2 | 구현도구에 포함 |
===== Step 1. 개발환경 설치 =====
전자정부 표준프레임워크에서 제공하는 구현도구(implementation tool) 및 HelloWorld 응용 어플리케이션을 위한 종속라이브러리를 이용하여 실습에 필요한 개발환경을 설치한다.
==== 개발환경설치 ====
먼저 eclipse 기반의 전자정부 표준프레임워크의 [[egovframework:dev2:clntinstall|구현도구(implementation tool) 설치]]를 참조하여 설치한다.
==== 플러그인 업데이트 ====
설치한 구현도구의 플러그인이 최신 모듈을 사용할 수 있도록 [[egovframework:dev2:imp:editor:customize_development_tool#사용법|구현도구(implementation tool) 플러그인 업데이트]]를 참조하여 업데이트를 수행한다.
==== Maven 환경설정 ====
시작하기 개발환경은 실제 프로젝트 수행환경과 달리 Nexus를 이용하지 않고, 종속 라이브러리를 Maven 로컬 파일저장소에 수동으로 복사하여 개발환경을 구축한다.
Maven의 로컬 파일 저장소를 설정하기 위하여 제공한 {{:egovframework:dev2:mavenrepository.zip|mavenrepository.zip}} 파일을 임의의 디렉토리에 압축 해제하여 설치한다.
=== 종속라이브러리 설치순서 ===
* Maven 설정파일 및 종속라이브러리를 포함한 {{:egovframework:dev2:mavenrepository.zip|mavenrepository.zip}} 를 다운로드 한다.
* 다운로드 받은 파일은 임의의 디렉토리에서 압축해제한다.(압축해제한 디렉토리는 **__//[MavenRepository 설치디렉토리]//__** 로 명명한다.)
* 텍스트 에디터를 이용하여 **__//[MavenRepository 설치디렉토리]//__**/settings.xml 파일의 localRepository 항목의 값을 다음과 같이 수정한다.
...
[MavenRepository 설치디렉토리]/repository
...
{{:egovframework:dev2:settings.zip|}}
{{:egovframework:dev2:guide_local_settings_xml.png|}}
* 구현도구를 실행한다.
* 구현도구의 window>preferences 메뉴를 선택하여 설정화면을 표시한다. 설정화면에서 Maven>Installtions 의 User Settings 항목을 **__//[MavenRepository 설치디렉토리]//__**/settings.xml 파일로 지정한다.
* Local Repository 항목에 settings.xml 파일을 수정한 내용과 일치하는 것을 확인한다. 만약 설정한 내용과 다른 경우, refresh settings 버튼을 클릭한다.
{{:egovframework:dev2:guide_preference_usersetting.png|}}
===== Step 2. 프로젝트 생성(Core) 및 실행 =====
==== 프로젝트 Import ====
프로젝트 생성 및 실행을 위하여 본 가이드는 {{:egovframework:dev2:egovgettingstarted.zip|HelloWorld 프로젝트 파일}}를 제공한다. 아래의 순서에 따라 프로젝트를 생성한다.
=== 프로젝트 생성순서 ==
* {{:egovframework:dev2:egovgettingstarted.zip|HelloWorld 프로젝트 파일}}을 다운로드 받아서 임의의 디렉토리에 저장한다. (다운로드 받은 파일의 압축을 해제할 필요는 없다.)
* 구현도구에서 File>Import.. 메뉴를 선택한다.
{{:egovframework:dev2:guide_import.png|}}
* Import wizard에서 General>Existing Projects into Workspace 를 선택한다.
* next 버튼을 클릭한다.
{{:egovframework:dev2:guide_select.png|}}
* Import Projects에서 select archive file 항목을 선택하고 제공한 egovGettingStarted.zip 파일을 지정한다.
* Finish 버튼을 클릭한다.
{{:egovframework:dev2:guide_importprojects.png|}}
==== Maven을 이용한 빌드 ====
구현도구의 기능을 이용하여 컴파일, 테스트, 패키징 기능을 각각 수행할 수 있는 기능을 제공하고 있으나 Maven기반의 통합 빌드의 기능을 사용할 수도 있다. 여기서는 통합빌드를 수행해 보고 성공적인 빌드 결과를 확인한다.
=== 프로젝트 빌드순서 ===
* 개발환경에서 egovframework.guide 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Run As>Maven Build를 클릭한다.
{{:egovframework:dev2:guide_mavenbuild.png|}}
* Run 버튼을 클릭한다.
{{:egovframework:dev2:guide_configuration.png|}}
* 콘솔창에서 Maven 빌드의 결과를 확인한다. 메이븐 빌드는 프로젝트의 컴파일, 테스트, 패키징을 모두 수행하고 그 결과를 제공한다.
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for egovframework:guide:jar:1.0.0
[WARNING] 'dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: hsqldb:hsqldb:jar -> duplicate declaration of version 1.8.0.10 @ line 282, column 17
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-surefire-plugin is missing. @ line 396, column 12
[WARNING] 'reporting.plugins.plugin.version' for org.codehaus.mojo:emma-maven-plugin is missing. @ line 448, column 12
[WARNING] 'reporting.plugins.plugin.version' for org.codehaus.mojo:surefire-report-maven-plugin is missing. @ line 453, column 12
[WARNING] 'reporting.plugins.plugin.version' for org.apache.maven.plugins:maven-javadoc-plugin is missing. @ line 478, column 12
[WARNING] 'reporting.plugins.plugin.version' for org.apache.maven.plugins:maven-jxr-plugin is missing. @ line 490, column 12
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building guide 1.0.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ guide ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ guide ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ guide ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ guide ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.7.1:test (default-test) @ guide ---
[INFO] Surefire report directory: D:\eclipse-eGovFrame-win32-2.0.0\workspace\egovframework.guide\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running egovframework.guide.helloworld.HelloWorldServiceTest
log4j:INFO Using URL [file:/D:/eclipse-eGovFrame-win32-2.0.0r/workspace/egovframework.guide/target/classes/log4j.xml] for automatic log4j configuration of repository named [default].
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.367 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ guide ---
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0/plexus-archiver-1.0.jar
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0/plexus-io-1.0.jar
Downloaded: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-io/1.0/plexus-io-1.0.jar (50 KB at 35.4 KB/sec)
Downloaded: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-archiver/1.0/plexus-archiver-1.0.jar (174 KB at 73.2 KB/sec)
[INFO] Building jar: D:\eclipse-eGovFrame-win32-2.0.0\workspace\egovframework.guide\target\egovframework.guide-coreapp.jar
[INFO]
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ guide ---
[INFO] Installing D:\eclipse-eGovFrame-win32-2.0.0\workspace\egovframework.guide\target\egovframework.guide-coreapp.jar to C:\repository\egovframework\guide\1.0.0\guide-1.0.0.jar
[INFO] Installing D:\eclipse-eGovFrame-win32-2.0.0\workspace\egovframework.guide\pom.xml to C:\repository\egovframework\guide\1.0.0\guide-1.0.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.147s
[INFO] Finished at: Thu Oct 13 10:58:49 KST 2011
[INFO] Final Memory: 4M/8M
[INFO] ------------------------------------------------------------------------
==== HelloWorld 실행 ====
=== HelloWorld 실행순서 ===
* 프로젝트의 src/main/java에서 HelloWorldClient.java를 마우스 오른쪽 버튼으로 클릭하고 Run As>Java Application 을 클릭한다.
{{:egovframework:dev2:guide_helloworld.png|}}
* Console창에서 다음과 같은 실행 결과를 확인 할 수 있다.
{{:egovframework:dev2:guide_helloworld_result.png|}}
==== HelloWorld 테스트 실행 ====
HelloWorld 프로젝트는 JUnit Test Framework 기반의 Test Case를 포함하고 있다. Test Case는 HelloWorldServiceImpl 클래스의 sayHello 메서드의 실행결과에 대한 결과값을 확인하도록 구현되어 있다. 제공한 구현도구에서 아래의 순서로 테스트를 수행한다.
=== HelloWorld 테스트 실행순서 ===
* 프로젝트의 src/test/java에서 HelloWorld 서비스의 junit test case(HelloWorldServiceTest.java)를 마우스 오른쪽 버튼으로 클릭하고 Run As>Junit test 을 클릭한다.
{{:egovframework:dev2:guide_junit.png|}}
* JUnit 결과창에서 다음과 같이 테스트(testSayHello)의 수행시간 및 성공여부를 확인 할 수 있다.
{{:egovframework:dev2:guide_junit_result.png|}}
===== Step 3. 자세히 들여다 보기 =====
==== 서비스 인터페이스 클래스 ====
다음은 HelloWorld 서비스의 인터페이스 클래스인 HelloWorldService이다. "String sayHello()" 메서드를 선언한다.
package egovframework.guide.helloworld;
public interface HelloWorldService {
public String sayHello();
}
==== 서비스 구현 클래스 ====
다음은 HelloWorld 서비스의 구현 클래스인 HelloWorldServiceImpl이다. 서비스 인터페이스 클래스인 HelloWorldService를 구현하고 있다.
package egovframework.guide.helloworld;
public class HelloWorldServiceImpl implements HelloWorldService{
private String name;
@Required
public void setName(String name) {
this.name = name;
}
public String sayHello() {
return "Hello " + name + "!!!" ;
}
}
==== 서비스 속성 정의 파일 ====
다음은 HelloWorld 서비스의 속성정의 파일 이다. helloworld를 name 속성으로 서비스 구현클래스를 정의하고 있으며 해당 서비스의 name 속성을 “egov framework”로 선언하였다.
egov framework
==== 클라이언트 클래스 ====
다음은 HelloWorld 서비스를 실행하기 위한 클라이언트 클래스 이다.
package egovframework.guide.helloworld;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloWorldClient {
private static Log logger = LogFactory.getLog(HelloWorldClient.class);
/**
* @param args
*/
public static void main(String[] args) {
String configLocation = "context-helloworld.xml";
ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
HelloWorldService helloworld = (HelloWorldSer-vice)context.getBean("helloworld");
logger.debug(helloworld.sayHello());
}
}
==== 테스트 클래스 ====
다음은 HelloWorld 서비스 클래스를 테스트하기 위한 단위 테스트 클래스이다.
package egovframework.guide.helloworld;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloWorldServiceTest {
private ApplicationContext context;
@Before
public void setUp() throws Exception {
String configLocation = "context-helloworld.xml";
context = new ClassPathXmlApplicationContext(configLocation);
}
@Test
public void testSayHello() {
HelloWorldService helloworld = (HelloWorldSer-vice)context.getBean("helloworld");
assertEquals( "Hello egov framework!!!", hel-loworld.sayHello() );
}
}