본문 바로가기

전체 글

[연재 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.. 더보기
.NET Framework의 심볼 파일(.pdb)들이 공개되었습니다. Visual Studio 2008을 통해서 .NET Framework( v3.5 )의 일부 라이브러리들의 소스 코드를 볼 수 있다는 소식이 발표되었습니다. .NET Framework Library Source Code now available http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx VS 2008을 이용해서 .NET Framework 디버깅하기 위한 자세한 설정 내용은 다음 포스트를 참조할 수 있습니다. Configuring Visual Studio to Debug .NET Framework Source Code http://blogs.msdn.com/sburke.. 더보기
WCF세미나 - MSDN 주간 세미나 (11월 28일)-유경상 수석 유경상 수석의 WCF MSDN 세미나 동영상이 포스팅되었습니다. 유경상 수석 특유의 치밀하고 합리적인 설명이 돋보이는 세미나입니다. http://www.simpleisbest.net/archive/2007/12/03/1978.aspx 더보기
ClickOnce 인증서 만료 문제 ■ 이미 배포한 애플리케이션의 경우 .NETv2.0기반의 ClickOnce 애플리케이션에서는 인증서가 만료된 경우 만료 기간을 연장하여 업데이트를 할 수 없습니다. 만료 기간을 연장하면 전혀 새로운 인증서가 되어 버립니다. 따라서 인증서가 만료되면 기존의 ClickOnce 애플리케이션을 프로그램추가/제거에서 삭제하고 다시 설치해야 합니다. 구글링을 해보면 이를 해결하기 위한 노력이 있습니다. 그중에서 다음 링크는 그동안 봐 왔던 해결책중에서 개인적으로 제일 맘에 듭니다. ClickOnce and Expiring Code Signing Certificates http://www.jamesharte.com/blog/?p=11 모든 사용자들이 프로그램 추가/제거에서 애플리케이션을 삭제하고 다시 설치하는 작업이.. 더보기
트랜잭션 NTFS TxF( 트랜잭션 NTFS ) = 트랜잭션 + NTFS 파일 시스템을 트랜잭션 바운더리에 포함시킬 수 있게 되었다는 소식은 풍문으로 들어 알고 있었습니다. MSDN 매거진을 읽다가 이에 대한 구체적인 문서가 있어서 메모해 둡니다. 파일 시스템 트랜잭션으로 응용 프로그램 향상 http://msdn.microsoft.com/msdnmag/issues/07/07/NTFS/default.aspx?loc=ko 더보기