본 가이드는 전자정부 표준프레임워크 기반의 단순한 응용프로그램(HelloWorld)를 직접 실습해 봄으로써 빠른 시간 내에 전자정부 프레임워크의 기본 기능을 파악하기 위하여 제공한다. 본 가이드의 사용자는 java 및 spring framework에 대한 기본적인 지식이 있다는 것을 가정하였다.
아래의 3가지 단계에 따라 순서대로 따라하기 방식으로 진행된다.
전자정부 표준 프레임워크 기반의 Hello World 응용 프로그램 개발 및 실행을 위한 구현도구의 환경정보는 다음과 같다.
항목 | 설명 | JDK | 비고 |
---|---|---|---|
개발환경 | Eclipse 4.3(Kepler) / 4.4(Luna) | JDK 8은 개발환경 3.5.1 부터 적용가능 | 구현도구에 포함 (개발환경 3.5 - Kepler / 개발환경 3.5.1 - Luna) |
개발환경 | Spring 4.0.9 | JDK1.7 ~ 1.8의 환경 | JavaEE(J2EE) |
개발환경 3.2 버전을 사용하는 경우 이클립스 구동이 jdk1.6인 환경에서는 실행환경 3.1버전 까지만 사용이 가능하며, 실행환경 3.5버전을 사용하기 위해서는 이클립스 구동이 jdk 1.7인 경우에만 정상적인 개발환경 3.2 버전의 기능들을 이용할 수 있다. jdk 1.8을 적용해야 하는 환경에서는 개발환경 3.5.1 버전을 이용하여 개발이 가능하다.
전자정부 표준프레임워크에서 제공하는 구현도구(implementation tool) 및 HelloWorld 응용 어플리케이션을 위한 종속라이브러리를 이용하여 실습에 필요한 개발환경을 설치한다.
먼저 eclipse 기반의 전자정부표준 프레임워크의 구현도구(implementation tool) 설치를 참조하여 설치한다.
설치한 구현도구의 플러그인이 최신 모듈을 사용할 수 있도록 구현도구(implementation tool) 플러그인 업데이트를 참조하여 업데이트를 수행한다.
시작하기 개발환경은 실제 프로젝트 수행환경과 달리 Nexus를 이용하지 않고, 종속 라이브러리를 Maven 로컬 파일저장소에 수동으로 복사하여 개발환경을 구축한다. Maven의 로컬 파일 저장소를 설정하기 위하여 제공한 mvnrepository_3.5.zip 파일을 임의의 디렉토리에 압축 해제하여 설치한다.
<settings xmlns="http://maven.apache.org/settings/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <localRepository> [MavenRepository 설치디렉토리]/repository </localRepository> ... </settings>
위 다운로드가 안될 시 여기를 눌러서 받으세요.
프로젝트 생성 및 실행을 위하여 본 가이드는 HelloWorld 프로젝트 파일를 제공한다. 아래의 순서에 따라 프로젝트를 생성한다.
구현도구의 기능을 이용하여 컴파일, 테스트, 패키징 기능을 각각 수행할 수 있는 기능을 제공하고 있으나 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 프로젝트는 JUnit Test Framework 기반의 Test Case를 포함하고 있다. Test Case는 HelloWorldServiceImpl 클래스의 sayHello 메서드의 실행결과에 대한 결과값을 확인하도록 구현되어 있다. 제공한 구현도구에서 아래의 순서로 테스트를 수행한다.
다음은 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”로 선언하였다.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:annotation-config/> <bean name="helloworld" class="egovframework.guide.helloworld.HelloWorldServiceImpl"> <property name="name"> <value>egov framework</value> </property> </bean> </beans>
다음은 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() ); } }