슬라이드 1

Similar documents
슬라이드 1

No Slide Title

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

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

Intro to Servlet, EJB, JSP, WS

PowerPoint 프레젠테이션

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

thesis

Interstage5 SOAP서비스 설정 가이드

Microsoft PowerPoint - 04-UDP Programming.ppt

rmi_박준용_final.PDF

Microsoft PowerPoint - Smart CRM v4.0_TM 소개_ pptx

교육2 ? 그림

<property name="configlocation" value="classpath:/egovframework/sqlmap/example/sql-map-config.xml"/> <property name="datasource" ref="datasource2"/> *

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

KYO_SCCD.PDF


Spring Data JPA Many To Many 양방향 관계 예제

PowerPoint 프레젠테이션

슬라이드 1

Portal_9iAS.ppt [읽기 전용]

Spring Boot/JDBC JdbcTemplate/CRUD 예제

1

신림프로그래머_클린코드.key

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

JavaGeneralProgramming.PDF

歯Writing_Enterprise_Applications_2_JunoYoon.PDF

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

PowerPoint 프레젠테이션

JUNIT 실습및발표

어댑터뷰

MasoJava4_Dongbin.PDF

untitled

Network Programming

Spring Batch 2.0 시작하기

C# Programming Guide - Types

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

01-OOPConcepts(2).PDF

PowerPoint Presentation

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

JMF2_심빈구.PDF

09-interface.key

4 주차 - SPRING 환경설정및구현 Spring 기반의웹프로젝트를구성하고싶어요 T^T Spring 기반의웹환경구축 1. web.xml 수정으로 Spring 을설정하는방법 2. eclipse Spring Plug-In 을활용한템플릿프로젝트자동구성필수는아니지만해놓으면편

07 자바의 다양한 클래스.key

교육자료

J2EE & Web Services iSeminar

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

02 C h a p t e r Java

Spring

thesis

JMF3_심빈구.PDF

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

슬라이드 1

자바-11장N'1-502

ibmdw_rest_v1.0.ppt

PowerPoint Presentation

Spring Boot

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Chap7.PDF

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Intra_DW_Ch4.PDF

Corporate PPT Template

(jpetstore \277\271\301\246\267\316 \273\354\306\354\272\270\264\302 Spring MVC\277\315 iBatis \277\254\265\277 - Confluence)

untitled

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

쉽게 풀어쓴 C 프로그래밊

final_thesis

Web Application을 구성하는 패턴과 Spring ROO의 사례

제8장 자바 GUI 프로그래밍 II

Design Issues

Microsoft PowerPoint - 03-TCP Programming.ppt

J2EE Concepts

FileMaker 15 ODBC 및 JDBC 설명서

Microsoft PowerPoint - JCO2007_Spring2.0_발표자료_Rev-A.ppt [호환 모드]

제11장 프로세스와 쓰레드

DocsPin_Korean.pages

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

슬라이드 1

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

untitled

1217 WebTrafMon II

ETL_project_best_practice1.ppt

Model Investor MANDO Portal Site People Customer BIS Supplier C R M PLM ERP MES HRIS S C M KMS Web -Based

슬라이드 1

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

슬라이드 1

Secure Programming Lecture1 : Introduction

기술문서 작성 XXE Attacks 작성자 : 인천대학교 OneScore 김영성 I. 소개 2 II. 본문 2 가. XML external entities 2 나. XXE Attack 3 다. 점검방법 3 라.

단계

Dialog Box 실행파일을 Web에 포함시키는 방법

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

03장

PowerPoint 프레젠테이션

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

The Self-Managing Database : Automatic Health Monitoring and Alerting

05-class.key

Open Cloud Engine Open Source Big Data Platform Flamingo Project Open Cloud Engine Flamingo Project Leader 김병곤

Transcription:

1. 개요 - 실행환경연계통합레이어 (1/3) 연계통합레이어는타시스템과의연동기능을제공하는 Layer 임 전자정부개발프레임워크실행환경 서비스그룹 Presentation Layer 설명 업무프로그램과사용자간의 Interface 를담당하는 Layer 로서, 사용자화면구성, 사용자입력정보검증등의기능을제공함 Layer Presentation Layer Logic Business Layer Persistence Integration Layer Business Logic Layer 업무프로그램의업무로직을담당하는 Layer 로서, 업무흐름제어, 에러처리등의기능을제공함 Persistence Layer 데이터베이스에대한연결및영속성처리, 선언적인트랜잭션관리를제공하는 Layer 임 Foundation Layer ( 공통기반레이어 ) Integration Layer 타시스템과의연동기능을제공하는 Layer 임 환경 서비스그룹 Foundation Layer ( 공통기반레이어 ) 실행환경의각 Layer 에서공통적으로사용하는공통기능을제공함 - 1 -

