ClickOnce 응용 프로그램의 로컬 및 원격 데이터 액세스
대부분의 응용 프로그램에서 데이터를 사용하거나 생성합니다.ClickOnce는 로컬 및 원격으로 데이터를 읽고 쓰는 다양한 옵션을 제공합니다.
로컬 데이터
ClickOnce에서 다음 방법 중 하나를 사용하여 로컬로 데이터를 로드 및 저장할 수 있습니다.
ClickOnce데이터 디렉터리
격리된 저장소
기타 로컬 파일
ClickOnce 데이터 디렉터리
로컬 컴퓨터에 설치된 모든 ClickOnce 응용 프로그램에는 사용자의 Documents and Settings 폴더에 저장된 데이터 디렉터리가 있습니다.ClickOnce 응용 프로그램에 포함되고 "데이터" 파일로 표시된 모든 파일은 응용 프로그램을 설치할 때 이 디렉터리에 복사됩니다.데이터 파일의 형식에는 제한이 없으며, 텍스트, XML을 비롯하여 Microsoft Access .mdb 파일 같은 데이터베이스 파일이 가장 자주 사용됩니다.
데이터 디렉터리는 응용 프로그램에서 명시적으로 저장하고 관리하는 데이터인 응용 프로그램 관리 데이터를 위한 것입니다.응용 프로그램 매니페스트에서 "데이터"로 표시되지 않은 정적인 비종속성 파일은 모두 응용 프로그램 디렉터리에 대신 배치됩니다.이 디렉터리는 응용 프로그램의 실행 파일(.exe)과 어셈블리가 있는 디렉터리입니다.
[!참고]
ClickOnce 응용 프로그램을 제거하면 데이터 디렉터리도 함께 제거됩니다.문서 같이 최종 사용자가 관리하는 데이터를 저장하는 데는 데이터 디렉터리를 사용하지 말아야 합니다.
ClickOnce 배포에서 데이터 파일 표시
데이터 디렉터리 안에 기존 파일을 배치하려면 ClickOnce 응용 프로그램의 응용 프로그램 매니페스트 파일에서 기존 파일을 데이터 파일로 표시해야 합니다.자세한 내용은 방법: ClickOnce 응용 프로그램에 데이터 파일 포함을 참조하십시오.
데이터 디렉터리 읽기 및 쓰기
데이터 디렉터리에서 읽으려면 ClickOnce 응용 프로그램에서 읽기 권한을 요청해야 합니다. 마찬가지로, 이 디렉터리에 쓰려면 쓰기 권한이 필요합니다.완전 신뢰 수준으로 실행하도록 구성된 응용 프로그램에는 이 권한이 자동으로 부여됩니다.권한 올리기나 신뢰할 수 있는 응용 프로그램 배포를 사용하여 응용 프로그램에 부여되는 권한을 높이는 방법에 대한 자세한 내용은 ClickOnce 응용 프로그램 보안을 참조하십시오.
[!참고]
사용자의 조직에서 신뢰할 수 있는 응용 프로그램 배포를 사용하지 않고 권한 올리기를 비활성화한 경우 권한을 요청하는 데 실패합니다.
응용 프로그램에 이러한 권한이 있으면 System.IO 내의 클래스에 대한 메서드 호출을 사용하여 데이터 디렉터리에 액세스할 수 있습니다.ApplicationDeployment의 CurrentDeployment 속성에 정의된 DataDirectory 속성을 사용하여 Windows Forms ClickOnce 응용 프로그램 내의 데이터 디렉터리에 대한 경로를 가져올 수 있습니다.이 방법은 데이터에 액세스하는 데 가장 편리하며 권장되는 방법입니다.다음 코드 예제에서는 배포에 데이터 파일로 포함한 CSV.txt라는 텍스트 파일에 대해 이와 같은 작업을 수행하는 방법을 보여 줍니다.
If (ApplicationDeployment.IsNetworkDeployed) Then
Dim SR As StreamReader = Nothing
Try
SR = New StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory & "\CSV.txt")
MessageBox.Show(SR.ReadToEnd())
Catch Ex As Exception
MessageBox.Show("Could not read file.")
Finally
SR.Close()
End Try
End If
if (ApplicationDeployment.IsNetworkDeployed)
{
try
{
using (StreamReader sr = new StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory + @"\CSV.txt"))
{
MessageBox.Show(sr.ReadToEnd());
}
}
catch (Exception ex)
{
MessageBox.Show("Could not read file. Error message: " + ex.Message);
}
}
배포에 포함된 파일을 데이터 파일로 표시하는 방법에 자세한 내용은 방법: ClickOnce 응용 프로그램에 데이터 파일 포함을 참조하십시오.
Application 클래스에서 LocalUserAppDataPath 같은 관련 변수를 사용하여 데이터 디렉터리 경로를 얻을 수도 있습니다.
다른 형식의 파일을 조작하려면 추가 권한이 필요할 수도 있습니다.예를 들어, Access 데이터베이스 파일(.mdb)을 사용하려는 경우 응용 프로그램에서는 관련 System.Data 클래스를 사용할 수 있도록 완전 신뢰를 부여받아야 합니다.
데이터 디렉터리 및 응용 프로그램 버전
각 응용 프로그램 버전마다 다른 버전과는 분리된 고유의 데이터 디렉터리가 있습니다.배포에 데이터 파일이 포함되어 있는지에 관계없이 ClickOnce는 이 디렉터리를 만들어서 응용 프로그램이 런타임에 새 데이터 파일을 만들 위치를 마련합니다.새 버전의 응용 프로그램을 설치하면 ClickOnce에서는 기존의 모든 데이터 파일을 이전 버전의 데이터 디렉터리에서 새 버전의 데이터 디렉터리로 복사합니다. 이러한 복사 작업은 해당 데이터가 원래 배포에 포함되어 있던 것인지 응용 프로그램에서 만든 것인지 여부와 상관없이 진행됩니다.
이전 버전의 응용 프로그램에 있는 데이터 파일의 해시 값이 새 버전의 값과 다른 경우 ClickOnce에서는 이전 버전의 파일을 서버에 있는 새 버전의 파일로 바꿉니다.또한 이전 버전의 응용 프로그램에서 새 버전의 배포에 포함된 파일과 동일한 이름을 가진 새 파일을 만든 경우 ClickOnce에서는 이전 버전의 파일을 새 파일로 덮어씁니다.두 경우 모두 이전 버전의 파일은 .pre라는 데이터 디렉터리 내의 하위 디렉터리에 포함되므로 응용 프로그램에서 마이그레이션용으로 이전 데이터에 계속 액세스할 수 있습니다.
데이터 마이그레이션을 보다 정밀하게 제어해야 하는 경우 ClickOnce 배포 API를 사용하면 이전 데이터 디렉터리에서 새 데이터 디렉터리로 사용자 지정 마이그레이션을 수행할 수 있습니다.IsFirstRun을 사용하여 사용 가능한 다운로드를 테스트하고, Update 또는 UpdateAsync를 사용하여 업데이트를 다운로드한 다음 업데이트가 완료된 후 사용자 지정 데이터 마이그레이션 작업을 수행해야 합니다.
격리된 저장소
격리된 저장소는 간단한 API를 사용하여 파일을 만들고 액세스하기 위한 API를 제공합니다.저장된 파일의 실제 위치는 개발자와 사용자 모두에게 숨겨져 있습니다.
격리된 저장소는 모든 버전의 .NET Framework에서 사용합니다.또한 추가 권한을 부여하지 않고도 부분적으로 신뢰할 수 있는 응용 프로그램에 사용할 수 있습니다.응용 프로그램을 부분 신뢰 수준에서 실행해야 하지만 응용 프로그램별 데이터를 유지할 필요가 있는 경우에는 격리된 저장소를 사용해야 합니다.
자세한 내용은 격리된 저장소를 참조하십시오.
기타 로컬 파일
응용 프로그램에서 보고서, 이미지, 음악 등의 최종 사용자 데이터를 작동하거나 저장해야 하는 경우 로컬 파일 시스템에서 데이터를 읽고 쓰기 위한 FileIOPermission이 응용 프로그램에 필요합니다.
원격 데이터
경우에 따라서는 응용 프로그램에서 고객 데이터나 시장 정보 같은 정보를 원격 웹 사이트를 통해 검색해야 할 수도 있습니다.이 단원에서는 원격 데이터를 검색하는 가장 일반적인 기술에 대해 설명합니다.
HTTP를 사용한 파일 액세스
System.Net 네임스페이스의 WebClient 또는 HttpWebRequest 클래스를 사용하여 웹 서버의 데이터에 액세스할 수 있습니다.데이터는 원시 텍스트 또는 XML 데이터를 반환하는 ASP.NET 응용 프로그램이거나 정적 파일일 수 있습니다.데이터가 XML 형식인 경우 이 데이터를 검색하는 가장 빠른 방법은 XmlDocument 클래스를 사용하는 것입니다. 이 클래스의 Load 메서드에서는 URL을 인수로 사용합니다.예제를 보려면 Reading an XML Document into the DOM를 참조하십시오.
응용 프로그램이 HTTP를 통해 원격 데이터에 액세스하는 경우 보안을 고려해야 합니다.기본적으로 네트워크 리소스에 대한 ClickOnce 응용 프로그램의 액세스는 응용 프로그램을 배포한 방식에 따라 제한될 수 있습니다.이 제한은 악의적인 프로그램에서 권한이 설정된 원격 데이터에 액세스하거나, 사용자의 컴퓨터를 사용하여 네트워크의 다른 컴퓨터를 공격하지 못하도록 하기 위한 것입니다.
다음 표에는 사용 가능한 배포 전략과 각 전략에 따른 기본 웹 권한이 나와 있습니다.
배포 형식 |
기본 네트워크 권한 |
---|---|
웹 설치 |
응용 프로그램을 설치하는 데 사용된 웹 서버에만 액세스할 수 있습니다. |
파일 공유 위치 설치 |
어떠한 웹 서버에도 액세스할 수 없습니다. |
CD-ROM 설치 |
모든 웹 서버에 액세스할 수 있습니다. |
보안 제한으로 인해 ClickOnce 응용 프로그램에서 웹 서버에 액세스할 수 없는 경우 해당 웹 사이트에 대한 WebPermission을 어설션해야 합니다.ClickOnce 응용 프로그램에 대한 보안 권한을 늘리는 방법에 대한 자세한 내용은 ClickOnce 응용 프로그램 보안을 참조하십시오.
XML Web services를 통한 데이터 액세스
데이터를 XML Web service로 노출하는 경우 XML Web service 프록시를 사용하여 데이터에 액세스할 수 있습니다.프록시는 Visual Studio를 사용하여 만드는 .NET Framework 클래스입니다.고객 검색, 주문 접수 등과 같은 XML Web services에 대한 작업은 프록시에 대한 메서드로 노출됩니다.이렇게 하면 웹 서비스를 원시 텍스트나 XML 파일보다 훨씬 쉽게 사용할 수 있습니다.
XML Web service가 HTTP를 통해 실행되는 경우 서비스에 WebClient 및 HttpWebRequest 클래스와 동일한 보안 제한 사항이 적용됩니다.
Visual Studio를 사용하여 이 작업을 수행할 수도 있습니다.자세한 내용은 다음을 참조하십시오 방법: 웹 참조 추가 및 제거 및 방법: 웹 참조 추가 및 제거 및 방법: 웹 참조 추가 및 제거 및 방법: 웹 참조 추가 및 제거.
데이터베이스에 직접 액세스
System.Data 네임스페이스의 클래스를 사용하여 네트워크에서 SQL Server 같은 데이터베이스 서버에 직접 연결할 수 있지만 이 경우 보안 문제를 고려해야 합니다.HTTP 요청과 달리 데이터베이스 연결 요청은 부분 신뢰의 경우 기본적으로 항상 거부됩니다. 이러한 권한은 CD-ROM을 통해 ClickOnce 응용 프로그램을 설치하는 경우에만 기본적으로 부여됩니다.그러면 응용 프로그램에 완전 신뢰가 부여됩니다.특정 SQL Server 데이터베이스에 액세스하려면 응용 프로그램에서 이 데이터베이스에 대한 SqlClientPermission을 요청해야 합니다. SQL Server 이외의 데이터베이스에 액세스하려면 OleDbPermission을 요청해야 합니다.
대부분의 경우 데이터베이스에 직접 액세스할 필요는 없으며, ASP.NET 또는 XML Web service로 작성된 웹 서버 응용 프로그램을 통해 데이터베이스에 액세스할 수 있습니다.ClickOnce 응용 프로그램이 웹 서버에서 배포되는 경우에는 이 방법으로 데이터베이스에 액세스하는 것이 가장 좋습니다.응용 프로그램의 권한을 높이지 않고도 부분 신뢰 상태의 서버에 액세스할 수 있습니다.