GATEWAY V2.2 개발가이드

사 용 권 한

본 문서에 대한 서명은 ㈜유라클 내부에서 본 문서에 대하여 수행 및 유지관리의 책임이 있음을 인정하는 것임.

제.개정 이력

버전

변경일자

제.개정 내용

작성자

1.0

2014.03.18

최초작성

서버팀

  1. 개요

    1. 목적

본 문서는 모바일 하이브리드 서비스 앱 구축 프로젝트중 Mobile Server 개발을 위한 제반 사항을 기술한다.

  1. 고려사항

  • 매뉴얼 변경 시에는 근거를 명시하고 버전 관리를 정확하게 수행

  • 본 매뉴얼에 도식화 된 이미지는 모두 파워포인트 가로 문서로 첨부

  1. 시스템 구성

    1. Morpheus Server Platform 구성도(H/W 구성)

아래 그림은 Morpheus Server Platform의 시스템 구성도를 도식화한 것이다.

image1

  • H/W 에 대한 구성도 이다. DMZ 에는 보안을 위해 Relay Web Server 가 위치하고 내부망에는 WAS 및 DB, Storage 를 구성하여 소스 및 정보를 보호할 수 있도록 구성한다. 단 고객사의 보안 정책에 따라 WAS 의 위치는 변경될 수 있다.

  1. 시스템 구조도

아래 그림은 Mobile Server 시스템 구조도를 도식화한 것이다.

image2

  • Client 와 Mobile Server 간 HTTP 통신을 통하여 정의된 JSON 데이터 형식으로 송수신하고 웹 요청을 받은 Controller 가 Biz Logic 또는 Interface Module을 호출하거나 수행하여 서비스를 처리한다.

  1. 시스템 구성요소

구성요소

설명

비고

Spring Dispachter Servlet

  • Front Controller/ Spring MVC의 핵심요소 이다.

  • Controller가 수행시 웹 요청의 진입점 이고 웹 요청을 처리하며 결과 데이터를 클라이언트에게 응답 한다.

  • MVC 모델

Controller

  • Dispatcher Servlet을 통해 Mapping 된 Controller 이며 이를 통해 비즈니스 로직을 수행한다.

DAO 또는 Interface module 호출

Biz Logic

  • 비즈니스 로직을 분리하여 관리할 경우 사용

Interface Module

  • Legacy 또는 External 서비스와 연동을 위한 라이브러리

DB

  • 플랫폼에서 사용되는 데이터 저장

  • Oracle, MS-SQL, MySql

Legacy System

  • 플랫폼과 상호연동 하는 대상 기간계 시스템

  • File, Http, DB, FTP

통합 Admin

  • 모바일 서비스를 위해 필요한 관리 기능을 제공하며 이를 위해 필요한 설정 및 정보 등록을 한다.

  • UI 리소스관리

  • 앱 서비스 관리

  • 공지사항 관리

  • API 접근키 관리

  1. 소프트웨어 구성

아래 그림은 모바일 서버 플랫폼의 소프트웨어 구성도를 도식화한 것이다.

image3

구분

구성요소

제품내역

시스템 S/W

OS

Server

Linux, Unix, Windows 계열 OS

Network

TCP/IP

DBMS

Oracle, MS-SQL, MySql

WAS

Weblogic, Jeus, Tomcat, JBOSS(most overall WAS 지원)

Web Server

WebtoB, Apache (most overall Web Server 지원)

어플리케이션 S/W

개발 환경

Server

JDK SE 1.6 권장 (JDK 1.5 이상 지원)

Spring 3.1.2 Version, Mybatis 3.2.2 Version

Eclipse Helios 이상 권장

  1. 개발 절차

    1. 서버 개발 절차

아래와 같은 절차를 통해 분석 및 확장 개발을 수행한다.

image4

  • 기간계 시스템에서 제공 하는 연동 가이드 및 연동 모듈을 개발 하고 클라이언트와 G/W 서버간의 전문을 정의하여 배포 한다.

  1. API 서비스 개발

