이 항목에서는 클라이언트 및 서버 응용 프로그램의 배포와 버전 관리에 대해 설명합니다. 피어 데이터베이스 초기화에 대한 자세한 내용은 방법: 공동 작업 동기화 구성 및 실행(SQL Server 이외)에서 "서버 데이터베이스 초기화"를 참조하십시오.
Sync Framework를 사용하는 클라이언트 및 서버 응용 프로그램을 배포하는 방식은 해당 응용 프로그램이 2 계층인지, 아니면 N 계층인지에 따라 달라집니다. 2 계층 응용 프로그램에서 모든 동기화 코드는 클라이언트에 있으며 응용 프로그램을 SQL Server Compact를 기반으로 하는 다른 응용 프로그램과 같이 배포할 수 있습니다. 일반적으로 배포할 때는 ClickOnce를 사용하여 응용 프로그램을 게시하거나 응용 프로그램을 패키징한 후에 각 클라이언트로 복사하게 됩니다. SQL Server Compact를 사용하는 응용 프로그램을 배포하는 방법에 대한 자세한 내용은 SQL Server Compact 온라인 설명서에서 "응용 프로그램 배포" 및 "방법: 데스크톱에 응용 프로그램 빌드 및 배포" 항목을 참조하십시오. N 계층 응용 프로그램의 경우에는 서버측 동기화 구성 요소를 호스팅하는 컴퓨터에도 코드를 배포해야 합니다.
클라이언트 데이터베이스 만들기 및 초기화
2 계층 및 N 계층 응용 프로그램에 대해 응용 프로그램에 필요한 스키마 및 데이터를 포함하는 클라이언트 응용 프로그램을 만들고 초기화할 방법을 결정해야 합니다. 이 작업은 다음과 같은 두 가지 방법으로 수행할 수 있습니다.
Sync Framework를 사용하여 데이터베이스를 만든 후에 첫 번째 동기화 중에 테이블 스키마 및 데이터를 다운로드합니다. 이 방법은 가장 간단하지만 클라이언트와 데이터 집합이 많은 경우에는 네트워크 트래픽과 서버 처리 작업이 많이 필요할 수 있습니다.
테이블 스키마와 초기 데이터 집합이 있는 데이터베이스를 먼저 만듭니다. 이 데이터베이스는 .sdf 파일 형식이며 클라이언트 응용 프로그램에서 전송 또는 다운로드할 수 있습니다. 증분 변경 내용을 다운로드하는 응용 프로그램은 첫 번째 동기화 중에 클라이언트 데이터베이스를 최신 상태로 만들 수 있습니다. 이 방법을 사용하는 경우에는 CreationOption 속성에 대해 적절한 값을 설정합니다.
응용 프로그램에 업로드가 포함되며 변경 내용이 생성된 위치를 파악하려는 경우 응용 프로그램이 ClientId 속성을 설정하여 서버에 대해 클라이언트 데이터베이스를 고유하게 식별할 수 있습니다. 그렇지 않은 경우에는 Sync Framework가 데이터베이스에 대해 새 ID를 생성합니다.
참고
데이터가 각 클라이언트에 대해 다르게 필터링되는 응용 프로그램의 경우에는 클라이언트 데이터를 미리 만드는 작업이 적절하지 않습니다. 이렇게 하면 초기 동기화 중에 변경 내용이 누락될 수 있습니다.
클라이언트 데이터베이스를 초기화하는 방법에 대한 자세한 내용은 방법: 클라이언트 데이터베이스 초기화 및 테이블 스키마 사용을 참조하십시오.
응용 프로그램 버전 관리
응용 프로그램을 개발하여 배포하고 나면 새로운 응용 프로그램 버전을 개발할 수 있습니다. 응용 프로그램 버전 관리에 대해서는 다음과 같은 두 가지 영역을 고려해야 합니다.
새로운 버전이 적용되는 응용 프로그램 부분
새로운 버전을 이전 버전과 함께 설치해야 하는지 여부
서버측 구성 요소를 클라이언트측 구성 요소와 별도로 업데이트할 수 있기 때문에 Sync Framework의 경우 N 계층 응용 프로그램을 업데이트하기가 대개 더 쉽습니다. 따라서 업데이트된 기능이 포함된 새로운 서비스를 노출할 수 있으며 클라이언트측 구성 요소를 업데이트할 준비가 될 때까지 클라이언트에 서버측 변경 내용이 적용되지 않습니다.
N 계층 응용 프로그램 버전 관리
Sync Framework의 경우 고려해야 하는 주요 응용 프로그램 업데이트는 서버 데이터베이스에 대한 스키마 변경 내용입니다. Sync Framework는 서버에서 클라이언트로 스키마 변경 내용을 자동으로 전파하지 않습니다. 그러나 응용 프로그램의 적절한 부분을 업데이트하는 경우에는 스키마 변경 내용이 지원됩니다. 클라이언트 데이터베이스에서 지원되는 스키마 변경 내용의 목록을 보려면 테이블 스키마 사용을 참조하십시오. 서버 데이터베이스에서 스키마를 변경하는 경우에는 먼저 클라이언트로 해당 변경 내용을 전파해야 하는지를 결정해야 합니다. 예를 들어 서버 데이터베이스의 테이블에 신용 카드 열을 추가하려는 경우에 직원이 오프라인으로는 신용 카드 정보를 받지 못하도록 하는 비즈니스 규칙이 있으면 클라이언트로 스키마 변경 내용을 전파할 필요가 없습니다. 스키마 변경 내용을 전파하려는 경우 전파 방법은 변경 내용의 유형에 따라 달라집니다.
일반 스키마 변경 내용
가장 일반적인 두 가지 스키마 변경 내용은 기존 테이블에 열을 추가하고 새 테이블을 추가하는 것이나, 원래는 응용 프로그램의 일부분이 아니었던 기존 테이블을 포함하는 것입니다. 응용 프로그램에서 새 테이블을 동기화해야 하는 경우에는 해당 테이블에 대해 SyncAdapter를 추가해야 합니다. 서버 구성 요소를 업데이트하고 나면 클라이언트 응용 프로그램 또는 응용 프로그램의 사용자가 새 테이블을 동기화할지 여부를 결정할 수 있습니다. 새 테이블을 동기화하려는 경우에는 새 테이블에 대해 SyncTable을 포함하도록 클라이언트 구성 요소를 변경해야 합니다. 이러한 변경 내용은 각 클라이언트 응용 프로그램으로 푸시해야 합니다. ClickOnce 기술을 사용하면 응용 프로그램 업데이트를 게시할 수 있으며, 그러면 응용 프로그램이 시작 전에 업데이트를 확인할 수 있습니다 테이블에 새 열을 추가하고 해당 열을 동기화하려는 경우에는 열을 클라이언트 데이터베이스에 추가한 다음 변경 내용을 동기화하는 데 사용되는 명령을 업데이트해야 합니다. 새 열 추가를 제외한 스키마 변경 내용의 경우에는 클라이언트에서 테이블을 삭제한 후에 Sync Framework 또는 다른 메커니즘을 사용하여 다시 만듭니다.
여러 버전 함께 설치
클라이언트 응용 프로그램의 새 버전과 이전 버전을 함께 설치해야 하는 경우가 있습니다. 이러한 경우에는 다음과 같이 서로 다른 두 가지 방법을 사용할 수 있습니다.
이전 버전의 클라이언트 구성 요소가 적절한 버전의 서버 구성 요소에 계속 액세스할 수 있도록 여러 서버 구성 요소 버전을 유지합니다. 버전 관리를 위한 가장 좋은 방법은 업데이트된 기능이 포함된 새로운 서비스를 노출하는 것입니다. ClickOnce 기술을 사용하여 클라이언트를 업그레이드할 수 있습니다. 업그레이드가 완료되면 클라이언트가 새로운 웹 서비스로 리디렉션됩니다.
응용 프로그램 버전 매개 변수를 사용하도록 클라이언트 및 서버 구성 요소를 설계합니다. 이 방법을 사용하면 클라이언트 응용 프로그램이 필요한 버전을 서버에 알릴 수 있습니다. 다음 예제에서는 서버에서 삽입 내용을 선택하는 저장 프로시저가
@appversion매개 변수를 수락합니다. 매개 변수는 SelectIncrementalInsertsCommand에 추가되며 SyncAgent에서 SyncParameter를 사용하여 값이 제공됩니다. 동기화가 수행되면 응용 프로그램 버전이 서버로 보내지며 저장 프로시저가 테이블 스키마의 올바른 버전을 선택합니다.this.Configuration.SyncParameters.Add( new SyncParameter("@appversion", 1)); customerIncrUpdates.Parameters.Add("@appversion", SqlDbType.Int); Me.Configuration.SyncParameters.Add( _ New SyncParameter("@appversion", 1)) customerIncrUpdates.Parameters.Add("@appversion", SqlDbType.Int); CREATE PROCEDURE usp_CustomerSelectIncrementalInserts( @sync_last_received_anchor timestamp, @sync_new_received_anchor timestamp, @appversion int ) AS IF @appversion = 1 BEGIN SELECT CustomerId, CustomerName, SalesPerson FROM Sales.Customer WHERE InsertTimestamp > @sync_last_received_anchor AND InsertTimestamp <= @sync_new_received_anchor END ELSE IF @appversion = 2 BEGIN SELECT CustomerId, CustomerName, SalesPerson, CustomerType FROM Sales.Customer WHERE InsertTimestamp > @sync_last_received_anchor AND InsertTimestamp <= @sync_new_received_anchor END ELSE BEGIN PRINT('Unrecognized version') RETURN END