GATEWAY 2.0 개발 가이드

사 용 권 한

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

제.개정 이력

버전

변경일자

제.개정 내용

작성자

1.0

2013.11

최초작성

이명보

1. 개요

1.1. 목적

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

1.2 고려사항

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

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

2. 시스템 구성

2.1. 시스템 구성도(H/W)

아래 그림은 모피어스 플랫폼 게이트웨이 서버의 시스템 구성도를 도식화한 것이다.

image1

  • H/W 에 대한 구성도 이다. DMZ 에는 Web Server, WAS 가 위치하고 내부망에는 기존 기간계 시스템 및 플랫폼 UI 리소스 파일을 저장 하기 위한 NAS 가 배치되는 구조이다. 단 보안 정책에 따라서 WAS는 DMZ 또는 내부망으로 위치가 변경될 수 있다.

2.2. 시스템 구조도

아래 그림은 모피어스 플랫폼 게이트웨이 서버의 시스템 구조도를 도식화한 것이다.

image2

  • Client 와 G/W 서버간 HTTP 통신을 통하여 정의된 JSON 데이터 형식으로 송수신하고 웹 요청을 받은 Controller 가 정의된 Camel 의 Routing Message Engine 을 이용하여 기간계 시스템과의 상호연동을 수행한다.

2.3. 시스템 구성요소

구성요소

설명

비고

Spring Dispachter Servlet

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

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

  • MVC 모델

DB

  • Morpheus 에서 사용되는 데이터 저장

  • Oracle

Legacy

  • Morpheus 와 상호연동 하는 대상 기간계 시스템

  • File, Http, DB, FTP

Morpheus Admin

  • Morpheus Admin 서버에 접속 하여 Mobile Server를 관리한다.

  • UI 리소스관리

  • 앱 서비스 관리

  • 공지사항 관리

  • API 접근키 관리

2.4. 소프트웨어 구성

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

image3

구분

구성요소

제품내역

시스템 S/W

OS

Server

Linux, Unix, Windows 계열 OS

Network

TCP/IP

DBMS

Oracle

WAS

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

Web Server

WebtoB, Apache, IIS (most overall Web Server 지원)

어플리케이션 S/W

개발 환경

Server

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

Spring 3.1.2 Version, Mybatis 3.2.2 Version

Camel 2.6 Version

개발 환경

Client

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

3. 개발 절차

3.1. 서버 개발 절차

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

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

4. API 서비스 개발

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

4.1. Controller 생성

4.1.1. 사용 Annotation

Spring Framework 에서는 Stereotype Annotation 을 활용하여 MVC 개발을 지원한다. 생산성 향상을 위해서 @Controller, @RequestMapping, @RequestParam 등의 Annotation 을 사용한다. 기타 Spring Framework 를 참고 하도록 한다.

구성요소

설명

@Controller

Controller 클래스를 정의

@Autowired

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

@RequestMapping

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

@RequestParam

웹 요청의 파라미터와 메소드 파라미터간의 매핑 Annotation

@PathVariable

메소드에 매개 변수 주석을 사용하여 URI 변수의 값에 바인딩 한다.

@ResponseBody

메소드에서 리턴되는 값을 view가 아닌 HTTP Response Body 에 직접 쓰여진다.

@RequestBody

HTTP Request Body를 핸츨러 메소드에서 직업 사용 가능

4.1.2. Controller Class 생성

  • kr.morpheus.sample.controller 폴더에 sampleController.java 파일을 생성한다.

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

구분

설명

method

  • HTTP Request Method 값을 할당한다.

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

value

  • URL 값을 할당한다.

  • 파일 소스

public class SampleController {

//어노테이션으로 SampleService 클래스를 주입받는다.

@Autowired(required=true)

private SampleService sampleService;

@SuppressWarnings(“unchecked”)

@ResponseBody

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

public String get(HttpServletRequest request, HttpServletResponse response,

@PathVariable String id , @RequestBody String body)

throws Exception {

// JSON 문자열을 Map or List Object 로 변환

body = URLDecoder.decode(body, “UTF-8”);

ObjectMapper om = new ObjectMapper();

Map<String, Object> requestMap =

om.readValue(body, new TypeReference<Map<String, Object>>(){});

//비지니스 로직 실행

requestMap =

(Map<String, Object>) sampleService.getCompanySample( requestMap , id );

//Map Object를 JSON 문자열로 변환

ObjectMapper mapper = new ObjectMapper();

String data = mapper.writeValueAsString(requestMap);

return data;

}

}

4.2. Service 생성

