====== 전자정부 표준프레임워크 2.7 기반 개발 시작하기(Getting Started) ======
===== 개요 =====
본 가이드는 전자정부 표준프레임워크 기반의 단순한 응용프로그램(HelloWorld)를 직접 실습해 봄으로써 빠른 시간 내에 전자정부 프레임워크의 기본 기능을 파악하기 위하여 제공한다. 본 가이드의 사용자는 java 및 spring framework에 대한 기본적인 지식이 있다는 것을 가정하였다.
아래의 3가지 단계에 따라 순서대로 따라하기 방식으로 진행된다.
- 개발환경 설치 : 실습을 위한 개발환경을 구축한다.
- 프로젝트 생성 : 제공한 샘플 프로젝트를 이용하여 HelloWorld 응용 어플리케이션을 생성하고 실행해 본다.
- 자세히 들여다 보기 : 생성/실행한 프로젝트의 내부 소스코드를 학습하여 전자정부 표준 프레임워크 기반의 응용 어플리케이션 구현의 원리를 이해한다.
전자정부 표준 프레임워크 기반의 Hello World 응용 프로그램 개발 및 실행을 위한 구현도구의 환경정보는 다음과 같다.
^ 항목 ^ 설명 ^ JDK ^ 비고 ^
| 개발환경 | Eclipse 4.2(Juno) | JDK 1.6 이상 필요 | 구현도구에 포함 |
| 실행환경 | Spring 3.0.5 | JDK1.5 ~ 1.8의 환경 | JavaEE(J2EE) |
* (2.7) JavaEE(J2EE), JDK1.5 ~ 1.8의 환경 (단, 개발환경 2.7 이상에서는 JDK 1.6 이상 필요)
===== 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:dev:mavenrepository_2.0.zip|}} 파일을 임의의 디렉토리에 압축 해제하여 설치한다.
=== 종속라이브러리 설치순서 ===
* Maven 설정파일 및 종속라이브러리를 포함한 {{:egovframework:dev:mavenrepository_2.0.zip|}} 를 다운로드 한다.
* 다운로드 받은 파일은 임의의 디렉토리에서 압축해제한다.(압축해제한 디렉토리는 **__//[MavenRepository 설치디렉토리]//__** 로 명명한다.)
* 텍스트 에디터를 이용하여 **__//[MavenRepository 설치디렉토리]//__**/settings.xml 파일의 localRepository 항목의 값을 다음과 같이 수정한다.
...
[MavenRepository 설치디렉토리]/repository
...
* settings.xml 참조 : {{:egovframework:dev:settings_2.0.zip|}}
{{:egovframework:dev:메이븐_설정파일_수정.png?800|setting.xml 파일에 repository 저장위치}}
* 구현도구를 실행한다.
* 구현도구의 window>preferences 메뉴를 선택하여 설정화면을 표시한다. 설정화면에서 Maven>Installtions 의 User Settings 항목을 **__//[MavenRepository 설치디렉토리]//__**/settings.xml 파일로 지정한다.
* Local Repository 항목에 settings.xml 파일을 수정한 내용과 일치하는 것을 확인한다. 만약 설정한 내용과 다른 경우, refresh settings 버튼을 클릭한다.
{{:egovframework:dev:메이븐_설정파일_지정.png?600|메이블 설정파일에 대한 화면}}
===== Step 2. 프로젝트 생성(Core) 및 실행 =====
==== 프로젝트 Import ====
프로젝트 생성 및 실행을 위하여 본 가이드는 {{:egovframework:dev:egovgettingstarted.zip|HelloWorld 프로젝트 파일}}를 제공한다. 아래의 순서에 따라 프로젝트를 생성한다.
=== 프로젝트 생성순서 ==
* {{:egovframework:dev:egovgettingstarted.zip|HelloWorld 프로젝트 파일}}을 다운로드 받아서 임의의 디렉토리에 저장한다. (다운로드 받은 파일의 압축을 해제할 필요는 없다.)
* 구현도구에서 File>Import.. 메뉴를 선택한다.
{{:egovframework:dev:프로젝트_반입.png?800|구현도구에서 File>Import.. 메뉴를 선택}}
* Import wizard에서 General>Existing Projects into Workspace 를 선택한다.
* next 버튼을 클릭한다.
{{:egovframework:dev:프로젝트_반입_1.png|Import wizard에서 General>Existing Projects into Workspace 를 선택후 next 버튼을 클릭}}
* Import Projects에서 select archive file 항목을 선택하고 제공한 egovGettingStarted.zip 파일을 지정한다.
* Finish 버튼을 클릭한다.
{{:egovframework:dev:프로젝트_임포트_2.png|Import Projects에서 select archive file 항목을 선택하고 제공한 egovGettingStarted.zip 파일을 지정하여 Finish 버튼을 클릭한다.}}
==== Maven을 이용한 빌드 ====
구현도구의 기능을 이용하여 컴파일, 테스트, 패키징 기능을 각각 수행할 수 있는 기능을 제공하고 있으나 Maven기반의 통합 빌드의 기능을 사용할 수도 있다. 여기서는 통합빌드를 수행해 보고 성공적인 빌드 결과를 확인한다.
=== 프로젝트 빌드순서 ===
* 개발환경에서 egovframework.guide 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Run As>Maven Build를 클릭한다.
{{:egovframework:dev:메이븐_빌드_수행1.png?600|개발환경에서 egovframework.guide 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Run As>Maven Build를 클릭}}
* Run 버튼을 클릭한다.
{{:egovframework:dev:메이븐_빌드_수행2.png?600|Run 버튼을 클릭}}
* 콘솔창에서 Maven 빌드의 결과를 확인하다. 메이븐 빌드는 프로젝트의 컴파일, 테스트, 패키징을 모두 수행하고 그 결과를 제공한다.
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building guide
[INFO]
[INFO] Id: egovframework:guide:jar:0.0.1-SNAPSHOT
[INFO] task-segment: [install]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:testCompile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test]
[INFO] Surefire report directory: D:\DEVELOP\EGOV\workspace\egovframework.guide\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running egovframework.guide.helloworld.HelloWorldServiceTest
log4j:INFO Using URL [file:/D:/DEVELOP/EGOV/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: 0.422 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar]
[INFO] [install:install]
[INFO] Installing D:\DEVELOP\EGOV\workspace\egovframework.guide\target\egovframework.guide-coreapp.jar to D:\Programs\Maven\repository\egovframework\guide\0.0.1-SNAPSHOT\guide-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Thu Jun 25 11:42:59 KST 2009
[INFO] Final Memory: 2M/14M
[INFO] ------------------------------------------------------------------------
==== HelloWorld 실행 ====
=== HelloWorld 실행순서 ===
* 프로젝트의 src/main/java에서 HelloWorldClient.java를 마우스 오른쪽 버튼으로 클릭하고 Run As>Java Application 을 클릭한다.
{{:egovframework:dev:helloworld_실행.png|프로젝트의 src/main/java에서 HelloWorldClient.java를 마우스 오른쪽 버튼으로 클릭하고 Run As>Java Application 을 클릭}}
* Console창에서 다음과 같은 실행 결과를 확인 할 수 있다.
{{:egovframework:dev:helloworld_실행결과.png|Console창에서 다음과 같은 실행 결과를 확인}}
==== 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:dev:junit_테스트_실행.png|프로젝트의 src/test/java에서 HelloWorld 서비스의 junit test case(HelloWorldServiceTest.java)를 마우스 오른쪽 버튼으로 클릭하고 Run As>Junit test 을 클릭}}
* JUnit 결과창에서 다음과 같이 테스트(testSayHello)의 수행시간 및 성공여부를 확인 할 수 있다.
{{:egovframework:dev:junit_테스트_결과.png|JUnit 결과창에서 다음과 같이 테스트(testSayHello)의 수행시간 및 성공여부를 확인}}
===== 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;
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() );
}
}