Spring 은 Model, View, Controller(MVC) 구조를 가지고 있으며 J2EE 애플리케이션 개발에 일관된 프레임웍을 제공함과 동시에 원하는 컴포넌트만 선택적으로 사용할 수 있다는 이점이 있다. Spring 의 Annotation 기반으로 RESTful API를 구현하여 클라이언트에 서비스를 제공한다.

  1. Controller 생성

    1. 사용 Annotation

    Spring Framework 에서는 Stereotype Annotation 을 활용하여 MVC 개발을 지원한다. 생산성 향상을 위해서 @Controller, @RequestMapping, @ Autowired Annotation 만을 사용한다. 또한 반드시 클라이언트 통신 Controller은 @RequestMapping의 URI를 /api로 시작하는 URI로 만들어야 한다.

    기타 Spring Framework 를 참고 하도록 한다.

구성요소

설명

@Controller

Controller 클래스를 정의

@Autowired

의존관계를 자동으로 설정한다.

@RequestMapping

웹 요청에 대한 메소드 매핑 Annotation

  1. Controller Class 생성 샘플

    • com.example.controller 폴더에 SampleCtrl.java 샘플파일을 확인한다.

    • @RequestMapping 웹 요청에 대한 수행할 Controller, Method 를 매핑 하기 위한 Annotation 이다.

구분

설명

method

  • HTTP Request Method 값을 할당한다.

  • RESTful API 에서 사용 가능한 Method는 POST, GET, PUT, DELETE 이다.

value

  • URL 값을 할당한다.(반드시 /api로 시작되는 URI이어야함)

-파일 소스

@Controller

public class SampleCtrl {

private Logger logger = LoggerFactory.getLogger(this.getClass().getName());

//WEB-INF/config/context/legacy-mybatis-context.xml파일에서 설정한 legacyDB 연결세션

@Autowired(required=true)

@Qualifier(“sqlSession_legacy”)

private SqlSession session;

@Autowired(required=true)

private MessageSource messageSource;

// //////////////////////////////////////////////////////////////////////

// !!!주의 확인: RequestMapping uri 는 반드시 /api로 시작 해야만 한다. // //////////////////////////////////////////////////////////////////////

@RequestMapping(method= RequestMethod.POST, value=”/api/msp/sample/{id}”)

public ModelAndView sampleList(HttpServletRequest request,

HttpServletResponse response){

// ////////////////////////////////////////////////////////////////////////////

// 클라이언트에서 넘어온 request 값 map으로 리턴해줌 (반드시 포함) //////////////////////////////////////////////////////////////////////////////

//rest로 넘어온 URI Path VARIABLES ATTRIBUTE 맵정보

Map<String,Object> uriPathVal =(Map<String,Object>)request.getAttribute(Const.REST_URI_PATH_VAL);

//클라이언트에서 넘어온 request(HEAD+BODY) 모든정보

Map<String,Object> reqMap = (Map<String,Object>)request.getAttribute(Const.HTTP_BODY);

//클라이언트에서 넘어온 공통 헤더 맵정보

Map<String,Object> reqHeadMap = (Map<String,Object>)request.getAttribute(Const.HEAD);

//클라이언트에서 넘긴 파라미터 맵정보

Map<String,Object> reqBodyMap = (Map<String,Object>)request.getAttribute(Const.BODY);

//클라이언트에서 넘길 Response 맵 세팅

MobileMap responseMap = new MobileMap();

//클라이언트 전달 헤더값에 기본으로 성공인 200번 코드로 세팅

reqHeadMap.put(Const.RESULT_CODE, Const.OK);

//클라이언트 전달 헤더값에 기본으로 성공메세지 Success로 세팅

reqHeadMap.put(Const.RESULT_MESSAGE, Const.SUCCESS);

responseMap.setHeadMap(reqHeadMap);

// ////////////////////////////////////////////////////////////////////////////

Map<String, Object> responseBodyMap= new HashMap<String, Object>();

try{

/********************************************************************************

* 이 부분에 비즈니스 로직을 코딩한다.

*******************************************************************************/

//Legacy DB조회

List<Map<String,Object>> userList =session.selectList(“Sample.getSampleData”,reqMap);

responseBodyMap.put(“userList”, userList);

/********************************************************************************

* 이 부분에 비즈니스 로직 마침. *******************************************************************************/

} catch (Exception e) {

e.printStackTrace();

responseMap.setResultCode(Const.EXCEPTION_ERROR);

if(e.getMessage() != null){

responseMap.setResultMessage(e.getMessage());

} else {

responseMap.setResultMessage(messageSource.getMessage(“500.error”, null , Locale.getDefault().ENGLISH ));

}

}

responseMap.setBodyMap(responseBodyMap);

return responseMap.jsonView();

}

}

  1. Mybatis maper XML 생성

    • kr.msp.samle.sqlmap 폴더에 SampleManage.xml 파일 생성