1. 개요 - 실행환경연계통합레이어 (2/3) 연계통합레이어는 Naming Service, Integration Service, Web Service 등총 3 개의서비스를제 공함 실행환경 화면처리레이어 업무처리레이어 데이터처리레이어 연계통합레이어 MVC Internationalization Process Control DataSource Data Access Naming Service Ajax Support Security Exception Handling ORM TBD Transaction Integration Service UI Adaptor Web Service 공통기반레이어 AOP Cache Compress/Decompress Encryption/Decryption Excel File Handling File Upload/Download FTP Server Security ID Generation IoC Container Logging Mail Marshalling/Unmarshalling Object Pooling Property Resource Scheduling String Util XML Manipulation 실행환경서비스그룹서비스 - 2 -

1. 개요 - 실행환경연계통합레이어 (3/3) 연계통합레이어는 Naming Service, Web Service 등총 2 종의오픈소스 SW 를사용하고있음 서비스오픈소스 SW 버전 Naming Service Spring 2.5 Web Service Apache CXF 2.0-3 -

2. Naming Service 개요 (1/3) 서비스개요 원격에있는모듈및자원등을찾아주는서비스 Naming 서비스를지원하는 Naming 서버에자원을등록하여다른어플리케이션에서사용할수있도록공개하고, Naming 서버에등록되어있는자원을찾아와서이용할수있게함 - 4 -

2. Naming Service 개요 (2/3) 주요기능 자원등록 (bind, rebind) Naming 서버에로컬에있는자원을등록함 자원검색 (lookup) Naming 서버에등록되어있는자원을이름을이용하여조회함 자원등록해제 (unbind) Naming 서버에등록되어있는로컬자원에대한등록을해제함 Open Source Spring Framework : Naming Service는 Spring Framework에서제공하는기능을수정없이사용함 jee:jndi-lookup tag : Spring XML Configuration 설정파일에 JNDI 객체를 bean으로등록하는방식으로, JNDI 객체를 Lookup 만할수있다. 일반적으로가장많이사용된다. JndiTemplet 클래스 : Spring Framework에서 JNDI API를쉽게사용할수있도록제공하는 JndiTemplate class를직접사용하는방식으로, JNDI API 기능을모두사용해야할경우사용하는방식이다. - 5 -

2. Naming Service 개요 (3/3) Java Naming and Directory Interface(JNDI) 란 Java Naming and Directory Interface(JNDI) 는 Java 소프트웨어클라이언트가이름 (name) 을이용하여데이터 및객체를찾을수있도록도와주는네이밍 / 디렉토리서비스에연결하기위한 Java API 이다. - 6 -

2. Naming Service Spring XML Configuration 설정 (1/4) 개요 Spring Framework는 XML Configuration 파일에 JNDI 객체를설정할수있다. 단, 설정파일을통해서는 JNDI 객체를 lookup하는것만가능하므로, bind, rebind, unbind 기능을사용하려면 Using JndiTemplate 방식을사용해야한다. 설정 jee tag 를사용하기위해서는 Spring XML Configuration 파일의머릿말에 namespace 와 schemalocation 를추 가해야한다. <?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:jee="http://www.springframework.org/schema/jee" xsi:schemalocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd"> </beans> <!-- <bean/> definitions here --> - 7 -

2. Naming Service Spring XML Configuration 설정 (2/4) jndi-lookup tag jndi-lookup tag 는 JNDI 객체를찾아서 bean 으로등록해주는 tag 이다. <jee:jndi-lookup id="bean id" jndi-name="jndi name cache="true or false resource-ref="true or false lookup-on-startup="true or false expected-type="java class proxy-interface="java class"> <jee:environment> name=value ping=pong... </jee:environment> </jee:jndi-lookup> JNDI Environment 변수값을등록할때사용한다. environment element 는 'foo=bar' 와같이 < 변수명 >=< 변수값 > 형태의 List 를값으로가진다. Attribute 설명 Optional Data Type Default값 id Spring XML Configuration의 bean id이다. N String jndi-name 찾고자하는 JNDI 객체의이름이다. N String cache 한번찾은 JNDI 객체에대한 cache여부를나타낸다. Y boolean true resource-ref J2EE Container 내에서찾을지여부를나타낸다. Y boolean false lookup-on-startup 시작시에 lookup을수행할지여부를타나낸다. Y boolean true expected-type 찾는 JNDI 객체를 assign할타입을나타낸다. Y Class proxy-interface JNDI 객체를사용하기위한 Proxy Interface이다. Y Class - 8 -

