IT 살이 썸네일형 리스트형 ClickOnce and FireFox 글을 읽다 보면 ClickOnce 어플리케이션이 어떻게 클라이언트 PC로 내려와서 활성화되는지를 잘 알 수 있다. http://blogs.msdn.com/saurabh/archive/2006/03/02/541988.aspx 더보기 [연재 06] 레거시 프로그램과의 호환성 지원 Vista는 보안을 위해서 새로운 보안 모델을 내놨고 따라서 이전 Windows에서는 관리자 계정으로 로그온만 하면 잘 실행되던 프로그램이 이제는 관리자로 로그온하더라도 권한 부족으로 실행에 실패할 상황에 처하게 되었다. 따라서 Vista는 실행 권한이라는 측면에서 이전 프로그램과의 호환성을 해결할 필요가 있게 되었다. 앞 포스트에서는 개발자가 UAC의 토큰 판단에 영향을 미칠 수 있는 방법에 대해서 알아봤다. 개발자에게는 그것이 중요한 내용이라 본다. 이제 이 포스트에서는 UAC가 권한 상승을 스스로 판단하는 기능 그리고 어떻게 레거시 프로그램들과의 호환성을 지원하고 있는지에 대해서 알아보겠다. 여기서 다룰 것은 다음 3가지를 포함한다. ▶Vista의 인스톨러를 자동 인식하는 기능 ▶PCA(Progra.. 더보기 [연재 05] Vista가 자동으로 관리자 토큰을 사용하도록 하는 방법 프로그램이 실행되는 도중에 권한 부족으로 프로그램이 중단되었다는 메세지는 신뢰도에 치명적이지 않을 수 없을 것이다. 그렇다면 프로그램이 시작되기 전에 관리자 권한이 필요하다는 것을 어떻게 UAC에게 알릴 것인가에 대한 것이 달봉이가 이전 포스트에서부터 기록하고 싶은 주제중의 하나이다. 그렇다고 동의 확인 창 또는 관리자 계정 요청 창이 뜨게 하지 않을 수는 없다. 관리자 권한이 필요하다면 사용자로부터의 확인을 요하는 창은 뜨게 되어 있다. 결국 개발자는 어떻게 하면 이 확인창을 뜨게 할 것인가를 고민해야 하는 것이 이 포스트들의 주요 내용이라고 할 수 있다. 앞 포스트에서는 사용자가 직접 Vista(UAC)에게 관리자 토큰을 사용하도록 하는 하는 방법에 대해서 알아봤다. 이번 포스트에서는 프로그램을 실행.. 더보기 [연재 04] 관리자 토큰을 사용하도록 사용자가 직접 Vista에 일러주는 방법 Administrator Approval Mode의 관리자는 로그온을 하게 되면 일반 사용자 계정의 토큰을 사용하게 된다는 것은 이제 이해했다. UAC의 사정이 이러하므로 관리자 권한이 필요한 어플리케이션을 시작할때는 반드시 Windows에 관리자 토큰을 사용하도록 말해 줄 필요가 있다. 그렇지 않으면 Windows는 아무 생각없이 일반 사용자 토큰으로 프로그램을 시작할 것이고 그러다가 관리자 권한이 필요한 부분에서는 권한 부족으로 프로그램이 작동하지 않게 될 것이다. 이 포스트에서는 Windows에 관리자 토큰을 사용하도록 일러주는 방법으로서 사용자가 직접 조치를 취하는 방법을 알아본다. 그리고 다음 포스트에서는 사용자가 직접 일러주지 않더라도 Windows가 자동으로 인식해서 관리자 토큰을 사용할 수.. 더보기 [연재 03] Deeper into the UAC 앞의 포스트를 요약해보면 다음과 같다. "관리자 권한이 필요한 프로그램이 권한 관련해서 에러없이 실행되도록 하려면, 1) 사용자가 관리자 계정으로 프로그램을 실행시키든지 2) 프로그램 자체가 관리자 계정으로 실행되어야 한다는 것을 Windows에게 알려줄 수 있어야 한다. 여기까지는 나름대로 깔끔한 정리이다. 그러나 구체적으로, 언제 UAC에게 언제 어떻게 관리자 토큰을 사용하라고 일러줄 수 있는지에 대한 질문들이 남아있다. 그 질문에 대한 답을 바로 들어가기 전에 이 포스트에서는 토큰(token)의 구조를 좀 더 깊게 알아보자. 어떻게 보면 프로그래밍과는 직접적인 관계는 없으나 보안과 관련된 지식으로써 알아두면 나중에라도 도움이 될 것이다. 토큰(Token)의 구조 토큰은 사용자가 로그온을 하게 되면 .. 더보기 [연재 02] 분리된 토큰 모델(Split token) 달봉이는 Wndows의 보안에 대해서는 잘 모른다. 그러나 UAC를 이해하기 위해서는 기본적인 내용은 알고 있어야 할 것 같아서 이전 Windows의 보안에 대해서 간단히 정리하고 Vista의 UAC 얘기를 계속하겠다. ■ 이전 Windows의 Security Basics 이전 Windows의 보안 모델을 간단히 풀이하면 다음과 같은 그림으로 정리될 수 있을 것 같다(그림이 잘 되었는지는 누구의 검증도 안받았다 -_-;;) [그림] Windows Security Basics 사용자가 로그온을 하면 "토큰(token)"이라는 것이 메모리에 생성된다(1). 토큰에는 사용자가 누구이며 어떤 권한을 갖는가를 정의하는 데이터 구조이며 유일한 값을 갖는다. 사용자가 로그온 후 "diary.doc"라는 워드 문서를 .. 더보기 [연재 01] An Overview Of UAC UAC는 다시 한번 더 체계적으로 정리할 필요가 있을 것 같다. 뭐든지 튼튼한 기본이 중요한 법인데, UAC는 프로그래밍시 기본적으로 이해하고 있어야 하는 새로운 컨셉일 것이라는 생각에서이다. 해서 체험기부터 해서 다시 나름대로 신경써서 함 정리해보려 한다. UAC라는 것은 머신을 제외한 모든 사람들은 싫어할 것 같은 특징중의 하나인 것 같다. 사용자도 그렇고 개발자도 그렇고 그리고 관리자도 그렇게 좋아할 것 같지는 않다. 처음에 달봉이도 상당히 당혹스러웠다. 그러나 한편으로는 개발자로서의 호기심이 발동하기도 했다. 이번 연재에서는 체험기에서부터 다시 시작해서 나름대로 UAC에 대한 필요성을 알아보고 그리고 구체적으로 개발시 어떻게 해결해야 하는지를 알아보겠다. ■ UAC 시작하기 Vista를 설치하는 .. 더보기 null, Finalize 메소드, Dispose 메소드, Dispose 패턴 메모리 관리를 설명하는 부분을 보면 항상 나오는 말들인데도, 처음 개발에 들어선 개발자들에겐 돌아서면 헛갈리는 부분이다. 이 포스트에서는 이것들의 차이점을 정리해 본다. ■ null ! 이것의 의미는 분명하다. 메모리상에 존재하는 객체에 대한 모든 참조의 끈을 끊는다는 의미이다. 만약 메모리상의 객체를 참조하는 변수가 모두 null로 되면 메모리상의 객체는 가비지 컬렉트 (Garbage Collect)후보가 된다. 이때 가비지 컬렉팅이 일어나면 해제된다. null의 원래 의미는 이렇지만, .NET 프레임워크에서는 디버깅모드와 릴리스 모드( + 최적화모드)에 따라서 다르게 해석할 수 있다. 다음 코드를 보자. [STAThread] static void Main() { Timer t = new Timer().. 더보기 MAGE를 이용한 ClickOnce 어플리케이션 게시 MAGE(Manifest Generating and Editing tool)를 이용한 게시 ClickOnce 어플리케이션을 게시할때 흔히 Visual Studio 2005를 사용한다. 그러나 이것의 단점이 있다. 어플리케이션 업데이트 버전을 Visual Studio로 게시하면 변경된 파일만 다운받는 것이 아니라 전체를 다운받게 된다. 이것은 ClickOnce가 지원을 못하는 것이 아니라 Visual studio가 게시를 하기 전에 빌드를 하게 되는데 이로 인해 모든 파일이 변경된 것으로 되어 버리기때문이다. 그리고 서버 작업을 하는 관리자에게는 Visual Studio가 적절한 툴은 아닐 수도 있다는 것이다. 서버에 Visual Studio를 설치해야 하는 것부터 부담이 될 수 있고 그리고 실행 프로젝트.. 더보기 HTTP1.1 압축 이해하기 ■ 웹 어플리케이션 압축에 사용 ASP.NET2.0 어플리케이션을 개발할때 대용량 데이터에 대한 압축이 필요가 경우가 있다. 다음 링크는 이런 경우 참조할 수 있는 페이지이다. Compression Support in ASP.NET2.0 (http://www.microsoft.com/belux/msdn/nl/community/columns/desmet/compression.mspx#Implementing%20a%20compression%20HttpModule) 압축은 IIS 웹 서버 설정을 통해서도 가능하지만 이렇게 하면 가상 디렉토리별로 압축 설정을 할 수 없다. IIS설정을 이용하면 해당 IIS에 설치된 전체 어플리케이션에 대해서 압축이 수행된다는 것이 단점이다. 디렉토리별로 압축이 가능하게 하려면 .. 더보기 AppDomainManager, Hosting Process..... 오늘은 특별한 팁이나 해결책을 적으려는 것은 아니다. 다만 현재 진행하고 있는 프로젝트에서 논의되었던 얘기에 대해서 고민한 내용을 정리해 보려고 한다. ■상황 현재 달봉이가 참여하고 있는 L기업의 프로젝트는 일반 SI 프로젝트이기는 하지만 좋다는 솔루션은 다 투입된 것 같다. 그래서 그것을 통합하고 테스트하는데 상당한 시간이 투입되고 있다. 업무 ERP 시스템은 스마트클라이언트로 개발하고 있는데, 달봉이가 하는 주요 역할은 스마트클라이언트 어플리케이션 프레임웤과 그리고 어플리케이션 배포다. 스마트클라이언트의 Shell 형태는 윈도우 폼 실행 프로그램이고 배포 방식은 ClickOnce를 사용하고 있다. 어플리케이션이 클라이언트에 설치되는 모드는 "인스톨 모드" 즉 어플리케이션 실행이 온라인으로도 가능하고 .. 더보기 ClickOnce에서 필수 구성 요소별로 지원 URL 지정하기 오늘 메모를 정리하다가 그냥 버리기가 아까운 정보가 있어 아직 테스트 해 보지는 않았지만 기록을 하나 남겨두려고 한다. ClickOnce 어플리케이션이 실행되기 전에 필요한 필수 프로그램이 사전에 설치되어 있어야 한다면 우리는 당연히 부트스트래퍼를 떠올릴 것이다(아닌가...-_-;;). ClickOnce 어플리케이션이 실행되다가 반드시 있어야 하는 구성요소가 사전에 설치되어 있지 않다면 에러창을 보여준다. 에러창에서 문제 해결을 위한 좀 더 구체적인 내용을 담고 있는 페이지에 대한 URL을 보여줄 수 있다는것이다. 예를 들어 사전에 GAC에 등록되어 있어야 하는 어셈블리가 있다면 그것을 설치할 수있는 MSI 파일에 대한 링크를 그 지원 페이지에 포함시킬 수도 있을 것이다. 사용자는 링크의 페이지의 설치 .. 더보기 Loose XAML, XBAP, Silverlight Can XAML be used instead of HTML? In recent months I have become somewhat of a XAML junkie. But also working with web applications, I like many would love to be able to use XAML instead of HTML. Is it possible? Not yet.... HTML History I have been on the Internet long before the web existed. My first Internet access was around 1988 and from about 1991 on I had Internet from my home computer. Thi.. 더보기 .NET 어플리케이션의 호환성 .NET 프레임워크의 버전이 계속 올라가면서, 프로젝트를 진행하다 보면 프레임워크 버전간의 호환성 문제가 이슈가 되는 경우가 있습니다. 지금 참여하고 있는 프로젝트에서도 프레임워크 버전 문제가 잠깐 제기된 적이 있었습니다. ■ 상황 기존의 한 시스템이 .NET 1.1된 윈폼 어플리케이션이 있었습니다. 그리고 새로 만들게 될 시스템은 .NET2.0으로 만들 다른 윈폼 어플리케이션입니다. 문제는 .NET1.1 어플리케이션에서 .NET2.0의 어셈블리로 된 화면을 로딩시킬 수 있는가입니다. 얼른 생각해봐도 v1.1 어플리케이션에서 다이렉트로 v2.0 어셈블리를 로딩하는 것은 안될 것으로 추측했습니다. 그러나 다음 경우처럼 웹 페이지를 통해서 호출하면 어떨까하는 의문이 들었습니다. 그림처럼 호출하는 1.1 어플.. 더보기 ClickOnce 어플리케이션의 파일 관리(Ⅳ) - 데이터 파일(ii) 1.1.4 XML 파일 데이터 병합하기 먼저 간단히 XML 파일이 “데이터 파일”로 배포된 경우의 데이터 병합에 대해서 생각해보겠습니다. 현재 클라이언트에는 1.0 버전의 authors.xml 파일이 내려가 있습니다. 사용자들은 각자 authors.xml 파일에 필요한 편집 작업을 한 후 저장해 두고 있습니다. 다음 그림을 보면 최종 사용자가 버전 1.0의 어플리케이션에서 authors.xml에 레코드를 하나 추가하고 있습니다. 이제 프로그램의 버그로 인해 버전 2.0의 어플리케이션으로 업데이트하려고 합니다. 그런데 버전 2.0의 authors.xml 파일의 내용에도 1.0 배포할때보다 레코드가 하나더 추가되어 배포됩니다. 업데이트를 수행하게 되면 서버측에서 변경된 authors.xml 파일이 클라이언트.. 더보기 ClickOnce 어플리케이션의 파일 관리(Ⅲ) - 데이터 파일(i) 1.1 데이터 파일 관리 앞에서는 어플리케이션을 구성하는 파일중에서 데이터 파일을 제외한 일반 구성 파일들의 배포와 관리에 대해서 알아봤습니다. 이제부터는 “게시 상태”를 “데이터 파일”로 설정한 파일들의 배포와 관리에 대해서 알아봅니다. ClickOnce 어플리케이션을 작성하다 보면 XML 파일 또는 MS 액세스 DB 파일(.mdb)같은 파일을 각 클라이언트로 배포할 필요도 생기게 됩니다. ClickOnce 어플리케이션이 클라이언트 머신에 설치되면 각 버전마다의 데이터 디렉토리(Data Directory)도 사용자 프로파일 디렉토리 하위에 함께 생성됩니다. 어플리케이션 구성 파일 속성 편집창에서 “데이터 파일”로 설정된 파일은 어플리케이션을 설치할 때 모두 데이터 디렉토리로 복사합니다. SQL Expr.. 더보기 ClickOnce 어플리케이션의 파일 관리(Ⅱ) 1.1 어플리케이션 파일 관리 ClickOnce 어플리케이션은 앞에서 말한대로 여러 종류의 파일들로 구성되어 있습니다 : 실행파일, 설정 파일, 리소스 파일, 데이터 파일, 참조 어셈블리 파일등. 먼저 어플리케이션을 구성하는 참조 어셈블리들외에 일반 파일들을 어떻게 배포에 포함시키는지를 알아봅니다. 그리고 어플리케이션의 코드상에서 직접 파일들을 그룹별로 다운로드해서 사용하는 방법 등을 알아봅니다. 1.1.1 ClickOnce 배포에 파일 포함시키기 ClickOnce로 배포되기 위해서는 해당 파일을 일단 배포 대상에 포함시켜야 할 것입니다. 그런 후에그 파일을 데이터 파일로 설정할 것인지 아니면 일반 어플리케이션 구성 파일로 설정할 것인지가 결정될 것입니다. 어플리케이션을 작성하다보면 참조되는 어셈블리 파.. 더보기 ClickOnce 어플리케이션의 파일 관리(Ⅰ) ClickOnce 어플리케이션은 여러 종류의 파일로 구성됩니다. 이 연재에서는 ClickOnce가 이런 파일을 관리하기 위해서 어떤 서비스를 제공하는지 그리고 프로그램적으로 어떻게 관리할 수 있는지 등에 대해서 알아봅니다. 보통 ClickOnce 어플리케이션은 다음과 같은 파일로 구성됩니다. - 어플리케이션 어셈블리 파일과 데이터 파일들 - 어플리케이션 매니페스트 파일( .exe.manifest) : 구성 파일과 필요한 권한 정보 포함 - 배포 매니페스트(.application) : 업데이트 정책, 업데이트 위치 포함 그리고 앞의 파일들을 서명하기 위해서 필요한 인증서가 있지만 인증서는 어플리케이션에서 관리할 수 있는 파일이 아니기에 파일 관리 대상에서는 제외됩니다. ClickOnce에 포함될 수 있는 .. 더보기 .NET Remoting 확장하기 .NET 커뮤니케이션 기술을 확장(Extension)하는 방법에 대해서 들어본 적이 있을 것입니다. 이런 확장하는 기술을 이용하면 공통되는 기능을 여러 개발자가 반복적으로 구현하지 않아도 됩니다. 또한 기존의 운용되고 있는 어플리케이션을 수정하지 않고도 그 서비스나 기능을 추가할 수도 있게 됩니다. 예를 들어 로깅, 압축, 암/복호화 같은 모듈을 작성하는데 이런 확장 기술을 이용할 수 있습니다. 이런 확장 기술은 새로운 기술은 아닙니다. .NET 프레임워크가 나오면서 이미 지원되었던 기술입니다. ASP.NET에서는 HTTP 핸들러(HttpHandler) 또는 HTTP 모듈(HttpModule)을 이용해서 확장하는 방법을 아는 사람은 이미 알고 있을 것입니다. 그리고 ASP.NET 웹 서비스에서는 Soap.. 더보기 이벤트 핸들러에 의한 메모리 증가 혹시 우리가 아무 걱정없이 사용해왔던 이벤트 핸들러가 어플리케이션의 메모리 증가의 원인이 될 수 있다는 것을 아시나요. 다음 블로그 포스트(http://blogs.msdn.com/tess/archive/2006/01/23/516139.aspx )를 보면 자세한 실험 내용이 나와 있습니다. 이 블로그에서 실험했던 내용을 간단히 정리해보도록 하겠습니다. 여기 우리가 흔히 대수롭지 않게 생각했던 코드가 있습니다. public class WebForm1 : System.Web.UI.Page { public static MyClassThatHasEvents MyStaticObject = new MyClassThatHasEvents(); private void InitializeComponent() { this.L.. 더보기 이전 1 ··· 11 12 13 14 15 16 다음