===================================== 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의 핵심요소 이다. | - MVC 모델 | | | | | | | - Controller가 수행시 웹 요청의 진입점 이고 웹 요청을 처리하며 결과 데이터를 클라이언트에게 응답 한다. | | +-----------------------------+----------------------------------------------------------------------------------------------------------+----------------------------------+ | 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 uriPathVal =(Map)request.getAttribute(Const.REST\_URI\_PATH\_VAL); | | | | //클라이언트에서 넘어온 request(HEAD+BODY) 모든정보 | | | | Map reqMap = (Map)request.getAttribute(Const.HTTP\_BODY); | | | | //클라이언트에서 넘어온 공통 헤더 맵정보 | | | | Map reqHeadMap = (Map)request.getAttribute(Const.HEAD); | | | | //클라이언트에서 넘긴 파라미터 맵정보 | | | | Map reqBodyMap = (Map)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 responseBodyMap= new HashMap(); | | | | try{ | | | | /\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* | | | | \* 이 부분에 비즈니스 로직을 코딩한다. | | | | \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/ | | | | //Legacy DB조회 | | | | List> 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 파일 생성 +-------------------------------------------------------------------+ | | | | | | | | | | | | | | +===================================================================+ +-------------------------------------------------------------------+ 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 설치 파일을 다운로드 받는다. (링크: `*http://www.oracle.com/technetwork/java/javase/downloads/index.html* `__) 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| .. |image0| image:: img/gw_dev1.jpeg :width: 1.50000in .. |image1| image:: img/gw_dev2.png :width: 6.25694in .. |image2| image:: img/gw_dev3.png :width: 6.26389in .. |image3| image:: img/gw_dev4.png :width: 6.27083in .. |image4| image:: img/gw_dev5.png :width: 6.56944in .. |image5| image:: img/gw_dev6.png :width: 3.50000in .. |image6| image:: img/gw_dev7.png :width: 6.26389in .. |image7| image:: img/gw_dev8.png :width: 3.71528in .. |image8| image:: img/gw_dev9.png :width: 2.77083in .. |image9| image:: img/gw_dev10.png :width: 2.72917in .. |image10| image:: img/gw_dev11.png :width: 3.28472in .. |image11| image:: img/gw_dev12.png :width: 2.78472in .. |image12| image:: img/gw_dev13.png :width: 2.72917in