2. Naming Service Spring XML Configuration 설정 (3/4) jndi-lookup tag Sample(2/2) With multiple JNDI environment settings 아래는복수 JNDI 환경설정을사용하여 JNDI 객체를찾아오는예제이다. <jee:jndi-lookup id="datasource" jndi-name="jdbc/mydatasource"> <!-- newline-separated, key-value pairs for the environment (standard Properties format) --> <jee:environment> foo=bar ping=pong </jee:environment> </jee:jndi-lookup> Complex 아래는이름외다양한설정을통해 JNDI 객체를찾아오는예제이다. <jee:jndi-lookup id="datasource jndi-name="jdbc/mydatasource" cache="true resource-ref="true lookup-on-startup="false" expected-type="com.myapp.defaultfoo proxy-interface="com.myapp.foo" /> - 9 -

2. Naming Service Spring XML Configuration 설정 (4/4) jndi-lookup tag Sample(1/2) Simple 가장단순한설정으로이름만을사용하여 JNDI 객체를찾아준다. 아래이름 jdbc/mydatasource 로등록되어 있는 JNDI 객체를찾아 userdao Bean 의 datasource property 로 Dependency Injection 하는예제이다. <jee:jndi-lookup id="datasource" jndi-name="jdbc/mydatasource" /> <bean id="userdao" class="com.foo.jdbcuserdao"> <!-- Spring will do the cast automatically (as usual) --> <property name="datasource" ref="datasource" /> </bean> With single JNDI environment settings 아래는단일 JNDI 환경설정을사용하여 JNDI 객체를찾아오는예제이다. <jee:jndi-lookup id="datasource" jndi-name="jdbc/mydatasource"> <jee:environment>foo=bar</jee:environment> </jee:jndi-lookup> - 10 -

