1 / 42

J2ME-J2EE 연동 프로그래밍

J2ME-J2EE 연동 프로그래밍. 김 명 호 , MojaveSoft (http://www.mojavesoft.co.kr/). J2EE. J2ME. 목 차. Multi-tier 엔터프라이즈 시스템 개발 J2ME-J2EE 연동을 통한 100% 순수 자바 기술 적용 J2ME-J2EE 연동의 고려사항 무선 인터넷 환경의 특수성 메시지 전달 트랜스포트 , 형식 , 보안 , 성능 , 반응성 세션 및 개인 정보의 관리 여러 구성 요소의 디플로이먼트

kezia
Download Presentation

J2ME-J2EE 연동 프로그래밍

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. J2ME-J2EE 연동 프로그래밍 김 명 호, MojaveSoft (http://www.mojavesoft.co.kr/) J2EE J2ME

  2. 목 차 • Multi-tier 엔터프라이즈 시스템 개발 • J2ME-J2EE 연동을 통한 100% 순수 자바 기술 적용 • J2ME-J2EE 연동의 고려사항 • 무선 인터넷 환경의 특수성 • 메시지 전달 트랜스포트, 형식, 보안, 성능, 반응성 • 세션 및 개인 정보의 관리 • 여러 구성 요소의 디플로이먼트 • J2ME-J2EE 연동 예제 “Smart Ticket” 세션

  3. Multi-tier 엔터프라이즈 시스템의 전형적인 구조 애플리케이션 서비스 프리젠테이션 데이터 서비스

  4. Multi-tier 엔터프라이즈 시스템 개발의 난점 • 각 tier의 서로 다른 요구 • 프리젠테이션: 편리성, 이동성, 효율성, 다양성 • 서비스: 안전성, 견고성, 연동성, 측정가능성 • 다양한 개념, 기술, 도구, 언어 요구 • 학습 비용과 기간이 많이 소요됨 • 상호 이질적 언어와 도구의 연동이 어려움

  5. 100% 순수 자바 기술을 사용한 Multi-tier 엔터프라이즈 시스템 개발 • 유용성이 입증된 자바 기술 • 생산성, 이식성, 안정성, 가용성, ... • 시스템 개발의 모든 부분에 단일 기술 사용 • 언어와 도구의 효과적인 학습과 연동 • J2ME-J2EE의 연동 • 모바일 엔터프라이즈 서비스 제공 가능

  6. J2ME 개요 • 휴대용, 내장형 기기를 위한 플랫폼 • 저성능, 저용량, 불편한 입출력을 고려 • 여러 유형의 기기들을 고려한 모듈화된 설계 • J2ME의 구성 • Configuration: 언어, 가상머신, 핵심 API • Profile: 기기유형, 응용분야별 부가 API

  7. J2EE 개요 • Multi-tier 시스템 개발을 위한 플랫폼 • 표준화, 모듈화된 컴포넌트 기반 • 엔터프라이즈 시스템의 고급 기능 자동 제공 • J2EE의 구성 • J2SE의 핵심 기능 기반 • WORA, JDBC, RMI/CORBA, 보안모델, ... • EJB, Servlet API, JSP, XML 등 추가 지원

  8. J2ME-J2EE의 연동 • J2ME: 프리젠테이션 • J2EE Web tier: 브리지 • J2EE EJB tier: 애플리케이션 서비스 • EIS tier: 데이터 서비스 HTTP JDBC DB EJB MIDlet Servlet DB Web tier EJB tier J2ME tier EIS tier J2EE tier

  9. 브라우저-J2EE 연동? • 시스템 구성 • 서버에서 WML/XHTML 동적 생성 • 모바일 기기에서 µ-브라우저로 브라우징 • 브라우저 기반 시스템의 문제점 • 네트웍의 비효율적 사용과 서버 로드 • 마크업을 포함한 데이터를 빈번히 교환해야 함 • 상호작용 유형이 제한됨 • 마크업 언어가 지원하는 기능에만 의존

  10. Smart Ticket 예제 (ST) • Designing Wireless Enterprise Applications Using Java™ Technology • A Java BluePrints for Wireless White Paper • http://java.sun.com/blueprints/ • code/index.html#java_smart_ticket_demo • 프리젠테이션: J2ME MIDP • 서비스와 브리지: • J2EE Reference Implementation

  11. J2ME-J2EE의 연동의 고려사항 • 무선 인터넷 환경의 특수성 • 메시지 전달 • 트랜스포트, 형식, 보안, 성능과 반응성 • 세션 및 개인정보 (personalization) 관리 • 여러 구성 요소의 디플로이먼트

  12. Firewall Wireless Internet Gateway (WIG) Wireless Network Carrier Intranet Internet 2G,2.5G,3G protocol stacks HTTP(S) over proprietary protocol stack HTTP(S) over TCP/IP 무선 인터넷 환경 유선 인터넷 환경과는 매우 다른 구현 가능성

  13. 메시지 트랜스포트 • Socket? Nah! • MIDP의 필수 요소가 아님 • RMI? Nah! • CLDC/MIDP는 직렬화를 지원하지 않음 • HTTP? Yes! • HTTP는 MIDP의 필수 요소임 • 무선 인터넷 환경에서의 HTTP는 TCP/IP를 기반으로 구현되지 않을 가능성이 있음

  14. 메시지 형식 • HTML? Nah! • 비구조적이며 프로그래밍이 어려움 • XML? Possibly… (“SOAP 메시징” 참조) • 프로그램 고유 형식? Possibly... • HTML, XML 보다 처리가 용이 • 필수정보만 교환하여 네트웍 트래픽 감소

  15. SOAP 메시징 • Simple Object Access Protocol • 웹 서비스를 위한 XML 기반의 메시징 • http://www.w3c.org/TR/SOAP/참조 • SOAP 1.1의 구성 요소 • 메시지 형식, 데이터 인코딩, RPC 변환 • 여러 유형의 트랜스포트에 적용할 수 있음 • Socket, HTTP, SMTP, JMS, Jabber, ...

  16. SOAP 메시징의 예Delayed Stock Quote • Endpoint http://services.xmethods.net/soap • 서비스 getQuote • Namespace: urn:xmethods-delayed-quotes • Request 인자 스키마: symbol (string) • Response 인자 스키마: return (float) • 인코딩: http://schemas.xmlsoap.org/soap/encoding

  17. SOAP 메시징getQuote Request <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <s:Body> <ns1:getQuote xmlns:ns1="urn:xmethods-delayed-quotes" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <symbol xsi:type="xsd:string">SUNW</symbol> </ns1:getQuote> </s:Body> </s:Envelope>

  18. SOAP 메시징getQuote Response <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <s:Body> <ns1:getQuoteResponse xmlns:ns1="urn:xmethods-delayed-quotes" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <returnxsi:type="xsd:float">4.486</return> </ns1:getQuoteResponse> </s:Body> </s:Envelope>

  19. kSOAP • J2ME를 지원하는 SOAP 구현 • http://ksoap.enhydra.org/참조 • getQuote 서비스 호출을 위한 코드 • import org.ksoap.*; • import org.ksoap.transport.*; • ... • SoapObject rpc = • new SoapObject("urn:xmethods-delayed-quotes", "getQuote"); • rpc.addProperty("symbol", "SUNW"); • Object response = • new HttpTransport("http://services.xmethods.net/soap", • "urn:xmethods-delayed-quotes#getQuote").call(rpc); • ...

  20. kSOAP getQuote 실험 SoapObject rpc = new SoapObject( "urn:xmethods-delayed-quotes", "getQuote" ); rpc.addProperty("symbol", "SUNW"); Object response = new HttpTransport( "http://services.xmethods.net/soap", "urn:xmethods-delayed-quotes#getQuote" ).call(rpc); ...

  21. J2ME와 SOAP • 긍정적인 측면 • SOAP과 XML의 시스템 독립성 • SOAP을 지원하는 임의의 서비스 호출 가능 • 부정적인 측면 • SOAP 메시지의 분량과 복잡성 • XML과 SOAP 지원을 위한 부가 라이브러리 • 15 ~ 30KB

  22. ST 예제의 메시지 형식 • Smart Ticket 고유 형식 사용 • 메시지 형식: command^param1,param2… • 메시지 구성과 해석이 용이 • 서버로 전달되는 메시지 분량이 매우 적음 • 브라우저 클라이언트를 지원하기 어려움

  23. ST 메시지 전달 코드 • 메시지 구성 (J2ME) • String message = • DISPLAY_SHOWTMES + "^" + MovieID + "," + locationID; • //Example message composed is: 13^3,2 • 메시지 해석 (Servlet) • try { • int i = request.indexOf("^"); • command = Integer.parseInt(request.substring(0, i)); • params = new StringTokenizer(request.substring(i+1), ","); • } catch (Exception ex) { • throw new MIDPException(MESSAGE_ERROR); • }

  24. 메시지 보안 • SSL (Secure Socket Layer) • 연결시 http: 대신 https: 프로토콜 사용 • HttpConnection conn = (HttpConnection)Connector.open("https://…"); • SSL은 MIDP의 필수 요소가 아님 • J2ME WTK에서는 실험적인 구현 제공

  25. 메시지 성능과 반응성 • 성능 향상 • HTTP는 서비스 요청시 매번 연결 필요 • 여러 메시지를 결합하여 전달 (메시지 축소) • 반응성 향상 • 데이터 교환의 진도를 시각적으로 표현 • 예: Gauge 객체 사용

  26. 세션과 세션 정보 • 세션 • 한 사용자가 단일 클라이언트를 사용하여 발생시키는 일련의 서비스 요청 • 세션 정보 • 한 세션이 여러 요청에 걸쳐 유지하는 정보 • 예: 쇼핑 카트의 내용

  27. 세션 정보의 관리 • HTTP는 stateless 프로토콜임 • Servlet API는 HTTPSession 객체를 제공 • 세션 정보 표현을 위한 기법 • Cookie • URL-rewriting • SSL (주의: SSL은 MIDP 필수 요소가 아님)

  28. Cookie • Cookie? • 클라이언트에 기억되는 소량의 데이터 • 서비스를 요청할 때마다 기억중인 Cookie를 HTTP 헤더에 포함시켜 서버로 전달 • 무선 인터넷 환경과 Cookie • 쿠키 전달을 금지하는 WIG도 있음 • URL-rewriting 등의 안전장치 제공 필요

  29. Cookie 처리 코드 • Cookie 추출 • String cookies = conn.getHeaderField("Set-Cookie"); • … 추출된 Cookie 해석 ... • 서버로 Cookie 전달 • conn.setRequestProperty("Cookie", …);

  30. URL-rewriting • URL-rewriting? • 서비스를 요청할 때마다 세션 정보를 포함한 URL을 서버에 전달하는 기술 • URL-rewriting의 예 • http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5

  31. 개인 정보 • 개인 정보? • 여러 세션에 걸쳐 유지되는 사용자 정보 • 개인 정보의 중요성 • 서비스를 요청할 때 사용자 개입을 최소화 • 개인 정보의 유지 • J2ME: MIDP의 RMS 기능 사용 • J2EE: 다양한 방법을 사용할 수 있음

  32. 세션 및 개인 정보 관리 • 서버에서 관리 • 서버로 전달되는 메시지 규모 축소 • 다양한 클라이언트 유형들의 효과적 지원 • 일반 정보와 기기 유형별 정보의 분리

  33. 디플로이먼트 • J2ME 요소 • 프로그램 코드: JAR 파일에 패키징 • 설명과 구성: JAD 파일 • J2EE 요소 • JSP 페이지와 Servlet: WAR 파일에 패키징 • EJB 컴포넌트: JAR 파일에 패키징 • WAR+JAR: EAR 파일에 패키징 • J2EE참조 구현의 deploytool 사용

  34. 결 론 • J2ME-J2EE 연동 • 무선 엔터프라이즈의 효과적 구축 가능 • 프로그래밍이 용이 - Fast Learning Curve • 여러 기술과 도구의 빈틈없는 결합 제공 • J2ME-J2EE 연동의 실용성? • J2ME 코드의 효율성과 규모 제고 • 기기 성능, 가상머신 구현, 무선 인터넷 환경의 발전 기대

  35. Smart Ticket (ST) 세션 J2EE J2ME

  36. ST.LOGIN_USER Started session sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 2^killme,000000

  37. ST.DISPLAY_MOVIES sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 11^

  38. ST.DISPLAY_LOCATONS sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 12^3

  39. ST.DISPLAY_SHOWTMES sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 13^3,2

  40. ST.DISPLAY_SEATINGPLAN sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 14^9

  41. ST.RESERVE_SEATS sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 21^14,21

  42. ST.CONFIRM_SEATS sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 22^1111 Destroying session

More Related