클라이언트 및 서버 동기화에 대한 아키텍처 및 클래스
Sync Framework를 사용하면 SQL Server Compact 클라이언트 데이터베이스와 서버 데이터베이스 또는 XML에서 주식 시황을 제공하는 서비스 등의 다른 데이터 소스 간에 동기화를 수행할 수 있습니다. 두 데이터베이스를 동기화할 수 있도록 Sync Framework에서는 ADO.NET 공급자를 사용할 수 있는 서버 데이터베이스를 사용하는 2계층 및 N 계층 아키텍처를 지원합니다. 또한 클라이언트 데이터베이스와 다른 형식의 데이터 소스 간에 동기화를 수행할 수 있도록 Sync Framework에서는 서비스 기반 아키텍처도 지원합니다. 이 아키텍처를 사용하려면 2계층 및 N 계층 아키텍처 이외에 응용 프로그램 코드가 더 필요하지만 개발자가 동기화를 다른 방식으로 수행할 필요는 없습니다.
다음 그림에서는 2계층, N 계층 및 서비스 기반 아키텍처에 포함되는 구성 요소를 보여 줍니다. 각 그림에는 클라이언트가 하나씩만 나와 있지만 일반적으로는 단일 서버에 대해 여러 클라이언트가 동기화됩니다. Sync Framework에서는 클라이언트 및 서버 데이터베이스 동기화에 허브 앤 스포크(hub-and-spoke) 모델이 사용됩니다. 동기화는 항상 클라이언트에서 시작합니다. 각 클라이언트의 모든 변경 내용은 서버와 동기화된 후에 서버에서 다른 클라이언트로 보내집니다. 이러한 클라이언트는 서로 변경 내용을 직접 교환하지 않습니다.
Sync Framework에서는 클라이언트 및 서버 시나리오에 대해 스냅숏, 다운로드 전용, 업로드 전용 및 양방향 동기화가 제공됩니다.
스냅숏 및 다운로드 전용 동기화는 보통 제품 목록 등의 참조 데이터를 클라이언트에서 저장 및 업데이트하는 데 사용됩니다. 서버에서 수행한 데이터 변경 내용은 동기화 중에 클라이언트 데이터베이스로 다운로드됩니다. 스냅숏 동기화의 경우 클라이언트가 동기화될 때마다 데이터를 완전히 새로 고칩니다. 이는 증분 변경 내용을 추적하지 않으려는 경우 또는 서버에서 해당 내용을 추적할 수 없는 경우에 적합합니다. 다운로드 전용 동기화의 경우에는 이전 동기화 이후 수행된 증분 변경 내용만이 다운로드됩니다.
업로드 전용 동기화는 보통 판매 주문 등의 데이터를 클라이언트에 삽입하는 데 사용됩니다. 클라이언트 데이터베이스에서 수행한 삽입 및 기타 데이터 변경 내용은 동기화 중에 서버로 업로드됩니다.
양방향 동기화는 클라이언트와 서버에서 업데이트할 수 있는 보통 고객 연락처 정보 등의 데이터에 사용됩니다. 충돌하는 모든 변경 내용은 동기화 중에 처리해야 합니다.
동기화 형식에 대한 자세한 내용은 방법: 스냅숏, 다운로드, 업로드 및 양방향 동기화 지정을 참조하십시오. 클라이언트 및 서버 동기화를 위한 Sync Framework 아키텍처는 비대칭적입니다. 즉, 변경 내용 추적 기능이 클라이언트 데이터베이스에서 기본적으로 제공되지만 증분 변경 내용을 다운로드하려는 경우에는 서버 데이터 저장소에서 변경 내용을 추적해야 합니다. 변경 내용 추적에 대한 자세한 내용은 서버 데이터베이스의 변경 내용 추적을 참조하십시오.
아키텍처 그림의 구성 요소
아키텍처 그림에 나와 있는 구성 요소에는 클라이언트, 서버 데이터베이스 및 Sync Framework 데이터베이스 동기화 API의 클래스 집합이 포함됩니다. 그리고 N 계층 및 서비스 기반 아키텍처에는 사용자가 작성해야 하는 웹 서비스 및 전송 구성 요소도 포함됩니다.
2계층 아키텍처
첫 번째 그림에서는 클라이언트 데이터베이스와 서버 데이터베이스가 있는 2계층 아키텍처를 보여 줍니다.
이 두 데이터베이스를 제외하면 그림에 나와 있는 모든 항목은 Sync Framework 클래스에 해당합니다. 이러한 클래스는 다음 DLL에 들어 있습니다.
Microsoft.Synchronization.Data.dll에는 동기화 에이전트, 동기화 테이블 및 동기화 그룹이 들어 있습니다.
Microsoft. Synchronization.Data.SqlServerCe.dll에는 클라이언트 동기화 공급자가 들어 있습니다.
Microsoft. Synchronization.Data.Server.dll에는 서버 동기화 공급자 및 동기화 어댑터가 들어 있습니다.
모든 DLL은 .NET Framework 2.0 이상 버전의 System.dll 및 System.Data.dll을 사용합니다. Microsoft.Synchronization.Data.SqlServerCe.dll은 SQL Server Compact의 System.Data.SqlServerCe.dll도 사용합니다. 2 계층 응용 프로그램의 경우 모든 Sync Framework DLL은 클라이언트에 있습니다. 그리고 N 계층 응용 프로그램의 경우 Microsoft.Synchronization.Data.dll 및 Microsoft.Synchronization.Data.Server.dll은 동기화 서비스를 제공하는 별도의 컴퓨터에 있습니다.
N 계층 아키텍처
두 번째 그림에서는 N 계층 아키텍처를 보여 줍니다. 여기에는 클라이언트 데이터베이스와 서버 데이터베이스 간의 통신을 위한 프록시, 서비스 및 전송 메커니즘이 필요합니다. N 계층 아키텍처의 경우 클라이언트와 서버 데이터베이스 간에 직접 연결이 필요하지 않기 때문에 2계층 아키텍처보다 널리 사용됩니다.
서비스 기반 아키텍처
세 번째 그림에서는 서비스 기반 아키텍처를 보여 줍니다. 이 아키텍처에는 클라이언트 데이터베이스는 포함되지만 서버 데이터베이스나 해당 서버 동기화 공급자 및 동기화 어댑터는 포함되지 않습니다. 이러한 종류의 아키텍처를 사용하려면 응용 프로그램이 사용자 지정 프록시 및 사용자 지정 서비스를 통해 동기화 에이전트와 통신할 수 있어야 합니다. 이러한 동기화 형식은 동기화할 변경 내용 검색 등 서버 동기화 공급자 및 동기화 어댑터가 일반적으로 제공하는 것과 같은 기능을 제공해야 합니다.
클라이언트 데이터베이스
Sync Framework 응용 프로그램의 클라이언트 데이터베이스는 SQL Server Compact 3.5 SP1 이상 버전입니다(SQL Server Compact의 64비트 버전 포함). Sync Framework에서는 클라이언트 데이터베이스에서 증분 변경 내용을 추적하기 위한 인프라를 제공합니다. 이 인프라는 스냅숏 동기화 이외의 방법을 사용하여 테이블을 처음으로 동기화하면 사용하도록 설정됩니다. 기본적으로 클라이언트 데이터베이스에서 Sync Framework에 필요한 메타데이터는 10일 동안 저장됩니다. 메타데이터 유지에 대한 자세한 내용은 RetentionInDays를 참조하십시오.
서버 데이터베이스
서버 데이터베이스는 ADO.NET 공급자를 사용할 수 있는 데이터베이스입니다. 서버 데이터베이스에서 증분 변경 내용을 추적하려는 경우에는 이러한 작업을 수행하도록 데이터베이스를 준비해야 합니다. 자세한 내용은 서버 데이터베이스의 변경 내용 추적를 참조하십시오.
Sync Framework 클래스
위의 그림에는 SyncAgent, SqlCeClientSyncProvider, DbServerSyncProvider, SyncTable, SyncGroup 및 SyncAdapter 클래스가 나와 있습니다. 응용 프로그램에서 이러한 클래스를 사용하는 방법에 대한 예제는 시작: 클라이언트 및 서버 동기화을 참조하십시오.
동기화 에이전트
동기화 에이전트는 다음과 같은 방식으로 동기화를 수행합니다.
동기화할 각 테이블 순환
클라이언트 동기화 공급자를 호출하여 클라이언트 데이터베이스에서 변경 내용 검색 및 적용
서버 동기화 공급자를 호출하여 서버 데이터베이스에서 변경 내용 검색 및 적용
동기화 에이전트는 동기화의 세션 수준 정보도 유지 관리하며 클라이언트에서 응용 프로그램에 대해 성공 메시지, 오류 및 통계를 제공합니다. 자세한 내용은 SyncAgent 및 방법: 스냅숏, 다운로드, 업로드 및 양방향 동기화 지정을 참조하십시오.
클라이언트 동기화 공급자
클라이언트 동기화 공급자는 클라이언트와 통신하며 동기화 에이전트가 클라이언트 데이터베이스를 특정 방식으로 구현하지 못하도록 차단합니다. Sync Framework에는 SQL Server Compact 데이터베이스에 대한 공급자가 포함되어 있습니다. 클라이언트 동기화 공급자가 수행하는 주요 작업은 다음과 같습니다.
동기화에 사용할 수 있는 클라이언트의 테이블에 대한 정보 저장
마지막 동기화 이후 클라이언트 데이터베이스에서 수행된 변경 내용 검색
클라이언트 데이터베이스에 증분 변경 내용 적용
충돌하는 변경 내용 검색
자세한 내용은 SqlCeClientSyncProvider 및 방법: 스냅숏, 다운로드, 업로드 및 양방향 동기화 지정을 참조하십시오.
서버 동기화 공급자
서버 동기화 공급자는 서버와 통신하며 동기화 에이전트가 서버 데이터베이스를 특정 방식으로 구현하지 못하도록 차단합니다. 서버 동기화 공급자가 수행하는 주요 작업은 다음과 같습니다.
동기화에 사용할 수 있는 서버의 테이블에 대한 정보 저장
응용 프로그램이 마지막 동기화 이후 서버 데이터베이스에서 수행된 변경 내용을 검색하도록 함
서버 데이터베이스에 증분 변경 내용 적용
충돌하는 변경 내용 검색
자세한 내용은 DbServerSyncProvider 및 방법: 스냅숏, 다운로드, 업로드 및 양방향 동기화 지정을 참조하십시오.
동기화 테이블 및 동기화 그룹
동기화 테이블은 동기화되는 각 테이블에 대해 정의됩니다. 이 테이블에는 동기화 방향 등의 설정이 저장됩니다. 각 클라이언트는 필요한 테이블만 요청할 수 있습니다. 여기에는 서버 동기화 공급자가 사용 가능하도록 설정하는 모든 테이블이 포함되지 않을 수 있습니다. 예를 들어 20개의 테이블 중에서 10개가 서버 동기화 공급자에서 양방향 동기화용으로 구성될 수 있습니다. 클라이언트는 테이블 중 12개만 다운로드 전용으로 요청할 수 있습니다. 서버가 업로드를 지원하는 경우에도 클라이언트는 모든 테이블을 변경하거나 동기화할 필요가 없습니다. 자세한 내용은 SyncTable을 참조하십시오.
동기화 테이블을 정의한 후 동기화 그룹에 추가할 수 있습니다. 동기화 그룹은 테이블 집합의 변경 내용을 지속적으로 적용하는 메커니즘입니다. 테이블이 동기화 그룹에 포함되어 있으면 테이블의 변경 내용이 한 단위로 전송되고 단일 트랜잭션에서 서버에 적용됩니다. 그룹 내 변경 내용 적용이 실패하면 전체 그룹에 대한 변경 내용 적용이 다음 동기화에서 다시 시도됩니다. 자세한 내용은 SyncGroup 및 방법: 스냅숏, 다운로드, 업로드 및 양방향 동기화 지정을 참조하십시오.
동기화 어댑터
ADO.NET의 데이터 어댑터를 기반으로 모델링되는 동기화 어댑터는 동기화되는 각 테이블에 대해 정의됩니다. 동기화 어댑터는 클라이언트 데이터베이스에서 서버 데이터베이스로 삽입을 적용하는 InsertCommand와 같이 서버 데이터베이스와 상호 작용하는 데 필요한 특정 명령을 서버 동기화 공급자에게 제공합니다. 동기화 어댑터는 ADO.NET DbCommand 개체를 사용하므로 ADO.NET에서 지원되는 모든 명령 구조를 사용할 수 있습니다. 여기에는 인라인 Transact-SQL, 저장 프로시저, 뷰, 함수 등이 있습니다. 명령을 사용할 때는 전송 및 적용할 구조 및 데이터를 정의하는 하나의 결과만 있으면 됩니다. 자세한 내용은 SyncAdapter 및 방법: 스냅숏, 다운로드, 업로드 및 양방향 동기화 지정을 참조하십시오.
프록시, 서비스 및 전송
프록시, 서비스 및 전송은 N 계층 및 서비스 기반 아키텍처에서 사용됩니다. N 계층 응용 프로그램에서는 Microsoft.Synchronization.Data.Server.dll이 사용되지만 이 DLL은 클라이언트에 있지 않습니다. 일반적으로 이 DLL은 서버 데이터베이스와 직접 연결되는 중간 계층에 있습니다. 이 경우 클라이언트와 중간 계층 간의 통신에는 프록시 및 서비스가 필요합니다.
클라이언트에서 응용 프로그램 코드는 서버 동기화 공급자를 직접 참조하는 대신 공급자에 대해 프록시(ServerSyncProviderProxy)를 참조합니다. 이 프록시가 중간 계층에서 서비스와 통신합니다.
중간 계층에서는 서비스가 ServerSyncProvider(DbServerSyncProvider가 상속되는 추상 클래스)와 같은 메서드에서 상속되며 해당 메서드를 노출합니다. 그런 후에 서버 동기화 공급자 메서드가 서버 데이터베이스에 대한 직접 연결을 통해 실행됩니다. 실행 결과는 중간 계층을 통해 라우트된 후에 클라이언트로 다시 라우트됩니다.
자세한 내용은 방법: N 계층 동기화 구성을 참조하십시오.
서비스 기반 응용 프로그램에서는 Microsoft.Synchronization.Data.Server.dll이 클라이언트에서 사용되지 않습니다. 응용 프로그램 코드는 서버 동기화 공급자 및 동기화 어댑터가 일반적으로 제공하는 것과 같은 기능을 제공해야 합니다.
클라이언트에서 응용 프로그램 코드는 데이터 소스에서 변경 내용을 검색하는 등의 서버 동기화 공급자 태스크를 처리하는 응용 프로그램 코드의 프록시를 참조합니다. 이 프록시가 중간 계층에서 서비스와 통신합니다.
중간 계층에서는 서비스가 ServerSyncProvider(DbServerSyncProvider가 상속되는 추상 클래스)와 같은 메서드에서 상속되며 해당 메서드를 노출합니다. 그런 후에 응용 프로그램 코드에서 서버 데이터베이스에 대한 직접 연결을 통해 메서드를 실행합니다. 실행 결과는 중간 계층을 통해 라우트된 후에 클라이언트로 다시 라우트됩니다.
API의 추가 클래스
이 항목의 그림에서는 API의 주요 클래스를 보여 줍니다. 그러나 여기에 나와 있는 클래스는 극히 일부분일 뿐입니다. 사용 가능한 모든 클래스에 대한 정보를 보려면 Microsoft.Synchronization, Microsoft.Synchronization.Data, Microsoft.Synchronization.Data.SqlServerCe 및 Microsoft.Synchronization.Data.Server를 참조하십시오. 다음 섹션에서는 사용자가 파악해야 하는 기타 네 가지 주요 클래스를 소개합니다.
동기화 앵커
동기화 앵커는 서버에서 동기화되는 테이블 집합에 대한 참조 지점입니다. 동기화 앵커는 응용 프로그램이 지정된 세션 동안 동기화해야 하는 변경 내용을 결정할 수 있도록 합니다. 동기화 중에 클라이언트 동기화 공급자는 다음의 참조 지점을 클라이언트 데이터베이스에 저장합니다.
- 마지막으로 받은 앵커
서버에서 마지막으로 다운로드한 변경 내용을 식별합니다.
- 마지막으로 보낸 앵커
클라이언트에서 마지막으로 업로드한 변경 내용을 식별합니다.
다음 번에 동기화를 수행하면 응용 프로그램은 이러한 앵커를 사용하여 다음 변경 내용 집합을 동기화할 시작 지점을 식별할 수 있습니다. 자세한 내용은 SyncAnchor 및 서버 데이터베이스의 변경 내용 추적를 참조하십시오.
동기화 세션 통계
세션 통계는 동기화 에이전트가 각 동기화 세션에 대해 제공하는 통계 집합입니다. 이 통계에는 동기화 시간, 처리한 변경 내용 수 및 발생한 충돌이나 예외에 대한 정보가 포함됩니다. 자세한 내용은 SyncStatistics 및 방법: 이벤트 및 프로그램 비즈니스 논리 사용을 참조하십시오.
동기화 세션 변수
세션 변수는 개발자가 서버에서 실행되는 선택, 삽입, 업데이트 및 삭제 명령에 대해 매개 변수로 사용하도록 제공되는 변수입니다. 이러한 변수는 충돌 검색을 지원하고 변경 내용이 클라이언트에 두 번 이상 다운로드되지 않게 하는 등의 다양한 방식으로 사용할 수 있습니다. 자세한 내용은 SyncSession 및 방법: 세션 변수 사용을 참조하십시오.
SQL 서버 동기화 어댑터 작성기
ADO.NET의 명령 작성기를 기반으로 모델링된 동기화 어댑터 작성기를 사용하면 서버 동기화 공급자에서 실행하는 동기화 명령에 사용할 코드를 개발할 수 있습니다. 동기화 어댑터 작성기는 SQL Server 데이터베이스에 대해 SELECT, INSERT, UPDATE 및 DELETE 문을 생성합니다. 이러한 문은 동기화에 포함되는 테이블에 대해 제공하는 정보를 기반으로 합니다. 자세한 내용은 SqlSyncAdapterBuilder 및 응용 프로그램 개발용 도구를 참조하십시오.