본문 바로가기

IT 살이/04. 기술 - 프로그래밍

[연재 03] 원격 데이터 읽기


때로는 원격에 있는 데이터 파일을 읽어야 하는 경우가 있다. 예를 들어 동적으로 생성되는 데이터를 미리 웹 서버에 캐싱해두고 클라이언트 머신에서 읽어 오려는 경우가 있을 것이다. 달봉이가 지금 참여하고 있는 프로젝트에서는, 클라이언트에서 시스템이 구동될 때 항상 데이터베이스에서 메뉴를 조회해와서 출력해주는 구조로 되어 있다. 그러나 시스템의 운영시에는 메뉴의 수가 너무 과도해져서 시스템의 구동 시간이 길어질 것으로 예상되고 있다. 해서 메뉴가 변경될때마다 XML형태로 해서 웹 서버에 저장해놓고 클라이언트의 시스템이 구동될 때 그 파일을 바로 읽어 오는 방식을 고려하고 있다.

이 포스트에서는 이런 경우 사용할 수 있는 .NET API를 소개한다.

HTTP 통해서 원격의 파일 접근하기


다음은 웹 서버에 있는 데이터를 접근하는데 사용할 수 있는 클래스들이다.

네임스페이스 : System.Net (http://msdn2.microsoft.com/en-us/library/system.net.aspx )

클래스 : WebClient (http://msdn2.microsoft.com/en-us/library/system.net.webclient.aspx )

      HttpWebRequest(http://msdn2.microsoft.com/en-us/library/system.net.httpwebrequest.aspx )

데이터는 정적인 파일일 수도 있고, 아니면 텍스트나 XML 데이터를 반환하는 ASP.NET 애플리케이션 페이지일 수도 있다. 다음은 정적 파일을 읽어와서 Stream으로 반환하는 샘플 코드이다.

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);

HttpWebResponse res = (HttpWebResponse)req.GetResponse();

Stream stream = res.GetResponseStream();

만약 반환되는 데이터가 XML 형식이라면 데이터를 얻는 가장 쉬운 방법은 XmlDocument(http://msdn2.microsoft.com/en-us/library/system.xml.xmldocument.aspx ) 클래스를 사용하는 방법일 것이다.

public static void ReadXmlStream(MenuSourceProvider provider, Stream stream)

{

    // XML로 부터 새로운 메뉴 트리를 로드 한다.

    XmlDocument xmlDoc = new XmlDocument();

    XmlNode xmlNode;

    xmlDoc.Load(stream);

    //지금부터 xmlDoc객체를 이용해서 작업을 하면 된다.

    // 자세한 내용은 Reading an XML Document into the DOM(http://msdn2.microsoft.com/en-us/library/azsy1tw2.aspx ) 및 관련 MSDN 문서를 참고한다.

서버 파일 접근 권한


HTTP
를 통해서 원격 웹 서버의 데이터를 접근할때는 보안을 고려해야 한다. 기본적으로 ClickOnce 애플리케이션은 그 배포 형태에 따라 네트워크 리소스에 대한 접근이 제한적이다. 다음은 배포 전략과 그에 따라 기본적인 웹 접근 권한을 나타내고 있다.

배포 형태

기본적인 네트워크 권한

웹 서버 인스톨

애플리케이션이 배포된 웹 서버에만 접근할 수 있다.

파일 공유 서버 인스톨

웹 서버를 접근할 수 없다.

CD-ROM 인스톨

어떤 웹 서버도 접근할 수 있다.

물론 Full Trust를 갖는 ClickOnce애플리케이션은 어떤 웹 서버도 접근할 수 있다.

기타 원격의 데이터를 접근하는 방법으로 웹 서비스 클라이언트를 제작하거나 또는 직접 데이터베이스 서버에 접근하는 방법도 있다. 이 방법에 대해서는 익히 잘 알고 있을 것으로 생각한다.

참조 문서

http://msdn2.microsoft.com/en-us/library/d8saf4wy.aspx

How to: Include a Data File in a ClickOnce Application

ClickOnce Deployment for Windows Forms Applications