1 / 32

동기화의 멋진 세상 - SyncML & XML -

동기화의 멋진 세상 - SyncML & XML -. 2002 년 1 월 하인숙. 데이터 일치성 보장 기술. 정의 - 데이터 동기화. 데이터동기화란 ? 네트웍에 존재하는 둘이상의 논리적 장치간 특정 데이터를 일치시켜주는 기술 Local : 시리얼 포트 , USB, IrDA( 적외선 ), SISC, Fibre Channel 등 Remote : HTTP, TCP/IP, WSP, NAS( 분산 스토리지 표준 ) 등 데이터 동기화 필드 활용

isabel
Download Presentation

동기화의 멋진 세상 - SyncML & XML -

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. 동기화의 멋진 세상 - SyncML & XML - 2002년 1월 하인숙

  2. 데이터 일치성 보장 기술 정의 - 데이터 동기화 • 데이터동기화란? • 네트웍에 존재하는 둘이상의 논리적 장치간 특정 데이터를 일치시켜주는 기술 • Local : 시리얼 포트, USB, IrDA(적외선), SISC, Fibre Channel등 • Remote : HTTP, TCP/IP, WSP, NAS(분산 스토리지 표준) 등 • 데이터 동기화 필드 활용 • PDA OS : Active Sync (MS), Hot Sync(Plam) • DB : DB2 Anywhere(IBM), Oracle Lite(Oracle) • Device 제조사 : DataSync2000(삼성) • Web 포탈 : 각종 PIMS Service (한미르, 라이코스, MSDN등) • Enterprise Data : DR 시스템, 자동 프로그램 배포프로그램 • 동기화 대상이 되는 데이터 • PIMS : Mobile Device의 개인정보로 대표되는 일정, 주소록, 메일, 쪽지등 • 핸드폰/PDA : 각종 설치파일, 이모티콘등 • DB : Table, DML, User권한 • 백업과의 차이점 • 백업 : 한쪽에 존재하는 블록 데이터를 목적지 장치에 일괄 복사 (덮어쓰기 미러링) • 동기화 : 동기화 모드에 따라 원시 데이터와 목적 데이타간의 데이터 일치 • Two-way : 서로간 변경된 데이터를 상대방 데이터에 반영 • One-way : 백업과 같은 방식, 한쪽의 데이터 변경을 다른 한쪽에 반영하는 방식 • 관련기술 • 데이터 핸들링기술 (File, DBMS, Memory등) • 네트워킹 핸들링 기술 (Socket, Send/Receive Stream, 3(4)-Tier 핸들링) • 메시지 핸들링 기술 (메시지 ENC/DEC) • 장애및 오류제어 기술 (분산환경에러, DB 핸들링에러 – Rollback, re-Try, Log save)

  3. Mobile 업계의 SyncML 등장 • 우선 골치아픈 Enterprise 쪽은 나중에 생각하자. • 데이터 동기화 - Mobile Device에 쏟아지는 관심 • 일반 개인 사용자의 PDA 보유율이 높음 • 이동성/휴대성이 높은 PDA를 기업에서 활발히 도입 (기업용 모바일 오피스) • 핸드폰이 일정정도 리소스 보유 Device로 변신 • 다중 장치간 데이터 동기화 요구 폭증 • 개인PC/PDA/핸드폰/Web PIMS 서비스 간 동기화 요구 • 특히 활용도가 높은 PIMS 정보를 중심으로 벤더사 개발툴킷 발표 • Active Sync SDK, HotSync Coduit SDK, 심비안 SDK등 • 대부분의 Mobile 벤더가 ‘자사표준’의 스펙으로 구현 • 벤더표준 동기화 문제점 발생 • 타사 동기화 엔진과는 호환이 안됨 • PIMS 서비스 업체 입장에서는 자사 동기화 엔진을 Mobile Device에 설치해야 하는 부담 • 대부분 Local 네트웍에 의존 • PIMS 이외의 어플리케이션에 활용 불가능 • 기존 벤더표준을 토양 위에서 새로운 ‘상호운용성이 보장되는 동기화 표준’ 요구 SyncML.org 자사표준 산업계표준

  4. 동기화 데이터 인식(고민의 원천!!!)을 위해 존재 • SyncML은 기본적으로 PIMS 데이터의 상호운용성을 확보해줌 • vCard, vCalandar등의 외부 스펙을 통해 공통 데이터 ENC/DEC • 이외의 다른 데이터 포멧은 <Meta> 엘리먼트를 이용해 기술 • (단지 기술일뿐 상대방인 인식(!) 할수 있다는 보장은 없음) DB File PIMS • XML base 3개의 스펙으로 구성 • SyncML Representation, Meta Info, Device Info • SyncML 메시지의 Elements 설명 • Command, 컨테이너/컨테인드 설명 • 각 엘리먼트 값의 의미 설명 • MetaInfo : Data String을 인식하기 위한 방법을 표준화, Anchor • Device Info : 리소스정보, DB 메타정보 • - 동기화 메시지의 상호운용성 확보 • - 1개의 스펙으로 구성 • 데이터 동기화에 대한 기본 규칙(처리 프로세서)을 정의 • 동기모드별 교환 Command 명시 (7가지 타입) • 에러발생시 처리개념, 인증 처리 명시 • Anchor, Changelog, Map Table 개념 명시 • 라우팅(Device, DB) 개념 설명 • 최소한의 동기화 운영 규칙 상호운영성 확보 • 3개의 스펙으로 구성 (HTTP, WSP, OBEX) • 프로토콜 스트럭쳐의 세팅값 설명 • 프로토콜 스트럭쳐의 처리를 위한 프로세서 설명 • - 메시지 수신및 송신을 위한 상호운용성 확보 SyncML 스펙 Review SyncML 스펙 카테고리 Content XML Representation SyncML Protocol Transport Binding

  5. Transport Binding SyncML Protocol XML Representation SyncML 아키텍쳐 –상호운용성 점검 각 모듈(서브시스템)별 역할(Role) 구분이 안됨 .. ^^;;

  6. 메시지 구조 상호운용성 – XML Representation • SyncML Representation Protocol spec. (3-1) • SyncML 메시지 자체의 구조와 각 요소가 가지는 값의 의미를 설명 • SyncML 메시지 구성요소 • <!ELEMENT SyncML (SyncHdr, SyncBody)> • 메시지와 패키지 • 패키지 : 논리적으로 단일한 메시지 단위 (물리적인 용량제한에 상관없는 메시지 전체) • 메세지 : 물리적인 리소스 제한으로 인하여 패키지를 분할하는 각각의 sub-패키지를 의미 동기화 장치의 리소스 제한 또는 동기화 데이터가 리소스 크기를 넘어설때 발생 장치가 여유로울 경우 하나의 패키지는 하나의 메시지로 Send <Final>로 패키지의 마지막 메세지인지를 판단 • 세션 : 전체 동기화가 이루어지기 위해 필요한 모든 패키지 교환의 총합 • 정리하면 : 하나의 세션의 다수의 패키지로 이루어지고 하나의 패키지는 하나이상의 메시지로 존재 • SyncML Header • 동기화 상대방의 Device 정보 (Device 라우팅 정보)를 담고 있음 • 인증에 관련된 정보와 SyncML 버전 정보, Session및 Message ID에 대한 정보 • <!ELEMENT SyncHdr (VerDTD, VerProto, SessionID, MsgID, Target, Source, RespURI?, NoResp?, Cred?, Meta?)> • SyncML Body • 각 패키지 마다 다수의 Command를 담는 컨테이너 • <!ELEMENT SyncBody ((Alert | Atomic | Copy | Exec | Get | Map | Put | Results | Search | Sequence | Status | Sync)+, Final?)>

  7. 메시지 구조 상호운용성 – XML Representation • SyncML Representation Protocol spec. (3-2) • SyncML 메시지 구성요소 • SyncML Command • 데이터 조작의 단위가 되는 Command • 단일 Command 안에는 다수의 Item이 존재해 다수의 레코드 처리가 가능 • 중요 Command • 데이터 핸들링 : Add, Replace, Delete • 동기화 대상 데이터 라우팅 : Sync • 트랜젝션 처리 : Atomic • 동기화에 필요한 정보 교환 : Alert, Put, Get, Results • Map Table 유지 : Map • 모든 Command의 처리 결과 : Status 라우팅 정보의 역활 어느 장치? SyncHeader/locURI 어떤 데이터? Sync/locURI 주소록 어떤레코드? Item/locURI Pkey:3

  8. 메시지 구조 상호운용성 – XML Representation • SyncML Representation Protocol spec. (3-3) • spec. 예제 <SyncML> <SyncHdr> <VerDTD>1.0</VerDTD> <VerProto>SyncML/1.0</VerProto> <SessionID>1</SessionID> <MsgID>2</MsgID> <Target> <LocURI>IMEI:493005100592800</LocURI> </Target> <Source> <LocURI>http://www.syncml.org/server</LocURI> </Source> </SyncHdr> <SyncBody> <Status> <CmdID>1</CmdID> <MsgRef>2</MsgRef> <CmdRef>0</CmdRef> <Cmd>SyncHdr</Cmd> <TargetRef>http://www.syncml.org/server</TargetRef> <SourceRef>IMEI:493005100592800</SourceRef> <Data>200</Data> </Status> <Sync> <CmdID>4</CmdID> <Target><LocURI>./dev-contacts</LocURI></Target> <Source><LocURI>./contacts/james_bond</LocURI></Source> <Replace> <CmdID>5</CmdID> <Meta> <Type xmlns='syncml:metinf'>text/x-vcard</type></Meta> <Item> <Target><LocURI>1023</LocURI></Target> <Data><!—vCard로 포케팅된 데이터 String이 여기--></Data> </Item> </Replace> <Add> <CmdID>6</CmdID> <Meta> <Type xmlns='syncml:metinf'>text/x-vcard</type></Meta> <Item> <Source><LocURI>10536681</LocURI></Source> <Data><!-- vCard로 포케팅된 데이터 String이 여기--></Data> </Item> </Add> </Sync> <Final/> </SyncBody> </SyncML> 우측 계속 ->

  9. 메시지 구조 상호운용성 – XML Representation • SyncML Meta Information spec. (3-1) • 동기화 메시지가 아닌 동기화에 사용되는 ‘Data’에 관심 • 사용1 : SyncML Message의 개별 요소로 사용 • Anchor, Last, Next, FreeID, MaxMsgSize등 • 사용2 : 해당 ‘Data’를 식별(!) 할수 있는 공통의 스트럭쳐를 포함 • Type, Format, Version, MetaInf, Mark등 • 기본적으로 XML Representation에 속하는 3개의 DTD, vCard등 spec.에서 언급하는 DTD를 위한 NameSpace 제공 • Data 엘리먼트는 SyncML 입장에서는 PCData로 인식 • 따라서 Data 엘리먼트를 인식하기 위한 포메팅 식별자가 필요 • 식별 : 해당 Data의 ENC/DEC 방법을 명시 • Type, Format, Version, MetaInf, Mark등 • ENC/DEC에 사용된 DTD 명시 (이를 XML에서는 NameSpace라고 부름) • 결과적으로 SyncML이 동기화 할때 필요한 다양한 String 포메팅 방법을 제공 • vCard, vCalander와 같은 B2B에서 검증된 공통의 포메팅 방법이 아니라도 동기화에 사용할 수 있음 • 문제는 해당 데이터의 인식(!!)은 식별과는 별계의 문제 • 식별은 XML 파서를 통과하면 속성값으로 NameSpace가 확보됨 • 그러나 확보된 NameSpace를 가지고 Data를 파싱하는 것은 전적으로 벤더의 몫 • 결과적으로 Data 인식의 상호운용성이 낮아짐 • 모든 NameSpace를 인식할 수 있는 파서를 채용하기에는 Device의 리소스가 제한 • PIMS의 경우 반드시 vCard나 vCalrander와 같은 표준 포메팅를 사용 • vCard등으로 포메팅하기 힘든 경우 자사 포메팅 규칙및 해당 도메인에서 통용되는 NameSpce 사용 권장 • (물론 상품카타로그와 같은 기본적인 DTD 표준이 정해지지 않은 상황에서는 한계가 있음) • SyncML이 PIMS 데이터의 한계를 넘기 위해서는 반드시 보강될 필요가 있음

  10. 메시지 구조 상호운용성 – XML Representation • SyncML Meta Information spec. (3-2) 동기화 데이터는 Item 엘리먼트에 String으로 캡슐화 <Item><Source>…<Data>PIMS 데이터들</Data></Item> ---------------------------------------------------- SyncML 메시지 실예 <Item> <Source>1</Source> <Data>하팀로코즌솔루션3460-0772서울시 서초구… </Data> </Item> 스트링으로 Formating한 결과 데이터 Pkey 1 하팀 로코즌 솔루션 3460-0772 서울시 서초구 … … 하팀,로코즌,솔루션,3460-0772,서울시 서초 하팀/로코즌/솔루션/3460-0772/서울시 서초 <name>하팀</name><company name>로코즌</ name;하팀,companyname;로코즌… 다양한 포멧이 존재 (서로다른 포멧을 적용한 Application 간의 동기화 불가능) String으로 만들때 Formating에 사용된 메타데이타(DTD)식별이 필요 Meta Information Spec의 메타데이타 식별 기능

  11. 메시지 구조 상호운용성 – XML Representation • SyncML Meta Information spec. (3-3) • spec. 예제 XML Representation에 속하는 3개의 Namespace 식별 동기화 데이터 포메팅 Namespace 식별 MetaInfomation DTD 식별 <Alert> … <Item> <Target>..</..> <Meta> <Anchor xmlns='syncml:metinf'> <Last>234</Last> <Next>276</Next> </Anchor> … <Replace> <CmdID>5</CmdID> <Meta> <Type xmlns='syncml:metinf'>text/x-vcard</type></Meta> <Item> <Target><LocURI>1023</LocURI></Target> <Data><!—vCard로 포케팅된 데이터 String이 여기--></Data> </Item> </Replace> DeviceInfomation DTD 식별 <Put> … <Meta> <Type xmlns='syncml:metinf'> application/vnd.syncml-devinf+xml</Type> </Meta> <Item> <Source><LocURI>./devinf10</LocURI></Source> <Data> <DevInf xmlns='syncml:devinf'> <Man>Big Factory, Ltd.</Man> …

  12. 전화번호1 FAX 번호 … 메시지 구조 상호운용성 – XML Representation • SyncML Device Information spec. (2-1) • 동기화에 참여하는 서로간 장치 정보의 교환 • Man, Mod, OEM, DevType등 • <Man>HIS, Ltd.</Man><FwV>2.1a</FwV><DevTyp>PDA Type A</DevTyp>.. • 데이터 포메팅방식 결정 • DataStore, RX, TX등 • <DataStore>..<CTType>text/x-vard</CTType><VerCT>2.1</VerCT>.. </DataStore> • 메타데이터 필드 결정 • 장치와 리소스 제한에 따라 vCard(DTD)를 구성하는 모든 엘리먼트를 사용하지 않음 • 현실적으로도 각 벤더사마다 서로다른 Table 구조를 가지고 있음 • 비슷하기는 하지만 동일(!) 한것은 아님. • Client가 Server측 장치로 동기화에 사용되는 모메팅 필드를 명시해서 전달 Server측 스키마 Pkey 1 이름 회사명 전화번호1 전화번호2 FAX 번호 … 각 장치간 메타데이타가 다름 vCard(데이터 포멧 스키마) 필드 1 고객명 직장명 핸드폰번호 Client측 스키마

  13. 메시지 구조 상호운용성 – XML Representation • SyncML Device Information spec. (2-2) • spec. 예제 <DevInf xmlns='syncml:devinf'> <Man>Big Factory, Ltd.</Man> <Mod>4119</Mod> <OEM>Jane's phones</OEM> <FwV>2.0e</FwV> <SwV>2.0</SwV> <HwV>1.22I</HwV> <DevId>1218182THD000001-2</DevId> <DevTyp>phone</DevTyp> <DataStore> <SourceRef>./contacts</SourceRef> <DisplayName>Phonebook</DisplayName> <MaxGUIDSize>32</MaxGUIDSize> <Rx-Pref> <CTType>text/x-vcard </CTType> <VerCT>2.1</VerCT> </Rx-Pref> <Tx-Pref> <CTType>text/x-vcard</CTType> <VerCT>2.1</VerCT> </Tx-Pref> </DataStore> <CTCap> <CTType>text/x-vcard</CTType> <PropName>BEGIN</PropName> <ValEnum>VCARD</ValEnum> <PropName>END</PropName> <ValEnum>VCARD</ValEnum> <PropName>VERSION</PropName> <ValEnum>2.1</ValEnum> <PropName>N</PropName> <PropName>TEL</PropName> <ParamName>VOICE</ParamName> <ParamName>CELL</ParamName> </CTCap> <SyncCap> <SyncType>01</SyncType> <SyncType>02</SyncType> </SyncCap> </DevInf> 우측 계속 ->

  14. SyncML 과 XML • XML은 SyncML의 메시지 기술(Writing) 언어 • XML Representation 카타로그에 들어가는 3개의 스펙은 XML DTD로 정의 • SyncML을 이해하기 위한 XML 기본지식 (2-1) • DTD : 메시지 메타데이타 기술 언어 • <!ELEMENT Add (CmdID, NoResp?, Cred?, Meta?, Item+)> • <!ELEMENT Sync (CmdID, NoResp?, Cred?, Target?, Source?, Meta?, (Add | Atomic | Copy | Delete | Replace | Sequence)*)> • NameSpace : 둘 이상의 DTD를 혼용하여 XML doc의 엘리먼트를 표현하려고 할때 사용 • 코드셋 • XML doc는 컴퓨터 입장에서는 String 타입 • 서로다른 OS/언어간 String 인식 방법 다름 • big/little 엔디안, String 포멧 방식 등 • 따라서 동일한 방식으로 String을 Stream하는 방법이 필요 => 코드셋 • Sun VM의 경우 특정 세팅이 없으면 OS가 사용하는 코드셋으로 String 스트림화 • 메시지의 상호운용성을 보장하기 위해서는 반드시 동기화 장치간 코드셋의 일치화가 필요 • 파서 선택시 가장 중요한 것은 다양한 코드셋의 제공 (특히 한글, 한문, 다양한 특수기호) • 스트링의 길이가 크게 늘어나지 않는 코드셋을 선택 • 메시지 상호운용성 비교

  15. SyncML 과 XML • SyncML을 이해하기 위한 XML 기본지식 (2-2) • XML Writing 방법 • Clear-text • 가장 일바적인 Writing 방법 • <Tag-name>Tab-Value</Tag-Name> • 장점 : 사람이 인식하기 쉬운 Tag-name을 그대로 사용 • 파서를 구현할때 코딩이 쉬움 • 단점 : Tag-name이 XML doc로 들어가기 때문에 메시지 사이즈가 길어짐 • 특히 코드셋(2byte, 3byte)에 따라 스트림화 했을 경우 사이즈 크게 늘어남 • 지원 : Clear-base 파서는 상용/공개용 풍부 • WBXML • WAP 포럼에서 제정 • 무선의 네트웍이 안정적이지 않은 장치에서 사용하기 위해 메시지 사이즈를 작게하는데 초점 • Code-page(1byte)라는 것을 사용해 Namepace를 변경 • Tag-name과 매칭되는 매칭값 존재 • Tag-name을 표현하는 1byte에는.. • 각 bit의 값으로 1byte 이상으로 매칭값을 사용하는지/속성이 있는지/Empty가 아닌지 판단 • 2D2C3103”1.0”0001 (9byte) => <SyncML><SyncHdr><VerDTD>1.0</VerDTD> (37byte) • 장점 : XML doc 사이즈가 획기적으로 줄어듦 (대부분 Tag-name이 2Byte 내외) • 어떤 코드셋을 사용하든 Tag-name의 크기는 동일하게 유지 • 단점 : 인식하기 어렵고 Namespace 매칭값/Tag-name 매칭값이 서로 약속되어 있어야함

  16. 데이터 Device1 데이터 입력 Device2 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • SyncML 내부 동작을 위해 사용되는 정보, 인증, 동기화 방법에 대한 표준 • Sync Protocol spec.은 설명이 충분히 자세하지 않음. • Sync Protocol은 ‘이래야 한다’라는 결과를 말하지 그렇게 되기위해 해야할 과정을 설명하지는 않음 (대부분 구현 벤더의 몫) • Sync Client / Sync Server • 최초 동기화 메시지를 보내는 쪽이 Sync Client (Pkg#1) • 동기화 완료된 데이타의 의미 Main Device

  17. 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • SyncML 내부 동작을 위해 사용되는 정보(3-1) • ChangeLog • ChangeLog은 데이터의 변경에 대한 사항을 기록 • 다수의 장치와 동기화 할때와 단일 장치와 동기화 할때의 고려하여 ChangeLog를 만들어야 함 • 향후 동기화 할때 동기화된 데이타인지 아직 하지 않아서 이번에 동기화 해야할 데이타인지를 판단하는 판단 근거가됨 • 서버/클라이언트 모두에 존재 • 동기화 도메인에서 사용하는 구현 방법 • Dirty bits : 변경된 데이터에 더티비트세팅, 동기화 이후 Clear • N:M 싱크 불가능, 단일 장치와 동기화 할 경우 사용 • Change time : 데이터 변경 시간을 기록, 동기화 시간 이후 변경된 데이터만을 동기화 • 컴퓨터의 시간을 변경하는 경우 데이터 정합성 보장 못함 • Change Counter : 변경시마다 변경카운터를 1씩 증가, 동기화 카운터 이후 변경된 데이터만을 동기화 • 카운터를 얻기 위한 카운터 분배기/락개념 구현 어려움 • Table과 ChangeLog와의 관계 • 방법1 : Table의 특정 필드를 ChangeLog 처럼 이용가능 • Table의 구조변경이 필요하다는 단점 • Table의 레코드 삭제시 n:m 싱크의 경우 문제발생 - > 데이터가 삭제되면 ChangeLog도 삭제되므로.. • 방법 2 : Table와 ChangeLog을 분리하여 구현 Change Time Change Counter Dirty bits

  18. 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • SyncML 내부 동작을 위해 사용되는 정보 (3-2) • Anchor • SyncML 동기화때 처음 오가는 메시지(Alert Command)에 Anchor 정보 탑재하여 교환 • Anchor를 쉽게 표현하여 ‘암호 맞추기’ • Last와 Next 두가지 데이터를 가지는데 • Last는 이번 동기화때 약속했던 ‘암호’를 넣고 Next는 이번 동기화가 성공하면 다음 동기화때 맞춰볼 암호를 세팅 • Anchor 값 : 숫자를 1씩 증가하거나 UTC Time Formating으로 표현한 시간 • DB와 Item 단위로 Anchor를 줄수 있음 • 즉 한번의 동기화로 다수의 DB를 동기화 할 경우 다수의 Anchor가 Alert Command에 탑재되어 교환 • Item 단위로 Anchor를 주는 겂은 높은 레벨의 안정성을 보장하지만 실제 도메인에서 구현한 사례없음(--;;) • Anchor가 맞지 않을 경우 Slow 싱크 일어남. • 따라서 가장 최초 동기화때 반드시 Slow 싱크가 일어나게 되있음 • Two-way일 경우 내부에 저장될 Anchor 정보는 자신의 것(보내줘야 하니까)과 상대방(확인해야 하니까) • Map Table (2-1) • 동기화할 데이터의 식별자가 동일하지 않을경우 필요 • 서버쪽에 존재하여 서버(GUID)와 클라이언트(LUID)간 식별자를 매핑시켜주는 매핑테이블 • PDA나 핸드폰의 경우 embedded Storge를 사용할 경우 대부분은 ID 할당은 OS가 해줌 • 따라서 ID가 클라이언트와 서버가 동일하다는 보장을 못함. • Mobile의 이러한 특성에 의해 Map Table은 반드시 필요 • N:M 싱크를 할경우 Map Table를 이용하여 Add와 Replace를 구별하는데 사용할 수 있음 (구현 종속적.. --;;) • Map Table 유지를 위하여 Map Command 존재 • (다음장 운영 시나리오 그림)

  19. Local input 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML 내부 동작을 위해 사용되는 정보 (3-3) • Map Table (2-2) Client Database Database Server 1 Mr. Ha 20010518001 Mr.Ha 2 Mr. Kim 20010518002 Mr.Kim 3 Mr. Lee 20010518003 Mr.Lee Map table 1 20010518001 2 20010518002 3 20010518003 to Server, from Client <Add>…<Item><Source><locURI>2</locURI></Source><Date>Mr. Kim</Date></Item></Add> to Client, from Server <Add>…<Item><Source><locURI>20010518003</locURI></Source><Date>Mr. Lee</Date></Item></Add> to Server, from Client <Map>…<MapItem><Target><locURI>20010518003</locURI></Target><Source><locURI>3</locURI>..</Map>

  20. 메시지 프로세서 상호운용성 – SyncML Protocol ⑥ 변경 Mr. Jo ⑤ ① ② ③ Server Database Map table Client Database Change Log information Anchor Information Anchor Information to Server, from Client <Alert>…<Meta><Anchor xmlns=‘syncML….’><Last>14</Last><Next>15</next></Anchor> to Client, from Server <Alert>…<Meta><Anchor xmlns=‘syncML….’><Last> 20000521T090000Z</Last></Anchor> <Replace>…<Item><Target><locURI>2</locURI></Target><Date>Mr. Jo</Date></Item></Add>

  21. 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • 동기화 시나리오(5-1) 동기화 전/후 update Insert Map table 유지

  22. 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • 동기화 시나리오 • 전체 동기화 Package Client (C) Server (S) Package 1 목표 Device : ‘S’인증 정보 동기화할 DB : jamesbond, Device 정보 목표 Device : ‘C” ,인증 정보 동기화할 DB : contacts, Device 정보 Package 1에 대한 응답 정보 Package 2 Package 3 목표 Device : ‘S’ Replace LUID(24) “문상철”Package 2에 대한 응답 정보 목표 Device : ‘C’ add GUID(BBB) “박자영”Package 3에 대한 응답 정보 Package 4 Package 5 목표 Device : ‘S’ Map정보(52, AAA) Package 4에 대한 응답 정보 목표 Device : ‘C’ Package 5에 대한 응답 정보 Package 6

  23. 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • 동기화 시나리오(6-1) • Package #1 (Client -> Server) <SyncML> <SyncHdr> <VerDTD>1.0</VerDTD> SyncML DTD의 버전정보. <VerProto>SyncML/1.0</VerProto> SyncML 프로토콜의 버전 <SessionID>1</SessionID> 메세지를 구별해 주는 ID(전송의 단위) <MsgID>1</MsgID> XML문서의 ID(전송의 단위 구별) <Target><LocURI>http://www.syncml.org/sync-서버</LocURI></Target> 동기화 하려는 상대편 어플리케이션의 URI(여기서는 SyncML 서버) <Source><LocURI>IMEI:493005100592800</LocURI></Source> 자신의 URI(여기서는 SyncML 클라이언트) <Cred> Target app에 Source app가 인증이 요청될 때 보내지는 정보 <Meta><Type xmlns='syncml:metinf'>syncml:auth-basic</Type></Meta> <Data>QnJ1Y2UyOk9oQmVoYXZl</Data> 두가지 방법이 가능 base 64와 MD5. 여기서는 basic 64를 사용. <!--base64 formatting of "userid:password"--> </Cred> </SyncHdr> <SyncBody> <Alert> 동기화 타입 지정, 동기화 대상 데이터의 Anchor를 교환 <CmdID>1</CmdID> <Data>200</Data> <!-- 200 = TWO_WAY_ALERT --> <Item> 동기화할 DB <Target><LocURI>SDB</LocURI></Target> <Source><LocURI>CDB</LocURI></Source> <Meta> <Anchor xmlns='syncml:metinf'> <Last>234</Last> <Next>276</Next> </Anchor> </Meta> </Item> </Alert> <Put> 클라이언트의 서비스와 디바이스 정보를 여기에 담아 보낼 수 있다. </Put> <Get> 서버의 서비스와 디바이스 정보를 요청할 수 있다. </Get> <Final/> </SyncBody> </SyncML> 간략 설명 <SyncML> <SyncHdr> 동기화할 어플리케이션 및 그 어플리케이션 인증에 필요한 정보를 넣는다 </SyncHdr> <SyncBody> <Alert> 동기화 타입과 동기화 할 대상 데이터(Anchor교환) 기술 </Alert> <Put> 클라이언트의 서비스와 디바이스 정보를 여기에 담아 보낼 수 있다. </Put> <Get> 서버의 서비스와 디바이스 정보를 요청할 수 있다. </Get> </SyncBody> </SyncML>

  24. 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • 동기화 시나리오(6-2) • Package #2 (Server -> Client) <SyncML> <SyncHdr> 서버도 클라이언트에 인증을 받을 필요가 있다면 <Cred> 이 정보를 보내야 한다.(양방향 인증) <Meta><Type xmlns='syncml:metinf'>syncml:auth-basic</Type></Meta> <Data>QnJ1Y2UyOk9oQmVoYXZl</Data> <!--base64 formatting of "userid:password"--> </Cred> </SyncHdr> <SyncBody> Status를 보낸다. <Status> 세션에 대한 인증이 OK <MsgRef>1</MsgRef><CmdRef>0</CmdRef><Cmd>SyncHdr</Cmd> <TargetRef>http://www.syncml.org/sync-서버</TargetRef> <SourceRef>IMEI:493005100592800</SourceRef> <Data>212</Data> <!--Statuscode for OK, authenticated for session--> </Status> <Status> 두 DB 상의 Anchor 교환이 성공함. <MsgRef>1</MsgRef><CmdRef>1</CmdRef><Cmd>Alert</Cmd> <TargetRef>SDB</TargetRef> <SourceRef>CDB</SourceRef> <Data>200</Data> <!--Statuscode for OK--> <Item> <Data><Anchor mlns='syncml:metinf'> <Next>276</Next></Anchor> </Data> Anchor를 받은 쪽은 자신의 Anchor 정보를 이처럼 Status에 넣어 보낸다. </Item> </Status> <Results> Get을 통한 요청을 이곳을 통해 보내준다. (Device DTD) </Results> <Alert> 서버도 동기화할 DB에 대한 Anchor 정보를 보낸다. <CmdID>1</CmdID> <Data>201</Data> <!-- 201 = TWO_WAY_ALERT --> <Item> <Target><LocURI>CDB</LocURI></Target> <Source><LocURI>SDB</LocURI></Source> <Meta> <Anchor xmlns='syncml:metinf'> <Last>200005021T081812Z </Last> <Next>200005022T093223Z </Next> </Anchor> </Meta> </Item> </Alert> <Final/> 현 Message가 이 Package의 끝임을 명시해 주는 태그 </SyncBody> </SyncML> </SyncBody> </SyncML> 간략 설명 <SyncML> <SyncHdr> 서버도 클라이언트에 인증을 받을 필요가 있다면 이 정보를 보내야 한다.(양방향 인증) </SyncHdr> <SyncBody> <Status> 각종 상태 정보를 보낸다. Representation Protocol 스펙 </Status> <Results> Get을 통한 요청을 이곳을 통해 보내준다. (Device DTD) </Results> <Alert> TWO_WAY_ALERT일 경우 서버도 동기화 할 DB를 기술한다.(Anchor) </Alert> </SyncBody> </SyncML> 오른쪽 계속 ->

  25. 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • 동기화 시나리오(6-3) • Package #3 (Client -> Server) <SyncML> <SyncHdr> 중략 </SyncHdr> <SyncBody> <Status> </Status> 패키지 #2에서 온 정보에 대한 status를 보낸다. <Sync> 실제 동기화 할 DB에 대한 처리 command를 묶는 역할을 한다. <CmdID>1</CmdID> 동기화할 DB <Target><LocURI>SDB</LocURI></Target> <Source><LocURI>CDB</LocURI></Source> <Meta> 현 db의 free memory와 free record의 개수를 기술 <Mem xmlns='syncml:metinf'> <FreeMem>8100</FreeMem> <!--Free memory (bytes) in Calendar database on a device --> <FreeId>81</FreeId> <!--Number of free records in Calendar database--> </Mem> </Meta> <Replace> DB의 data를 갱신해 주는 command <CmdID>2</CmdID> <Item> <Source><LocURI>24</LocURI></Source> <Data>문상철</Data> </Item> </Replace> </Sync> </SyncBody> </SyncML> 간략 설명 <SyncML> <SyncHdr> </SyncHdr> <SyncBody> <Status> </Status> 패키지 #2에서 온 정보에 대한 status를 보낸다. <Sync> 실제 동기화 할 DB에 대한 처리 command를 묶는 역할을 한다. <Meta> 현 db의 free memory와 free record의 갯수를 기술 </Meta> 각종 동기화를 위한 command <Replace> 갱신될 데이터들 </Replace> <Add> 추가될 데이터들 </Add> <Delete> 삭제될 데이터들 </Delete> <Copy> 복사될 데이터들 </Copy> <Exec> 실행시킬 어플리케이션 </Exec> </Sync> </SyncBody> </SyncML>

  26. 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • 동기화 시나리오(6-4) • Package #4 (Server -> Client) 간략 설명 <SyncML> <SyncHdr> </SyncHdr> <SyncBody> <Status> 각종 status </Status> <Sync> 서버쪽 동기화 요청 사항을 위한 command를 묶는 역할 …중략 … <Add> 서버측의 add command는 클라이언트로부터의 맵 정보 전송을 요구한다. <CmdID>2</CmdID> <Item> <Source><LocURI>BBB</LocURI></Source> <Data>박자영</Data> </Item> </Add> </Sync> </SyncBody> </SyncML> <SyncML> <SyncHdr> </SyncHdr> <SyncBody> <Status> </Status> 패키지 #3에서 온 정보에 대한 status를 보낸다. <Sync> 실제 동기화 할 DB에 대한 처리 Command를 묶는 역할을 한다. <Meta> 현 db의 free memory와 free record의 갯수를 기술 </Meta> 각종 동기화를 위한 command <Replace> 갱신될 데이터들 </Replace> <Add> 추가될 데이터들 </Add> <Delete> 삭제될 데이터들 </Delete> <Copy> 복사될 데이터들 </Copy> <Exec> 실행시킬 어플리케이션 </Exec> </Sync> </SyncBody> </SyncML>

  27. 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • 동기화 시나리오(6-5) • Package #5 (Client -> Server) 간략 설명 <SyncML> <SyncHdr> </SyncHdr> <SyncBody> <Status> </Status> <Map> 클라이언트의 LUID와 서버의 GUID 매핑을 위한 정보를 전송한다. <CmdID>1</CmdID> <Target><LocURI>SDB</LocURI></Target> <Source><LocURI>CDB</LocURI></Source> <MapItem> <Target><LocURI>BBB</LocURI></Target> 임시 GUID <Source><LocURI>52</LocURI></Source> LUID </MapItem> </Map> </SyncBody> </SyncML> <SyncML> <SyncHdr> </SyncHdr> <SyncBody> <Status> </Status> <Map> LUID와 GUID를 매핑 시킨 정보 </Map> </SyncBody> </SyncML>

  28. 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • 동기화 시나리오(6-6) • Package #6 (Server -> Client) 간략 설명 <SyncML> <SyncHdr> </SyncHdr> <SyncBody> <Status> Map에 대한 Status를 보낸다. <MsgRef>3</MsgRef><CmdRef>1</CmdRef><Cmd>Map</Cmd> <TargetRef>SDB</TargetRef> <SourceRef>CDB</SourceRef> <Data>200</Data> </Status> </SyncBody> <SyncML> <SyncHdr> </SyncHdr> <SyncBody> <Status> Map command에 대한 응답 코드 </Status> </SyncBody> </SyncML>

  29. 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • 동기화 타입 • Two-Way Sync • 자신의 데이터 변경을 상대방에게 적용하는 타입 • 클라이언트, 서버가 서로의 데이터 사항을 메시지로 전송 • 충돌 문제 발생 • 서버와 클라이언트가 동일한 데이터의 추가/변경을 요구하는 경우 • 정책 설정을 통한 ‘Win 정책’ 필요 • 가장 일반적이며 다른 동기화 타입(One-Way from ** Only)은 Two-way Sync의 서브셋 • Slow Sync • Two-Way Sync시 Achor 불일치, 기타 내부정보의 손상으로 동기화 초기화가 필요할때 발생 • 클라이언트의 모든 정보를 서버쪽에서 ‘Field-by-Field’검토하여 동일하지 않은 부분을 검토 • 따라서 엄청난 시간과 자원이 소모 • 오류시 일어나는 다른 동기화 타입(Refresh Sync From ** Only)은 Slow Sync의 서브셋 • One-Way Sync from Server/Client Only • 단방향 동기화 • Refresh Sync from Server/Client Only • One-Way Sync from Server/Client Only시 Achor 불일치, 기타 내부정보의 손상으로 동기화 • 초기화가 필요할때 발생 • Server Alerted Sync • 7가지 동기화 타입중 Server가 Client에게 최초 메시지를 보내는 동기화 타입 • 서버가 클라이언트에게 ‘어떤 정보’를 알람 • 사용예 • 서버가 자신과 관련된 모든 클라이언트에게 특정 동기화 타입으로 동기화 하자고 할때

  30. 메시지 프로세서 상호운용성 – SyncML Protocol • SyncML Sync Protocol spec. • 동기화 타입에 따른 교환 Command와 데이타

  31. SyncML 구현예 –시스템 구성 Server RDBMS DesktopPC SyncML Impl. Two-way 싱크 (TCP/IP.. 아직 스펙은 없지만 ^^;;) Two-way 싱크 (HTTP) SyncML Impl. SyncML Impl. RMS 임베디드 DB PDA 핸드폰 Client 1 Client 2

  32. SyncML 구현예 –소프트웨어 구성

More Related