<!– 맵핑될 Mapper 클래스 경로 입력–>

<mapper namespace=”Sample”>

<select id=”getSampleData “

parameterType=”hashmap “

resultType=”hashmap “>

SELECT ‘홍길동’ USERNM , ‘TEST1’ USERID, ‘001’ USERSN FROM dual

union ALL

SELECT ‘테스트’ USERNM , ‘TEST2’ USERID, ‘002’ USERSN FROM dual

union ALL

SELECT ‘놀부’ USERNM , ‘TEST3’ USERID, ‘003’ USERSN FROM dual

union ALL

SELECT ‘흥부’ USERNM , ‘TEST4’ USERID, ‘004’ USERSN FROM dual

</select>

</mapper>

  1. Test

    • RESTClient Tool 을 사용하여 생성된 API를 테스트 한다. RESTClient Tool 사용법은 별도로 제공되는 사용법을 참고 하도록 한다. (참고사이트: http://rest-client.googlecode.com/)

image5

  1. 프레임워크 개발환경

    1. 개발환경

    • Mobile 서버 프레임워크 개발환경에 대해 설명한다.

  1. 개발 환경 소개

    • Mobile 서버 프레임워크의 비즈니스 프로그램 개발 및 API 테스트 등의 대한 지원 도구에 대해서 설명한다.

  1. IDE (Integrated Development Environment)

    • 통합된 개발 환경을 위해 Eclipse IDE 기반으로 제공한다.

  1. API Test Tool

    • rest-client 설치 및 사용 가이드에 대한 전반적인 사항을 정리한다. 아래 설치 가이드는 윈도우 7을 기준으로 작성한 것 입니다.

  1. 설치 전 사전 준비사항

    1. 자바 공식 홈페이지에서 JDK6 설치 파일을 다운로드 받는다.

  1. 설치 및 사용 가이드

    1. rest-client 다운로드 사이트

      *http://code.google.com/p/rest-client/downloads/list 에서 restclient-ui-2.5-jar-with-dependencies.jar* 파일을 선택하여 다운로드 한다.

    image6

  1. 다운로드 받은 restclient-ui-2.5-jar-with-dependencies.jar 파일을

    아래와 같이 연결 프로그램을 Java로 선택하여 실행 한다.

    image7

  1. rest-client 을 실행 하고 Method 탭에서 서버 URL 주소를 입력하고 HTTP

    Method를 POST로 선택한다.

    image8

  1. Headers 탭으로 이동하여 그림과 같이 HTTP Header Key, Value 을

    입력하고 추가 버튼을 눌러 적용한다.

    image9

  1. Body 탭으로 이동하여 Content-Type 을

    application/x-www-form-urlencoded 으로 Charset 값을 UTF-8 로 변경한다.

    image10

  1. Body 탭에서 아래와 같이 입력박스에 서버로 전송할 데이터를 입력한다.

    image11

  1. Go 버튼을 눌러 Body 데이터를 서버로 전송하면 아래 그림과 같이 HTTP

    Response Body 탭에서 처리 결과 응답값을 확인 할 수 있다.

    image12