2. Naming Service JndiTemplate 클래스사용 (1/3) 개요 JndiTemplate class 는 JNDI API 를쉽게사용할수있도록제공하는 wrapper class 이다. Bind 아래 Jndi.TemplateSample class 의 bind 메소드는 JndiTemplate 을이용하여 argument 'resource' 를 argument 'name' 으로 JNDI 객체로 bind 한다. import javax.naming.namingexception; import org.springframework.jndi.jnditemplate; public class JndiTemplateSample { private JndiTemplate jnditemplate = new JndiTemplate(); public boolean bind(final String name, Object resource) { try { jnditemplate.bind(name, resource); return true; catch (NamingException e) { e.printstacktrace(); return false;... - 11 -

2. Naming Service JndiTemplate 클래스사용 (2/3) Lookup JndiTemplate 을이용하여 argument 'name' 으로등록되어있는자원 (resource) 를찾을수있다. public Object lookupresource(final String name) { try { return jnditemplate.lookup(name); catch (NamingException e) { e.printstacktrace(); return null; Lookup with requiredtype JndiTemplate 의 lookup 메소드는찾고자하는자원의이름뿐아니라원하는타입 (Type) 을지정할수있다. public Foo lookupfoo(final String fooname) { try { return jnditemplate.lookup(fooname, Foo.class); catch (NamingException e) { e.printstacktrace(); return null; - 12 -

2. Naming Service JndiTemplate 클래스사용 (3/3) Rebind JndiTemplate 의 rebind 메소드를사용하여자원을재등록할수있다. Unbind public boolean rebind(final String name, Object resource) { try { jnditemplate.rebind(name, resource); return true; catch (NamingException e) { e.printstacktrace(); return false; JndiTemplate 의 unbind 메소드를사용하여등록된자원을등록해제할수있다. public boolean unbind(final String name) { try { jnditemplate.unbind(name); return true; catch (NamingException e) { e.printstacktrace(); return false; - 13 -

2. Naming Service 참고자료 Spring Framework JndiTemplate class API http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/jndi/jnditemplate.html The Spring Framework - Reference Documentation A.2.3. The jee schema http://static.springframework.org/spring/docs/2.5.x/reference/xsd-config.html#xsd-config-body-schemas-jee Java SE Guide to JNDI http://java.sun.com/j2se/1.5.0/docs/guide/jndi/index.html - 14 -

3. Integration Service 개요 (1/2) 서비스개요 Integration 서비스는전자정부표준프레임워크기반의시스템이타시스템과의연계를위해사용하는 Interface 의표준을정의한것이다. - 15 -

3. Integration Service 개요 (2/2) 목적 기존의전자정부시스템은타시스템과의연계를위해연계솔루션을사용하거나자체개발한연계모듈을사용해왔다. 기존에사용된연계솔루션및자체연계모듈은각각고유한설정및사용방식을가지고있어, 동일한연계서비스라할지라도사용하는연계모듈에따라각기다른방식으로코딩되어왔다. 본 Integration 서비스는이러한중복개발을없애고, 표준화된설정및사용방식을정의하여개발효율성을제고한다. 구성 Metadata 연계 Interface를사용하기위해필요한최소한의정보 ( 연계기관정보, 연계시스템정보, 연계서비스정보, 메시지형식등 ) 을정의하고있다. 연계서비스 API 연계서비스요청 Interface, 연계서비스제공 Interface, 연계메시지및메시지헤더등을정의하고있다. - 16 -

3. Integration Service Metadata(1/4) 논리모델 (1/2) 논리 ERD - 17 -

3. Integration Service Metadata(2/4) 논리모델 (2/2) Entity 설명 Entity 기관시스템서비스연계등록정보레코드타입레코드필드 연계서비스를제공또는사용하는기관을나타낸다. 하나의기관은다수의시스템을가지고있다. 설명 연계서비스를제공또는사용하는시스템을나타낸다. 하나의시스템은반드시하나의기관에속하며, 다수의서비스를가지고있다. 연계서비스를제공하는단위를나타낸다. 하나의서비스는반드시하나의시스템에속한다. 연계서비스를사용하기위한단위를나타낸다. 연계요청시스템이연계제공서비스를사용하기위해서등록해야하는정보를담고있다. 연계에사용되는메시지의형태를나타낸다. <Key, Value> 쌍의정보를담고있는레코드형태의타입을정의하고있다. 하나의레코드타입은다수의레코드필드를가지고있다. 레코드타입에속하는내부필드의정의를나타낸다. 필드의이름과타입을정의한다. 하나의레코드필드는반드시하나의레코드타입에속한다. - 18 -

3. Integration Service Metadata(3/4) 물리모델 (1/2) 물리 ERD - 19 -

3. Integration Service Metadata(4/4) 물리모델 (2/2) 물리ERD 설명 Integration 서비스 Metadata의물리모델은논리모델을실제물리적인 DB로구현하기위한모델로서, 물리ERD는 Oracle DB 를가정하여작성된것이다. 물리모델은 Hibernate 등과같은 Object Relational Mapping(ORM) 을사용하여 Access하는것을고려하여, 복수의 Attribute 를 Identifier로갖는 Entity를 Table로변환할때 Surrogate Key를도입하고, 기존 Identifier는 Unique Constraints로적용하여정의되었다. Entity Table 매핑 Entity 기관시스템서비스연계등록정보레코드타입레코드필드 Table ORGANIZATION SYSTEM SERVICE INTEGRATION RECORD_TYPE RECORD_TYPE_FIELD - 20 -

3. Integration Service 연계서비스 API(1/15) 구성 (1/2) Class Diagram - 21 -

3. Integration Service 연계서비스 API(2/15) 구성 (2/2) 구성요소설명 구성요소 설명 EgovIntegrationContext 연계서비스에대한설정및 EgovIntegrationService 객체를관리한다. EgovIntegrationMessage 연계서비스를통해주고받는표준메시지를정의한다. EgovIntegrationMessageHeader 연계서비스를통해주고받는표준메시지헤더를정의한다. EgovIntegrationMessageHeader:ResultCode 연계서비스결과코드를담고있는 enumeration이다. EgovIntegrationService 연계서비스를호출하기위해사용한다. EgovIntegrationServiceResponse 연계서비스를비동기방식으로호출한경우, 응답메시지를받기위해사용한다. EgovIntegrationServiceCallback 연계서비스를비동기방식으로호출한경우, 응답메시지를받기위한 Callback interface이다. EgovIntegrationServiceCallback:CallbackId 연계서비스를 Callback 을이용한비동기방식으로호출한경우, 요청메시지와응답메시지를연결하기위한 ID 를나타내는 interface 이다. EgovIntegrationServiceProvider 연계서비스를제공하기위해사용한다. - 22 -

3. Integration Service 연계서비스 API(3/15) EgovIntegrationContext EgovIntegrationContext는연계서비스에대한설정및 EgovIntegrationService 객체를관리한다. 연계서비스를사용하기위해서는 EgovIntegrationContext의 getservice 메소드를사용하여 EgovIntegrationService 객체를얻어와야한다. 아래는이름과주민번호를이용하여실명확인연계서비스를요청하는예제이다. public boolean verifyname(final String name, final String residentregistrationnumber) { // 연계 ID 가 "INT_VERIFY_NAME" 인연계서비스객체를얻어온다. EgovIntegrationService service = egovintegrationcontext.getservice("int_verify_name"); // 요청메시지생성 EgovIntegrationMessage requestmessage = service.createrequestmessage(); // 요청메시지작성 requestmessage.getbody().put("name", name); requestmessage.getbody().put("residentregistrationnumber", residentregistrationnumber); // 서비스요청 EgovIntegrationMessage responsemessage = service.sendsync(requestmessage); // 결과 return return responsemessage.getbody().get("result"); - 23 -

3. Integration Service 연계서비스 API(4/15) EgovIntegrationMessage(1/2) EgovIntegrationMessage는헤더부, 바디부, 첨부파일로구성된다. 헤더부 헤더부를 access 하기위한메소드는아래와같다. Method Summary EgovIntegrationMessageHeader void getheader() setheader(egovintegrationmessageheader header) 바디부 바디부를 access 하기위한메소드는아래와같다. Method Summary Map<String, Object> void getbody() setbody(map<string, Object> body) 바디부는다음값들로만구성될수있다. Java Primitive Type의 Wrapper 객체 (Boolean, Byte, Short, Integer, Long, Float, Double) BigInteger, BigDecimal String Calendar List<Object>, Map<String, Object> (* List와 Map의 element 역시위값들로구성되어야한다.) - 24 -

3. Integration Service 연계서비스 API(5/15) EgovIntegrationMessage(2/2) 첨부파일 첨부파일을 access 하기위한메소드는아래와같다. Method Summary Map<String, Object> void Object void Object getattachments() setattachments(map<string, Object> attachments) getattachment(string name) putattachment(string name, Object attachment) removeattachment(string name) - 25 -

3. Integration Service 연계서비스 API(6/15) EgovIntegrationMessageHeader EgovIntegrationMessageHeader는다음과같은정보를담고있다. Attribute Name Data Type 설명 IntegrationId String 연계ID ProviderOrganizationId String 연계제공기관ID ProviderSystemId String 연계제공시스템ID ProviderServiceId String 연계제공서비스ID ConsumerOrganizationId String 연계요청기관ID ConsumerSystemId String 연계요청시스템ID RequestSendTime Calendar 요청송신시각 RequestReceiveTime Calendar 요청수신시각 ResponseSendTime Calendar 응답송신시각 ResponseReceiveTime Calendar 응답수신시각 ResultCode ResultCode 결과코드 ResultMessage String 결과메시지 EgovIntegrationMessageHeader 는위 attribute 들에대한 get/set 메소드를정의하고있다. - 26 -

3. Integration Service 연계서비스 API(7/15) EgovIntegrationService(1/8) EgovIntegrationService는동기화방식의호출과비동기화방식의호출을지원한다. 동기화방식 (1/2) Sequence Diagram - 27 -

3. Integration Service 연계서비스 API(8/15) EgovIntegrationService(2/8) 동기화방식 (2/2) Timeout 을지정한예제 public boolean verifyname(final String name, final String residentregistrationnumber) { // EgovIntegrationContext 에서 EgovIntegrationService 객채를얻어온후, 요청메시지를 // 생성및작성한다.... // 동기방식으로연계서비스호출 (timeout = 5000 millisecond) EgovIntegrationMessage responsemessage = service.sendsync(requestmessage, 5000); // 응답결과처리... Timeout 을설정하지않은예제 ( 이경우 default timeout 값을사용한다 ) EgovIntegrationMessage responsemessage = servicd.sendsync(requestmessage); - 28 -

3. Integration Service 연계서비스 API(9/15) EgovIntegrationService(3/8) 비동기화방식개요 EgovIntegrationService의 sendasync 메소드는비동기화방식으로연계서비스를호출한다. sendasync 메소드는 Response 방식과 Callback 방식으로두가지방식이존재한다. Response를사용한비동기방식 : EgovIntegrationServiceResponse를이용한비동기호출방식이다. Response 방식의비동기호출은연계서비스를요청하는업무모듈의응답에대한 ownership를가지고있으며, 응답결과를스스로처리해야하는경우사용한다. Callback을사용한비동기방식 : EgovIntegrationServiceCallback을이용한비동기호출방식이다. Callback 방식의비동기호출에서연계서비스를요청하는업무모듈은단지요청만을수행하고, 응답에대한처리는 Callback 객체에게위임해도상관없는경우사용한다. - 29 -

3. Integration Service 연계서비스 API(10/15) EgovIntegrationService(4/8) Response를사용한비동기방식 (1/2) EgovIntegrationServiceResponse를이용한비동기호출방식이다. Response 방식의비동기호출은연계서비스를요청하는업무모듈의응답에대한 ownership를가지고있으며, 응답결과를스스로처리해야하는경우사용한다. Sequence Diagram - 30 -

3. Integration Service 연계서비스 API(11/15) EgovIntegrationService(5/8) Response 를사용한비동기방식 (2/2) Timeout 을지정한예제 public boolean verifyname(final String name, final String residentregistrationnumber) { // EgovIntegrationContext 에서 EgovIntegrationService 객채를얻어온후, 요청메시지를 // 생성및작성한다.... // 비동기방식으로연계서비스호출 EgovIntegrationServiceResponse response = service.sendasync(requestmessage); // response 객체를이용하여응답메시지를받기전에필요한업무를수행... // response 객체를이용하여응답메시지수신 (timeout = 5000 millisecond) EgovIntegrationMessage responsemessage = response.receive(5000); // 응답메시지처리... Timeout 을지정하지않은예제 ( 이경우 default timeout 값을사용한다 ) EgovIntegrationMessage responsemessage = response.receive(); - 31 -

3. Integration Service 연계서비스 API(12/15) EgovIntegrationService(6/8) Callback을사용한비동기방식 (1/3) EgovIntegrationServiceCallback을이용한비동기호출방식이다. Callback 방식의비동기호출은연계서비스를요청하는업무모듈은단지요청만을수행하고, 응답에대한처리는 Callback 객체에게위임해도상관없는경우사용한다. Sequence Diagram - 32 -

3. Integration Service 연계서비스 API(13/15) EgovIntegrationService(7/8) Callback 을사용한비동기방식 (2/3) 예제 (1/2) 아래는 Callback 방식으로연계서비스를호출하는예제이다. @Resource(name = "verifynameservicecallback") private EgovIntegrationServiceCallback callback; public boolean verifyname(final String name, final String residentregistrationnumber) { // EgovIntegrationContext 에서 EgovIntegrationService 객채를얻어온후, 요청메시지를 // 생성및작성한다.... // 비동기방식으로연계서비스호출 service.sendsync(requestmessage, callback); - 33 -

3. Integration Service 연계서비스 API(14/15) EgovIntegrationService(8/8) Callback 을사용한비동기방식 (3/3) 예제 (2/2) 아래는 Callback 모듈예제이다. public class VefiryNameServiceCallback { public CallbackId createid(egovintegrationservice service, EgovIntegrationMessage requestmessage) { // 본메소드는 EgovIntegrationService 를구현한연계 Adaptor 또는솔루션에서불리워진다. // 서비스와요청메시지를이용하여 CallbackId 를생성하여 return 한다. // 생성한 CallbackId 는응답메시지수신시, 해당하는서비스및요청메시지를식별하기위해 // 사용한다. // CallbackId 생성 CallbackId callbadkid =... return callbackid; public vod onreceive(callbackid callbackid, EgovIntegrationMessage responsemessage) { // 본메소드는처리해야하는응답메시지가도착했을때, 연계 Adaptor 또는솔루션에의해 // 불리워진다. // 응답메시지처리... - 34 -

3. Integration Service 연계서비스 API(15/15) EgovIntegrationServiceProvider EgovIntegrationServiceProvider interface 는연계서비스를제공하기위한 interface 로연계서비스를제공하는 모듈은본 interface 를 implements 해야한다. 예제 package itl.sample; import egovframework.rte.itl.integration.egovintegrationmessage; import egovframework.rte.itl.integration.egovintegrationserviceprovider; public class ServiceVerifyName implements EgovIntegrationServiceProvider { public void service(egovintegrationmessage requestmessage, EgovIntegrationMessage responsemessage) { String name = requestmessage.getbody().get("name"); String residentregistrationnumber = requestmessage.getbody().get("residentregistrationnumber"); // 실명확인 boolean result = varifyname(name, residentregistrationnumber); responsemessage.getbody().put("result", result); <bean id="serviceverifyname" class="itl.sample.serviceverifyname"/> - 35 -

4. WebService 개요 (1/4) 서비스개요 Integration Service 표준에따라작성된 Service 로, Web Service 를호출하고제공할수있도록지원한다. - 36 -

4. WebService 개요 (2/4) 주요기능 Web Service 호출 공개되어있는 Web Service 를호출하고, 처리결과를돌려준다. Web Service 공개 개발한업무모듈을 Web Service 로공개할수있도록 Proxy 등을제공하고, 완성된 Web Service 로공개한다. Open Source WebService는 Web Service를호출및제공하기위해서 Apache CXF를사용한다. - 37 -

4. WebService 개요 (3/4) Web Service란? W3C는 Web Service를 네트워크상에서발생하는컴퓨터간의상호작용을지원하기위한소프트웨어시스템 으로정의하고있다. 일반적으로 Web Service는인터넷과같은네트워크상에서접근되고, 요청된서비스를제공하는원격시스템에서수행되는 Web APIs이다. - 38 -

4. WebService 개요 (4/4) 문서구성 WebService는 Integration Service 표준에따라구현된서비스로서, Integration Service에서정의하고있는연계서비스 API를제공하고있다. 따라서본문서는 WebService를프로그램적으로호출하는방식이아닌, WebService를사용하기위한설정방법을중점적으로설명한다 ( 호출방식은 Integration Service의연계서비스 API를참조한다 ). 본문서의구성은아래와같다. Metadata 1. WebService 를사용하기위해필요한설정정보구조를설명한다. 설정방법 1. WebService 를사용하기위해필요한설정방법을설명한다. Client 모듈개발 1. WebService Client 모듈을개발하는방법을설명한다. Server 모듈개발 WebService Server 모듈을개발하는방법을설명한다. - 39 -

4. WebService Metadata(1/2) Metadata(1/2) 물리ERD WebService는 Integration Service 표준을따르므로 Integration Service의 Metadata와연동하여동작한다. ( 회색부분이 Integration Service의 Metadata이다 ) - 40 -

4. WebService Metadata(2/2) Metadata(2/2) Table 설명 Table 설명 WEB_SERVICE_SERVER 연계서비스를 Web Service 형태로공개 (publish) 하기위해필요한정보를담고있다. WEB_SERVICE_CLIENT Web Service 형태로공개 (publish) 되어있는연계서비스를호출하기위해필요한정보를담고있다. WEB_SERVICE_MAPPING 전자정부 Integration 서비스표준에따라개발된서비스가아닌기존의 Legacy 시스템의 Web Service 를호출하기위해, 표준메시지와 Web Service 메시지간의 mapping 정보를담고있다. - 41 -

4. WebService 설정방법 (1/3) 개요 WebService 를사용하기위해서는다음의설정이필요하다. pom.xml 파일에 dependency 설정추가 Spring XML Configuration 설정 pom.xml 파일에 dependency 설정추가 WebService 를사용하기위해서 pom.xml 의 dependencies tag 에다음 dependency 를추가한다. <version/> element 의값인 ${egovframework.versioin 에는사용할 egovframework 의 version 을기재한다. <dependency> <groupid>egovframework.rte</groupid> <artifactid>egovframework.rte.itl.webservice</artifactid> <version>${egovframework.version</version> </dependency> - 42 -

4. WebService 설정방법 (2/3) Spring XML Configuration 설정 (1/2) WebService를위한기본적인설정이포함된 context-webservice.xml 파일을 Spring XML Configuration 파일에 import한다. <import resource="classpath:/egovframework/rte/itl/webservice/context/context-webservice.xml"/> 그리고 Context 와 DataSource 를등록해야한다.(DataSource 의경우, 프로젝트에서사용하는것이있을경우 설정하지않아도된다. 단, 반드시 id 가 datasource 이여야한다.) <!-- EgovWebServiceContext 이다. organizationid 와 systemid 는현재시스템의기관 ID 및시스템 ID 를넣어야한다. --> <bean id="egovwebservicecontext" class="egovframework.rte.itl.webservice.egovwebservicecontext" init-method="init"> <property name="organizationid" value="org_egov"/> <property name="systemid" value="sys00001"/> <property name="defaulttimeout" value="5000"/> <property name="integrationdefinitiondao" ref="integrationdefinitiondao"/> <property name="webserviceserverdefinitiondao" ref="webserviceserverdefinitiondao"/> <property name="webserviceclientdefinitiondao" ref="webserviceclientdefinitiondao"/> <property name="typeloader" ref="typeloader"/> <property name="classloader" ref="classloader"/> </bean> 이부분 ( 기관 ID, 시스템 ID, defaulttimeout) 만수정하면된다. 나머지 DAO 및 typeloader, classloader 는 context-webservice.xml 파일에정의되어있다. - 43 -

4. WebService 설정방법 (3/3) Spring XML Configuration 설정 (2/2) <!-- DataSource 설정이다. 시스템에맞게재작성해야한다. 아래는 HSQL Sample 이다. --> <bean id="datasource" class="org.apache.commons.dbcp.basicdatasource" destroy-method="close"> <property name="driverclassname" value="net.sf.log4jdbc.driverspy"/> <property name="url" value="jdbc:log4jdbc:hsqldb:hsql://localhost/test"/> <property name="username" value="sa"/> <property name="password" value=""/> <property name="defaultautocommit" value="false"/> <property name="poolpreparedstatements" value="true"/> </bean> - 44 -

4. WebService Client 모듈개발 (1/2) 개요 Client 모듈을설정하기위해서는다음과정이필요하다. Metadata WEB_SERVICE_CLIENT에설정추가 (Optional) Metadata WEB_SERVICE_MAPPING에설정추가 Metadata WEB_SERVICE_CLIENT에설정추가 Client 모듈을설정하기위해서는 Metadata의 WEB_SERVICE_CLIENT Table에설정을추가해야한다. 다음과같이 Integration 서비스의 Metadata인 INTEGRATION Table에연계등록정보가설정되어있다고가정한다. ( 기관, 시스템, 서비스, 메시지타입등의정보는설정되어있으며, 개발하는시스템은 'SYSTEM_CONSUMER' 라고가정함 ) INTEGRATION ID PROVIDER_SERVICE_KEY CONSUMER_SYSTEM_KEY DEFAULT_TIMEOUT USING_YN VALIDATE_FROM VALIDATE_TO INT_VERIFY_NAME SERVICE_VERIFY_NAME SYSTEM_CONSUMER 5000 Y NULL NULL Web Service 'SERVICE_VERIFY_NAME' 를호출하기위해서 WEB_SERVICE_CLIENT에 'SERVICE_VERIFY_NAME' 을 SERVICE_KEY로갖는설정을추가해야한다. WEB_SERVICE_CLIENT SERVICE_KEY WSDL_ADDRESS NAMESPACE SERVICE_NAME PORT_NAME OPERATION_NAME SERVICE_VERIFY_NAME http://localhost:8080/sample/services/verifyname?wsdl http://itl/sample/ VerifyNameService VerifyNamePort service - 45 -

4. WebService Client 모듈개발 (2/2) (Optional) Metadata WEB_SERVICE_MAPPING에설정추가 만약호출하는 Web Service가전자정부 Integration 서비스표준에따라개발된서비스가아닌경우, 메시지헤더부가다를수있어별도의 Mapping 정보가필요하다. 전자정부 Integration 서비스표준은 Web Service Header부에들어갈 Attribute들이 EgovIntegrationMessageHeader에정의되어있고, 바디부는 EgovIntegrationMessage의 body에정의되어있으므로별도의 mapping 정보없이 header와 body 부의구분이가능하지만, 표준을따르지않은 Web Service 의경우 EgovIntegrationMessage의 body부에정의되어있는일부값들을헤더에포함시켜야한다. - 46 -

4. WebService Server 모듈개발 (1/2) 개요 Web Service Server 모듈을개발하는과정은다음과같다. web.xml 파일에 EgovWebServiceServlet 추가 Metadata WEB_SERVICE_SERVER 설정추가 web.xml 파일에 EgovWebServiceServlet 추가 web.xml 에 EgovWebServiceServlet 설정을추가한다. <servlet> <description></description> <display-name>egovwebserviceservlet</display-name> <servlet-name>egovwebserviceservlet</servlet-name> <servlet-class>egovframework.rte.itl.webservice.egovwebserviceservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>egovwebserviceservlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> 개발한 Server 모듈을공개할 URL path 를설정한다. WEB_SERVICE_SERVER 의 ADDRESS 는이값에대한상대적인위치를나타낸다. - 47 -

4. WebService Server 모듈개발 (2/2) Metadata WEB_SERVICE_SERVER 설정추가 다음과깉이 Integration 서비스의 Metadata인 INTEGRATION Table에연계등록정보가설정되어있다고가정한다. ( 기관, 시스템, 서비스, 메시지타입등의정보는설정되어있으며, 공개할서비스는 'SERVICE_VERIFY_NAME' 이라고가정함 ) INTEGRATION ID PROVIDER_SERVICE_KEY CONSUMER_SYSTEM_KEY DEFAULT_TIMEOUT USING_YN VALIDATE_FROM VALIDATE_TO INT_VERIFY_NAME SERVICE_VERIFY_NAME SYSTEM_CONSUMER 5000 Y NULL NULL Web Service 'SERVICE_VERIFY_NAME' 를공개하기위해서 WEB_SERVICE_SERVER에 'SERVICE_VERIFY_NAME' 을 SERVICE_KEY로갖는설정을추가해야한다. WEB_SERVICE_SERVER SERVICE_KEY ADDRESS NAMESPACE SERVICE_NAME PORT_NAME OPERATION_NAME SERVICE_VERIFY_NAME /VerifyName http://itl/sample/ VerifyNameService VerifyNamePort service <servlet-mapping> tag의 <url-pattern> tag의값은서비스를제공하기위한주소로, WEB_SERVICE_SERVER Table의 ADDRESS Column 값은 <url-pattern> tag값에대한상대위치를나타낸다. 예를들어, Web Application의 IP가 192.168.0.1, Port가 8080, Context Root가 Sample, url-patterns이 /services/* 인경우, 위 'SERVICE_VERIFY_NAME' 의 WSDL Address는 http://192.168.0.1:8080/sample/services/verifyname?wsdl이다. - 48 -