4.2.1. 사용 Annotation

구성요소

설명

@Service

Service 클래스의 정의, 자동 빈 등록

4.2.2 Service Class 생성

  • kr.morpheus.sample.service 폴더에 SampleService.java 파일을 생성한다.

  • 파일 소스

//어노테이션으로 SampleSession bean 등록

@Service

public class SampleService {

//어노테이션으로 SqlSession을 주입받는다.

@Autowired(required=true)

private SqlSession sqlSession;

public Object getCompanySample( Map<String, Object> requestMap , String id ){

//HEAD 와 BODY 를 담은 MAP Object

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

//HEAD 정보가 담길 MAP Object

@SuppressWarnings(“unchecked”)

Map<String, Object> responseHeadMap = (Map<String, Object>) requestMap.get(“head”);

//BODY 정보가 담길 MAP Object

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

SampleDto sampleDto = new SampleDto();

sampleDto.setCID(id);

//Mapper class 생성

//DB에서 정보를 조회 한다.

SampleMapper sampleMapper = sqlSession.getMapper(SampleMapper.class);

sampleDto = sampleMapper.getCompanySample(sampleDto);

//조회 결과를 BODY MAP에 담는다.

responseBodyMap.put(“CID”, sampleDto.getCID());

responseBodyMap.put(“DEPT”, sampleDto.getDEPT());

responseBodyMap.put(“USER_NAME”, sampleDto.getUSER_NAME());

responseBodyMap.put(“COMPANY”, sampleDto.getCOMPANY());

responseMap.put( “head”, responseHeadMap );

responseMap.put( “body”, responseBodyMap );

return responseMap;

}

}

4.3. Mapper Interface 생성

  • kr.morpheus.sample.mapper 폴더에 SampleMapper.java 파일을 생성한다.

  • 파일 소스

public interface SampleMapper {

//Mybatis의 select문 id와 메소드명을 동일하게 작업

SampleDto getCompanySample(SampleDto sampleDto);

}

4.4. Dto Class 생성

  • kr.morpheus.sample.dto 폴더에 SampleDto.java 파일을 생성한다.

  • 파일 소스

public class SampleDto {

private String CID;

private String DEPT;

private String USER_NAME;

private String COMPANY;

public String getCID() {

return CID;

}

public void setCID(String cID) {

CID = cID;

}

public String getDEPT() {

return DEPT;

}

public void setDEPT(String dEPT) {

DEPT = dEPT;

}

public String getUSER_NAME() {

return USER_NAME;

}

public void setUSER_NAME(String uSER_NAME) {

USER_NAME = uSER_NAME;

}

public String getCOMPANY() {

return COMPANY;

}

public void setCOMPANY(String cOMPANY) {

COMPANY = cOMPANY;

}

}

4.5. Mybatis maper XML 생성

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

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

<mapper namespace=”kr.morpheus.sample.mapper.SampleMapper”>

<select id=”getCompanySample”

parameterType=”kr.morpheus.sample.dto.SampleDto”

resultType=”kr.morpheus.sample.dto.SampleDto”>

SELECT CID

, DEPT

, USER_NAME

, COMPANY

FROM SAMPLE

WHRER CID = CID

</select>

</mapper>

4.6. Test

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

image4

5. 프레임워크 개발환경

5.1. 개발환경

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

5.1.1. 개발 환경 소개

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

5.2. IDE (Integrated Development Environment)

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

5.3. API Test Tool

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

5.3.1. 설치 전 사전 준비사항

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

5.3.2. 설치 및 사용 가이드

5.3.2.1. rest-client 다운로드 사이트
5.3.2.2. 다운로드 받은 restclient-ui-2.5-jar-with-dependencies.jar 파일을 아래와 같이 연결 프로그램을 Java로 선택하여 실행 한다.

image6

5.3.2.3. rest-client 을 실행 하고 Method 탭에서 서버 URL 주소를 입력하고 HTTP Method를 POST로 선택한다.

image7

5.3.2.4. Headers 탭으로 이동하여 그림과 같이 HTTP Header Key, Value 을 입력하고 추가 버튼을 눌러 적용한다.

image8

5.3.2.5. Body 탭으로 이동하여 Content-Type 을 application/x-www-form-urlencoded 으로 Charset 값을 UTF-8 로 변경한다.

image9

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

image10

5.3.2.7. Go 버튼을 눌러 Body 데이터를 서버로 전송하면 아래 그림과 같이 HTTP Response Body 탭에서 처리 결과 응답값을 확인 할 수 있다.

image11