2. 1) OMA-DS 절차
사용자가 동기화 수행 명령을 내리면 클라이언트와 서버는 동기화 전 초기화한 후 동기화를 수행한다.
동기화가 종료되면 세션을 유지하여 다음 동기화 수행 또는 세션을 종료하여 동기화 결과를 전송한다.
사용자 클라이언트 서버
동기화 수행 명령
동기화 결과 전송
1. 초기화
동기화 요청 및 수용 단계로 클라이언트와 서버의 대상 주소
및 상태를 전송한다.
처음 동기화 수행 단계에서는 클라이언트와 서버 간 인증(ID,
Password) 및 각 노드 간 정보(서버 URL, 클라이언트 고유
ID(IMEI, MDN 등), Data Store 등)을 공유한다.
초기화 시 데이터 무결성을 위해 Anchor를 사용하며 Last
Anchor를 비교하여 올바른 동기화 대상인지 파악한다.
- Anchor는 데이터 저장소의 동기에 대한 날짜 시간정보를 포함
하며 Last, Next 2가지 Anchor를 전송한다. Last는 마지막에 동기
화 된 시간 정보를 포함하며 Next는 현재 동기 요청을 전송한 클
라이언트에 대한 시간 정보를 포함한다.
2. 동기화 수행
클라이언트는 변경된 데이터를 서버로 전송하며 서버는 변경
데이터에 대한 반영 상태 및 서버 변경 데이터를 전송 한다. (3,
4)
변경 데이터에 대한 ID는 클라이언트 측에서 결정하며 서버 변
경 데이터 반영 상태 전송 시 해당 데이터에 대한 ID를 전달한
다. (5)
클라이언트는 변경 데이터 전송 시 FingerPrint를 전송하여 데
이터 변경 유무를 판단할 수 있다.
- FingerPrint는 해쉬 등을 사용하여 전송
3. 세션 유지 또는 종료
세션을 유지하여 다음 동기화를 진행하거나 세션을 종료하고
동기화 결과를 전송한다.
1. 초기화 (동기화 요청)
2. 초기화 (동기화 수용)
3. 클라이언트 변경 데이터 전송
4. 클라이언트 변경 데이터 반영
상태 및 서버 변경 데이터 전송
5. 서버 변경 데이터 반영 상태 전송
6. 결과 전송
1
2
세션 유지 또는 종료
3
3. 2) OMA-DS 절차 (인증 및 정보 공유 - Client)
<SyncML Version="2.0">
<SyncHdr SessionID="4" MsgID="1" MaxMsgSize="5000">
<TargetServerURI>http://www.syncml.org/sync-server</TargetServerURI>
<SourceClientURI>IMEI:493005100592800</SourceClientURI>
<Cred> <!--The authentication is optional.-->
<Meta Type="syncml:auth-basic"/>
<Data>QnJ1Y2UyOk9oQmVoYXZl</Data> <!--base64 formatting of "userid:password"-->
</Cred>
</SyncHdr>
<SyncBody>
<Put CmdID="2">
<Meta Type="application/vnd.syncml-devinf+xml"/>
<Item>
<SourceClientURI>./devinf20</SourceClientURI>
<Data><![CDATA[
<DevInf xmlns='syncml:devinf20' Version="2.0">
<DevCap UTC="true" SupportLargeObjs="true" SupportNumberOfChanges="true">
단말정보
</DevCap>
<DataStore DisplayName="Phonebook" MaxGUIDSize="32">
<SourceRef>./contacts</SourceRef>
…….
<Property>
<PropName>BEGIN</PropName>
<ValEnum>VCARD</ValEnum>
</Property>
<Property>
<PropName>END</PropName>
<ValEnum>VCARD</ValEnum>
</Property>
<Property>
<PropName>VERSION</PropName>
<ValEnum>2.1</ValEnum>
</Property>
………..
</DataStore>
</DevInf>]]>
</Data>
</Item>
</Put>
<Get CmdID="3" >
서버 정보 요청
</Get>
<Final/>
</SyncBody>
</SyncML>
각 노드의 정보 및 인증 정보 전달 (ID:Password)
단말 정보 (OS version, 모델명 등)
동기화 요청 메시지(Sync Alert) – 5 Page
단말 내 데이터 저장소 정보
세션 인증 간 전달하고자 하는 데이터
세션 인증 간 전달 받고자 하는 요청 데이터
4. 2) OMA-DS 절차 (인증 및 정보 공유 - Server)
<SyncML Version="2.0">
<SyncHdr SessionID="4" MsgID="1" >
<TargetClientURI>IMEI:493005100592800</TargetClientURI>
<SourceServerURI>http://www.syncml.org/sync-server</SourceServerURI>
<Cred> <!--The authentication is optional.-->
<Meta Type="syncml:auth-basic"/>
<Data>QnJ1Y2UyOk9oQmVoYXZl</Data> <!--base64 formatting of "userid:password"-->
</Cred>
</SyncHdr>
<SyncBody>
<Status CmdID="1" MsgRef="1" CmdRef="0" Cmd="SyncHdr" Code="212">
<!--Statuscode for OK, authenticated for session-->
<ServerURI>http://www.syncml.org/sync-server</ServerURI>
<ClientURI>IMEI:493005100592800</ClientURI>
</Status>
<Status CmdID="2" MsgRef="1" CmdRef="1" Cmd="SyncAlert" Code="200">
<ServerURI>./contacts/james_bond</ServerURI>
<ClientURI>./dev-contacts</ClientURI>
</Status>
<Results>
요청 데이터 – 서버 정보 및 데이터 저장소 정보 등
</Results>
<SyncAlert CmdID="6">
<Anchor Next="276"/>
<TargetClientURI>./dev-contacts</TargetClientURI>
<SourceServerURI>./contacts/james_bond </SourceServerURI>
<SyncType Direction="twoWay" Behaviour="Preserve"
ChangeLogValidity="true" IDValidity="true"/>
</SyncAlert>
<Final/>
</SyncBody>
</SyncML>
동기화 요청 수용 메시지
세션 인증에 대한 결과
동기화 요청에 대한 결과
5. 2) OMA-DS 절차 (1~2)
<SyncBody>
<!-- -->
<SyncAlert CmdID="3">
<Anchor Last="001" Next="002" />
<TargetServerURI>./contacts</TargetServerURI>
<SourceClientURI>./dev-contacts</SourceClientURI>
<SyncType Behaviour="Preserve" Direction="twoWay"
ChangeLogValidity="true" IDValidity="true"/>
</SyncAlert>
<Final/>
</SyncBody>
<SyncBody>
<!-- -->
<Status CmdID="1" MsgRef="1" Cmd="SyncAlert" CmdRef="3" Code="200" >
<ServerURI>./contacts</ServerURI>
<ClientURI>./dev-contacts</ClientURI>
</Status>
<SyncAlert CmdID="3" NoStatus="true">
<Anchor Next="002" />
<TargetClientURI>./dev-contacts</TargetClientURI>
<SourceServerURI>./contacts</SourceServerURI>
<SyncType Behaviour="Preserve" Direction="twoWay"
ChangeLogValidity="true" IDValidity="true"/>
</SyncAlert>
<Final/>
</SyncBody>
무결성 확인을 위한 Anchor
- Last : 마지막 동기화 시점
- Next : 현재 동기화 시점
데이터 저장소 위치 지정
- 데이터 저장소 위치 정보는 초기 세션 인증 시
획득
동기화 동작, 방향, 상태
1. 초기화 (동기화 요청) - Client
2. 초기화 (동기화 수용) - Server
결과 코드 (Code : 200)
데이터 저장소 위치 확인
동기화 동작, 방향, 상태
6. 2) OMA-DS 절차 (3)
<SyncBody>
<!-- -->
<Sync CmdID="3" NumberOfChanges="1" FreeID="81" FreeMem="8100">
<TargetServerURI>./contacts</TargetServerURI>
<SourceClientURI>./dev-contacts</SourceClientURI>
<Replace CmdID="4" >
<Meta Type="text/x-vcard" />
<Item>
<SourceClientURI FP="1234">1012</SourceClientURI>
<Data>
<!--The vCard data would be placed here.-->
</Data>
</Item>
</Replace>
</Sync>
<Final/>
</SyncBody>
3. 변경 데이터 전송 - Client
변경 및 추가, 삭제 등에 대한 명령어
- Replace, Add, Delete …
변경 아이템 정보
- SourceClientURI : 변경 데이터 ID
- FP (FingerPrint) : 해당 데이터 변경 유무 확인을
위한 데이터
7. 2) OMA-DS 절차 (4)
<SyncBody>
<!-- -->
<Status CmdID="2" MsgRef="2" Cmd="Sync" CmdRef="3" Code="200" >
<ServerURI>./contacts</ServerURI>
<ClientURI>./dev-contacts</ClientURI>
</Status>
<Status CmdID="3" MsgRef="2" Cmd="Replace" CmdRef="4" Code="200" />
<Sync CmdID="4" NumberOfChanges="2" FreeID="81" FreeMem="8100">
<TargetClientURI>./dev-contacts</TargetClientURI>
<SourceServerURI>./contacts</SourceServerURI>
<Replace CmdID="5" >
<Meta Type="text/x-vcard" />
<Item>
<TargetClientURI>1023</TargetClientURI>
<Data>
<!--The vCard data would be placed here.-->
</Data>
</Item>
</Replace>
<Add CmdID="6" >
<Meta Type="text/x-vcard" />
<Item>
<SourceServerURI>ABCD12345_1024</SourceServerURI>
<Data>
<!--The vCard data would be placed here.-->
</Data>
</Item>
</Add>
</Sync>
<Final/>
</SyncBody>
클라이언트 변경 데이터 반영 상태
서버 변경 데이터
4. 클라이언트 변경 데이터 반영 상태 및 서버 변경 데이터 전송 - Server
8. 2) OMA-DS 절차 (5~6)
<SyncBody>
<!-- -->
<Status CmdID="2" MsgRef="2" Cmd="Sync" CmdRef="4" Code="200" >
<ServerURI>./contacts</ServerURI>
<ClientURI>./dev-contacts</ClientURI>
</Status>
<Status CmdID="3" MsgRef="2" Cmd="Replace" CmdRef="5" Code="200" >
<StatusItem>
<ClientURI FP="1234">1023</ClientURI>
</StatusItem>
</Status>
<Status CmdID="4" MsgRef="2" Cmd="Add" CmdRef="6" Code="200" >
<StatusItem>
<ServerURI>ABCD12345_1024</ServerURI>
<ClientURI FP="2345">1024</ClientURI>
</StatusItem>
</Status>
<Final/>
</SyncBody>
<SyncBody>
<!-- -->
<Status CmdID="1" MsgRef="3" Cmd="SyncHdr" CmdRef="1" Code="200" >
<!-- -->
</Status>
<Final/>
</SyncBody>
5. 서버 변경 데이터 반영 상태 및 아이템 상태 전송 - Client
6. 결과 전송 - Server
서버에서 변경된 아이템에 대한 반영 상태
및 반영 정보(FP, Client URI) 전송
서버에서 추가된 아이템에 대한 반영 상태
및 반영 정보(FP, Client URI) 전송
9. 3) 충돌 해결 방안
서버와 클라이언트 디바이스가 캘린더에서 동일한 날짜에 변경을 하게 되면, 동기화 과정에서 충돌이 발
생하는 것과 같이 충돌은 동기 서버와 클라이언트에서 동일한 데이터 항목을 변경하고 동기화하는 과정
에서 발생한다. 일반적으로 충돌은 클라이언트 디바이스에서 감지하여 서버로 충돌 데이터를 전송한다.
서버는 미리 정해진 정책에 의해서 충돌을 해결하고, 클라이언트에게 상태 명령을 통해서 충돌이 해결된
결과를 전송한다.
정책 서버 동작
서버 우선 서버는 서버에서 변경된 데이터를 클라이언트에게 다시 전송한다.
클라이언트 우선 서버는 클라이언트에서 수신한 데이터를 변경한다.
병합 (Merge)
서버는 클라이언트에서 수신한 데이터를 서버 데이터와 병합하고,
병합한 데이터와 함께 ‘Replace’를 클라이언트에 보낸다.
복제
서버는 클라이언트에서 수신한 데이터를 복제하여 생성하고, 생성
한 데이터와 함께 ‘Add’를 클라이언트에 전송한다.