===================================== 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의 핵심요소 이다. | - MVC 모델 | | | | | | | - Controller가 수행시 웹 요청의 진입점 이고 웹 요청을 처리하며 결과 데이터를 클라이언트에게 응답 한다. | | +-----------------------------+----------------------------------------------------------------------------------------------------------+-------------------------+ | 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 requestMap = | | | | om.readValue(body, **new** TypeReference>(){}); | | | | //비지니스 로직 실행 | | | | requestMap = | | | | (Map) 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 requestMap , String id ){ | | | | //HEAD 와 BODY 를 담은 MAP Object | | | | Map responseMap = **new** HashMap(); | | | | //HEAD 정보가 담길 MAP Object | | | | @SuppressWarnings("unchecked") | | | | Map responseHeadMap = (Map) requestMap.get("head"); | | | | //BODY 정보가 담길 MAP Object | | | | Map responseBodyMap = **new** HashMap(); | | | | 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 파일 생성 +-------------------------------------------------------------------+ | | | | | | | | | | | | | | +===================================================================+ +-------------------------------------------------------------------+ 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 설치 파일을 다운로드 받는다. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (링크: `*http://www.oracle.com/technetwork/java/javase/downloads/index.html* `__) 5.3.2. 설치 및 사용 가이드 ~~~~~~~~~~~~~~~~~~~~~~~~~~ 5.3.2.1. rest-client 다운로드 사이트 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `*http://code.google.com/p/rest-client/downloads/list 에서 restclient-ui-2.5-jar-with-dependencies.jar* `__ 파일을 선택하여 다운로드 한다. |image5| 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| .. |image0| image:: img/gw_dev1.jpeg :width: 1.50000in .. |image1| image:: img/gw_dev2.png :width: 6.22222in .. |image2| image:: img/gw_dev3.png :width: 6.26389in .. |image3| image:: img/gw_dev4.png :width: 5.35417in .. |image4| image:: img/gw_dev7.png :width: 3.50000in .. |image5| image:: img/gw_dev8.png :width: 6.26389in .. |image6| image:: img/gw_dev9.png :width: 3.71528in .. |image7| image:: img/gw_dev10.png :width: 2.77083in .. |image8| image:: img/gw_dev11.png :width: 2.72917in .. |image9| image:: img/gw_dev12.png :width: 3.28472in .. |image10| image:: img/gw_dev13.png :width: 2.78472in .. |image11| image:: img/gw_dev14.png :width: 2.72917in