420 likes | 633 Views
J2ME-J2EE 연동 프로그래밍. 김 명 호 , MojaveSoft (http://www.mojavesoft.co.kr/). J2EE. J2ME. 목 차. Multi-tier 엔터프라이즈 시스템 개발 J2ME-J2EE 연동을 통한 100% 순수 자바 기술 적용 J2ME-J2EE 연동의 고려사항 무선 인터넷 환경의 특수성 메시지 전달 트랜스포트 , 형식 , 보안 , 성능 , 반응성 세션 및 개인 정보의 관리 여러 구성 요소의 디플로이먼트
E N D
J2ME-J2EE 연동 프로그래밍 김 명 호, MojaveSoft (http://www.mojavesoft.co.kr/) J2EE J2ME
목 차 • Multi-tier 엔터프라이즈 시스템 개발 • J2ME-J2EE 연동을 통한 100% 순수 자바 기술 적용 • J2ME-J2EE 연동의 고려사항 • 무선 인터넷 환경의 특수성 • 메시지 전달 트랜스포트, 형식, 보안, 성능, 반응성 • 세션 및 개인 정보의 관리 • 여러 구성 요소의 디플로이먼트 • J2ME-J2EE 연동 예제 “Smart Ticket” 세션
Multi-tier 엔터프라이즈 시스템의 전형적인 구조 애플리케이션 서비스 프리젠테이션 데이터 서비스
Multi-tier 엔터프라이즈 시스템 개발의 난점 • 각 tier의 서로 다른 요구 • 프리젠테이션: 편리성, 이동성, 효율성, 다양성 • 서비스: 안전성, 견고성, 연동성, 측정가능성 • 다양한 개념, 기술, 도구, 언어 요구 • 학습 비용과 기간이 많이 소요됨 • 상호 이질적 언어와 도구의 연동이 어려움
100% 순수 자바 기술을 사용한 Multi-tier 엔터프라이즈 시스템 개발 • 유용성이 입증된 자바 기술 • 생산성, 이식성, 안정성, 가용성, ... • 시스템 개발의 모든 부분에 단일 기술 사용 • 언어와 도구의 효과적인 학습과 연동 • J2ME-J2EE의 연동 • 모바일 엔터프라이즈 서비스 제공 가능
J2ME 개요 • 휴대용, 내장형 기기를 위한 플랫폼 • 저성능, 저용량, 불편한 입출력을 고려 • 여러 유형의 기기들을 고려한 모듈화된 설계 • J2ME의 구성 • Configuration: 언어, 가상머신, 핵심 API • Profile: 기기유형, 응용분야별 부가 API
J2EE 개요 • Multi-tier 시스템 개발을 위한 플랫폼 • 표준화, 모듈화된 컴포넌트 기반 • 엔터프라이즈 시스템의 고급 기능 자동 제공 • J2EE의 구성 • J2SE의 핵심 기능 기반 • WORA, JDBC, RMI/CORBA, 보안모델, ... • EJB, Servlet API, JSP, XML 등 추가 지원
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
브라우저-J2EE 연동? • 시스템 구성 • 서버에서 WML/XHTML 동적 생성 • 모바일 기기에서 µ-브라우저로 브라우징 • 브라우저 기반 시스템의 문제점 • 네트웍의 비효율적 사용과 서버 로드 • 마크업을 포함한 데이터를 빈번히 교환해야 함 • 상호작용 유형이 제한됨 • 마크업 언어가 지원하는 기능에만 의존
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
J2ME-J2EE의 연동의 고려사항 • 무선 인터넷 환경의 특수성 • 메시지 전달 • 트랜스포트, 형식, 보안, 성능과 반응성 • 세션 및 개인정보 (personalization) 관리 • 여러 구성 요소의 디플로이먼트
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 무선 인터넷 환경 유선 인터넷 환경과는 매우 다른 구현 가능성
메시지 트랜스포트 • Socket? Nah! • MIDP의 필수 요소가 아님 • RMI? Nah! • CLDC/MIDP는 직렬화를 지원하지 않음 • HTTP? Yes! • HTTP는 MIDP의 필수 요소임 • 무선 인터넷 환경에서의 HTTP는 TCP/IP를 기반으로 구현되지 않을 가능성이 있음
메시지 형식 • HTML? Nah! • 비구조적이며 프로그래밍이 어려움 • XML? Possibly… (“SOAP 메시징” 참조) • 프로그램 고유 형식? Possibly... • HTML, XML 보다 처리가 용이 • 필수정보만 교환하여 네트웍 트래픽 감소
SOAP 메시징 • Simple Object Access Protocol • 웹 서비스를 위한 XML 기반의 메시징 • http://www.w3c.org/TR/SOAP/참조 • SOAP 1.1의 구성 요소 • 메시지 형식, 데이터 인코딩, RPC 변환 • 여러 유형의 트랜스포트에 적용할 수 있음 • Socket, HTTP, SMTP, JMS, Jabber, ...
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
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>
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>
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); • ...
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); ...
J2ME와 SOAP • 긍정적인 측면 • SOAP과 XML의 시스템 독립성 • SOAP을 지원하는 임의의 서비스 호출 가능 • 부정적인 측면 • SOAP 메시지의 분량과 복잡성 • XML과 SOAP 지원을 위한 부가 라이브러리 • 15 ~ 30KB
ST 예제의 메시지 형식 • Smart Ticket 고유 형식 사용 • 메시지 형식: command^param1,param2… • 메시지 구성과 해석이 용이 • 서버로 전달되는 메시지 분량이 매우 적음 • 브라우저 클라이언트를 지원하기 어려움
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); • }
메시지 보안 • SSL (Secure Socket Layer) • 연결시 http: 대신 https: 프로토콜 사용 • HttpConnection conn = (HttpConnection)Connector.open("https://…"); • SSL은 MIDP의 필수 요소가 아님 • J2ME WTK에서는 실험적인 구현 제공
메시지 성능과 반응성 • 성능 향상 • HTTP는 서비스 요청시 매번 연결 필요 • 여러 메시지를 결합하여 전달 (메시지 축소) • 반응성 향상 • 데이터 교환의 진도를 시각적으로 표현 • 예: Gauge 객체 사용
세션과 세션 정보 • 세션 • 한 사용자가 단일 클라이언트를 사용하여 발생시키는 일련의 서비스 요청 • 세션 정보 • 한 세션이 여러 요청에 걸쳐 유지하는 정보 • 예: 쇼핑 카트의 내용
세션 정보의 관리 • HTTP는 stateless 프로토콜임 • Servlet API는 HTTPSession 객체를 제공 • 세션 정보 표현을 위한 기법 • Cookie • URL-rewriting • SSL (주의: SSL은 MIDP 필수 요소가 아님)
Cookie • Cookie? • 클라이언트에 기억되는 소량의 데이터 • 서비스를 요청할 때마다 기억중인 Cookie를 HTTP 헤더에 포함시켜 서버로 전달 • 무선 인터넷 환경과 Cookie • 쿠키 전달을 금지하는 WIG도 있음 • URL-rewriting 등의 안전장치 제공 필요
Cookie 처리 코드 • Cookie 추출 • String cookies = conn.getHeaderField("Set-Cookie"); • … 추출된 Cookie 해석 ... • 서버로 Cookie 전달 • conn.setRequestProperty("Cookie", …);
URL-rewriting • URL-rewriting? • 서비스를 요청할 때마다 세션 정보를 포함한 URL을 서버에 전달하는 기술 • URL-rewriting의 예 • http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5
개인 정보 • 개인 정보? • 여러 세션에 걸쳐 유지되는 사용자 정보 • 개인 정보의 중요성 • 서비스를 요청할 때 사용자 개입을 최소화 • 개인 정보의 유지 • J2ME: MIDP의 RMS 기능 사용 • J2EE: 다양한 방법을 사용할 수 있음
세션 및 개인 정보 관리 • 서버에서 관리 • 서버로 전달되는 메시지 규모 축소 • 다양한 클라이언트 유형들의 효과적 지원 • 일반 정보와 기기 유형별 정보의 분리
디플로이먼트 • J2ME 요소 • 프로그램 코드: JAR 파일에 패키징 • 설명과 구성: JAD 파일 • J2EE 요소 • JSP 페이지와 Servlet: WAR 파일에 패키징 • EJB 컴포넌트: JAR 파일에 패키징 • WAR+JAR: EAR 파일에 패키징 • J2EE참조 구현의 deploytool 사용
결 론 • J2ME-J2EE 연동 • 무선 엔터프라이즈의 효과적 구축 가능 • 프로그래밍이 용이 - Fast Learning Curve • 여러 기술과 도구의 빈틈없는 결합 제공 • J2ME-J2EE 연동의 실용성? • J2ME 코드의 효율성과 규모 제고 • 기기 성능, 가상머신 구현, 무선 인터넷 환경의 발전 기대
Smart Ticket (ST) 세션 J2EE J2ME
ST.LOGIN_USER Started session sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 2^killme,000000
ST.DISPLAY_MOVIES sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 11^
ST.DISPLAY_LOCATONS sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 12^3
ST.DISPLAY_SHOWTMES sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 13^3,2
ST.DISPLAY_SEATINGPLAN sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 14^9
ST.RESERVE_SEATS sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 21^14,21
ST.CONFIRM_SEATS sessionID = CAE152DC1BAF84601CDC903C8AE1B1C5 sessionURL = http://localhost:8000/SmarTicketApp/servlet/;jsessionid=CAE152DC1BAF84601CDC903C8AE1B1C5 command = 22^1111 Destroying session