본문 바로가기

전체 글

[메모] Tying your IE Hosted Control to a Manifest .NET Security Blog에서 있는 포스트이다. Tying your IE Hosted Control to a Manifest I talked about the Orcas feature which allows you to provide a manifest to elevate your control's permissions declaratively. We also saw how to generate manifests that would state what permissions your control needs (and the rules associated with those manifests). Now it's time to tie it all together and create an HTML pag.. 더보기
MIXSH인증용 새 페이지 KygnjE5KWHVT4TUvNje7zmd0Ck7WR0_1ijq4FxstZDc, 더보기
[메모] White Box testing tool for .NET 웹 서핑을 하다, vs 2008 용 테스트 툴을 보게 되서 메모해둔다. Getting started with Pex in Visual Studio 2008 ( http://channel9.msdn.com/posts/Peli/Getting-started-with-Pex-in-Visual-Studio-2008/ ) “Pex”로 검색을 해 보니, MS 에반젤리스트들의 IT블로그에 툴을 사용하는 법도 정리되어 있다. .NET White Box Testing 도구, PEX (Program EXploration) ( http://blogs.msdn.com/eva/archive/2009/01/28/net-white-box-testing-pex-program-exploration.aspx ) 더보기
개발 프레임워크 만들기 대장정 47 - UI단 프레임워크 추가사항 UI단 프레임워크가 거의 완성되었다. 그러나 고려해봐야 할 녀석들이 몇 가지 있다. 달봉이가 참여한 프로젝트가 빡빡한 일정때문에 힘들어지고 있다. 아마 당분간은 정리가 힘들것 같다. 생각나는 대로 메모를 해 둬야겠다. 요즘은 메모를 해 두지 않으면 금방 잊어버린다. 이러다가 영화 “메멘토” 수준으로 될 것 같은 기분이 요즘 든다. -업무 화면의 베이스 클래스 타입 -업무 화면 객체의 출력 컨트롤 -화면 객체의 라이프사이클 -서버측 서비스 환경 설정 -사용자 정보 객체의 사이트별 확장 ■업무 화면의 베이스 클래스 타입 WPF의 루트 요소를 고려해서 UserControl, Page 두 종류의 베이스 클래스가 있어야 할 것 같다. ■업무 화면 객체의 출력 컨트롤 두 종류의 업무 화면 베이스 클래스를 출력할 수.. 더보기
개발 프레임워크 만들기 대장정 46 - 서비스 호출하기 이제 클라이언트에서 달봉이가 만들어놓은 프락시 팩토리를 이용해서 서비스를 호출해보자. ■ 서비스 참조 추가하기 우선 서비스에 대한 참조를 클라이언트 프로젝트에서 추가하자. BONG.WIN.CO.UserMgmt 프로젝트의 References 노드를 오른쪽 클릭해서 “Add Service Reference…”를 선택한다. 그럼 다음과 같은 서비스 참조 추가 창이 뜬다. Address 박스에 이전 포스트에서 봤던 주소를 복사해 넣는다. 그런 다음 “Go”버튼을 클릭한다. 그럼 앞의 그림처럼 SampleService가 보이게 된다. 이제 Namespace 텍스트박스에 “SampleAsyncService”라 입력한다. 그리고 마지막으로 “Advanced…”버튼을 클릭한다. 그래서 Generate aysnchron.. 더보기
개발 프레임워크 만들기 대장정 45 - 서비스 구성하기 이번 포스트부터는 달봉이가 제작한 ServiceProxyFactory 객체를 이용해서 동기 호출과 비동기 호출에 대한 코딩 예를 보여준다. ■ IIS 서비스 환경 구성하기 우선 서버측 서비스를 구성해 보자. 달봉이는 서비스 구현 프로젝트와 서비스 노출 프로젝트를 분리했다. 서비스 구현은 BONG.SVC.CO.UserMgmt에 있고, 노출 프로젝트는 웹 애플리케이션을 이용한다. SampleService.cs에는 다음처럼 간단한 서비스가 구현되어 있다. 다음 코드는 사용자 정보를 서버측으로 전달하는 과정을 설명하는 포스트에서도 봤다. namespace BONG.SVC.CO.UserMgmt { [ServiceContract] public interface ISampleService { [OperationCon.. 더보기
개발 프레임워크 만들기 대장정 44 - WCF 확장하기 III ( 프로그레스바 자동 보여주기) ■ 프로그레스바 출력 시나리오 프로그레스바 자동 출력 기능을 위해서 달봉이는 다음과 같은 시나리오를 정의했다. 프로그레스바를 보여주는 경우를 생각해보자. 이 녀석은 서비스를 호출할때마다 보여줘야 할까? 달봉이는 아니라고 생각하고 달봉이 개발 프레임워크를 구현했다. 예를 들어 업무성 코드 목록을 가져와서 드롭다운 리스트를 채우거나 사용자에게 보여줄 메세지를 가져오는 경우라면 프로그레스바 없이 내부적으로 조용히 처리하면 될 것이다. 달봉이는, 서비스 호출 결과가 늦어질 가능성이 있는 경우에만 프로그레스바를 보여주자고 결정했다. 프로그레스바 보여주는 것과 관련해서 또 한가지 달봉이가 결정한 것은 프로그레스바를 보여줄 정도로 시간이 걸리는 작업은 비동기로 구현하겠다는 것이다. 서비스 호출하고 나서 사용자를 아무.. 더보기
개발 프레임워크 만들기 대장정 43 - WCF 확장하기 II (사용자정보 전달하기) 이제 클라이언트측 behavior를 끼워넣는 작업을 해본다. 근데 behavior라는 단어를 들으면 느낌이 파악 오는지 모르겠다. 달봉이는 이 단어를 학교다닐때 참 많이 들었다. 달봉이는 토목의 구조를 전공했다. 예를 들어 교량같은 대형 건물을 설계할 때 이 단어가 많이 나온다. 우리는 교량이 어떻게 “거동(behavior)”하는가라는 식으로 표현했었다. 근데 밖에 나와서 거동이라는 표현을 썼더니 잘 모르는 것 같았다. 발음 그대로 “비헤이비어” 라고 표현하는 사람들도 많았다. 그러나 달봉이는 여전히 거동이라는 표현이 마음에 든다. behavior는 AOP의 advice같은 개념이다. 그 개념을 구현해 놓은 코드 조각을 인터셉터(interceptor)라고 한다. 이 behavior라는 것을 머리에 그릴때.. 더보기
개발 프레임워크 만들기 대장정 42 - WCF 확장하기 I (사용자 정보 받기 ) 앞의 포스트까지는 메뉴를 클릭했을 때 해당 업무 화면을 로딩하는 것까지 진행했다. 이제 업무 화면에서 서비스를 호출하는 기능을 구현하도록 하자. 이때 개발 프레임워크단에서는 흔히 서비스를 호출할 수 있는 프락시 객체를 제공한다. Visual Studio를 사용하면 쉽게 프락시 클래스를 만들어 주지만 개발자가 그것을 그대로 사용하기에는 너무 기능적으로 부족한 감이 있다. 개발시 사용했던 서비스에 대한 URI도 설정에 따라서 자동으로 변경해 줄 수 있어야 하고 사용자 정보도 서버측으로 건네줘야 한다. 그리고 필요하다면 프로그레스바도 출력해줘야 한다. Visual Studio가 만들어주는 프락시를 한번 더 감싸서 이런 기능을 할 수 있는 프락시 클래스를 만들어 볼까 한다. 이런 기능을 갖는 프락시 클래스를 만.. 더보기
개발 프레임워크 만들기 대장정 41 - 화면 객체 로딩 테스트 지난 포스트까지는 메뉴 정보를 로딩해서 트리로 출력하는 과정을 봤다. 오늘은 트리의 최종 노드를 클릭했을 때 화면을 로딩시켜보자. 샘플 화면을 하나 추가하자. 항목 추가 템플릿에서 User Control(WPF) 템플릿을 선택하고 이름을 UserMgmt.xaml이라고 넣는다. 이렇게 해서 추가된 사용자 컨트롤 코드를 좀 수정해야 한다. 우선 베이스 클래스를 우리가 이전에 만든 BongControlBase로 수정한다. public partial class UserMgmt : BongControlBase 그런 다음 xaml 마크업 코드도 다음처럼 수정한다. Hello 이게 무슨 말인가하면…모르겠다면, 이전 포스트를 보자. 간단히 말하면 UserControl의 베이스 클래스를 사용자 정의 클래스( 여기서는 B.. 더보기
개발 프레임워크 만들기 대장정 40 - 메뉴정보 로딩/출력하기 지금까지 작성한 코드는 다음 링크를 통해서 다운로드받을 수 있다. 이제 메뉴를 출력해보자. 그러자면 우선 메뉴 소스가 데이터베이스든 XML이든 구성되어 있어야 할 것이다. 그러나 여기서는 우선 아주 쉬운 방법을 택하겠다. 하드코딩 ! 메뉴 소스가 구성되어 있다면 그것을 읽어들여 메뉴 계층 구조를 만들겠다. 이 계층구조는 눈으로 볼 수 있는 트리구조가 아니다. 단지 논리적인 메뉴 객체들의 트리구조이다. 따라서 ‘논리적인 메뉴 구조를 구성’한다고 표현할 수 있겠다. 메뉴의 논리적인 트리 구조를 만들기 위해서 필요한 클래스를 만들어보자. 우선 메뉴 아이템 정보를 나타내는 클래스를 만들었다. 메뉴 아이템을 나타내는 클래스들은 Dalbong2.Win 프로젝트에 포함시켰다. 이 녀석들은 현장의 프로젝트와는 상관없기.. 더보기
개발 프레임워크 만들기 대장정 39 - 화면 객체 생성 이전 포스트에서는 Spring.NET에서 제공하는 XmlObjectFactory를 이용해서 화면 객체에 대한 정보를 로딩하는 작업을 했다. 이번 포스트에서는 XmlObjectFactory( Spring.NET 컨테이너 )에 화면 객체를 요구하는 작업을 하겠다. 아래 그림의 붉은 색 부분이 오늘 포스트의 주제이다. 컨테이너에 객체를 요구할때는 GetObject(“객체ID”)를 호출해서 그 참조를 얻을 수 있다. dalbong2ObjectFactory.GetObject("01"); 이 메소드 내부 소스를 분석해보면 이전 포스트에서 로딩한 객체 정보를 이용해서 해당 어셈블리를 로딩한 후 그 어셈블리를 통해서 동적으로 객체를 생성해낸다. 문제는 그 어셈블리를 어디에서 로딩하느냐이다. 기본적으로 Spring.NE.. 더보기
개발 프레임워크 만들기 대장정 38 - 화면 정보 로딩 달봉이는 프리젠테이션 레이어를 WPF로 구현할 것이다. ClickOnce로 배포되는 스마트클라이언트 애플리케이션을 염두에 두고 있다. 우선 사용자가 보게 될 시스템의 최종 실행 모습을 미리 보도록 하자. WPF용 애플리케이션을 만들겠지만, 아직 이것으로 만들어진 녀석이 없으니 우선 기존의 Window Form으로 만들어진 녀석을 보자. 사용자가 로그인을 하게 되면 제일 먼저 이런 유사한 화면을 보게 될 것이다. 업무 개발자가 담당할 부분이 가운데 있고, UI 컨테이너가 업무 화면을 둘러싸고 있다. 애플리케이션을 시작하면 UI 컨테이너의 상단과 좌측단에 메뉴가 로딩되고, 메뉴를 클릭하면 업무화면이 동적으로 생성되어 가운데 부분에 출력된다. UI 컨테이너 UI 컨테이너라 함은 말 그대로 Visual을 갖는 .. 더보기
WPF UserControl 베이스 클래스 만들기 Spring.NET의 컨테이너를 UI단에 적용하는 작업은 끝났다. 근데 정리할 시간이 없다. 7월부터 시작하는 UI단 프레임워크 개발 작업이 있다. 이것을 준비해야 하는 관계로 WPF를 좀 더 공부해야 한다. 그래서 정리 순서를 바꾸도록 했다. Spring.NET 컨테이너의 UI단 적용은 다음에 정리해야 할 것 같다. 흔히 기업용 애플리케이션을 제작할때는 윈폼 클래스 또는 사용자 정의 클래스들의 베이스 클래스를 만든다. 그래서 그곳에서 사용자 정보, 권한 정보들을 캐싱해 둔다. 현장의 개발자들은 그것을 상속해서 화면을 만든다. 달봉이도 이런 시나리오를 염두에 두고 WPF에서 제공하는 UserControl의 베이스를 하나 만들려고 했었다. 윈폼 시절의 UserControl을 생각해서 쉽게 될 줄 알았다. .. 더보기
개발 프레임워크 만들기 대장정 37 - POC 애플리케이션 - 개발구조 이미 Spring.NET이 기업형 애플리케이션에 적용되고 있다는 얘기도 가끔 듣고 있다. 그러나 달봉이가 직접 POC( Proof Of Concept) 애플리케이션을 하나 만들어서 Spring.NET이 기업에 어떻게 적용될 수 있는지 나름대로 검토를 해 보고자 한다. 달봉이가 만들 애플리케이션은 흔히 현장에서 사용하고 있는 3 티어 구조를 고려한다. 그리고 사용될 주요 기술은 다음과 같다. UI 레이어 WPF 기반, Spring.NET 컨테이너 통신 방법 Spring.NET 지원의 WCF 비즈니스 레이어 트랜잭션 관리 Spring.NET의 TxScopePlatformTransactionManager Spring.NET 컨테이너 데이터접근 Spring.NET의 DAO ( 그때의 기분이 동하면 NHibern.. 더보기
개발 프레임워크 만들기 대장정 36 - 개발 프레임워크 보안 설계 아직 Spring.NET의 구체적인 API 및 설정 방법 등에 대해서는 모두는 알아보지 않았다. 그러나 사용 컨셉은 알게 되었다. 따라서 최소한 달봉이 머릿속에는 기업용 개발 프레임워크를 만들기 위해서 어떻게 사용해야 하는지는 레이어별로 가닥이 잡힌 듯 하다. 혹시 Spring.NET을 어떻게 사용할까 또는 이것을 이용해서 기업용 개발 프레임워크를 직접 만들 수 있지 않을까 하는 기대를 가지고 이 글을 읽고 있는 독자들이 있다면 달봉이와 같은 마음이길 바란다. 그러나 아직 그렇지 않더라도 실망할 필요는 없을 듯 하다. 사실 달봉이는 몇개의 프레임워크 다뤄본 경험이 있다. 그래서 그것을 염두에 두고 글을 쓰고 있기에 기존의 기업용 개발 프레임워크에서 필요로 하는 요구사항들을 어느 정도는 알고 있다. 그래서.. 더보기
개발 프레임워크 만들기 대장정 35 - Spring.NET 트랜잭션 관리 정리가 힘들었던 포스트였다. AOP에 대한 부분을 연수 전에 작성한 것이라 리마인드를 위해서 그것까지 다시 읽어야했고 읽다 보니 그곳에서도 수정해야 할 부분도 있었다. 어떻게 정리해야 하나 고민이 많았던 부분인데 쌈박하지는 못한 것 같다. 토요일부터 시작해서 오늘에야 끝난다. 이 포스트에서는 Spring이 어떻게 트랜잭션 기능을 제공하는지를 이해할 것이다. 그리고 트랜잭션 기능을 이용하기 위해서 어떻게 설정하는지도 알아본다. “트랜잭션 관리자”, “트랜잭션용 AOP 프락시”, “트랜잭션 어드바이저”, “어드바이스 즉 인터셉터”, “포인트컷”같은 용어를 이해할 필요가 있을 것이다. “AOP 프락시”, “어드바이저”, “어드바이스”, “포인트컷”등은 Spring의 트랜잭션용 용어가 아니라 AOP 용어이다. .. 더보기
개발 프레임워크 만들기 대장정 34 - Spring.NET 트랜잭션 관리(Strategy 패턴) 연수 떠나기 전에 다 하지 못했던, Spring.NET 프레임워크 연재를 계속하기 위해서 다시 공부를 시작했다. 이번에는 Spring.NET이 트랜잭션을 지원하는 방식을 정리하려고 하고 있다. 그러나 이번 포스트의 토픽은 이것이 아니다. Spring.NET이 미들 티어의 트랜잭션 관리를 어떻게 하고 있는지를 설명하기 전에 패턴을 하나 미리 정리하는 것이 나을 것 같았다. Strategy 패턴이 뭐여 달봉이도 이렇게 사용하는 것이 Strategy 패턴이구나 하고 이제서야 알게 되었다. 사실은 이런 패턴을 사용했던 것은 달봉이가 학교 다닐 때부터였다. 다음은 달봉이의 논문에 포함되어 있는 그림이다. 다른 것은 볼 필요없고, 붉은 박스 안을 보자. 교량을 건설하다 보면 어떤 특정 부분의 재료가 ‘빔(beam).. 더보기
ClickOnce 애플리케이션의 자동 시작과 제거 방명록에 어떤 분이 질문을 올렸는데, 답변이 약간 길어져서 포스트로 올린다. 정신적 여유가 없어서 글이 성의없게 작성되었다는 것을 미리 밝힌다. 음...기본적으로 ClickOnce에서는 어플리케이션을 시작 프로그램(Startup)으로의 등록과 제거를 지원하지 않고 있습니다. startup등록은 약간의 꽁수면 됩니다. 사실 clickonce와 startup으로 구글링해보면 만족할 만한 결과가 나옵니다. 제 책에 이 내용을 썼던 것 같은데, 기억이 가물합니다( 지금 원고가 어디로 가 버렸는지 찾을 수가 없습니다.-_-;; ). 요는 ClickOnce 어플리케이션을 설치하면 생성되는 shortcut 파일을 Startup 폴더에 복사하는 방법입니다. 다음 링크를 참조하면 코드가 나와 있습니다. 이 문서에는 xp.. 더보기
블로그 이전 완료 블로그를 티스토리로 이전했다. 그러나 아직 잘못된 링크를 수정하는 작업등 몇 가지가 남아있다. 포스트는 겨우 수작업으로 이전을 했지만, 방명록, 댓글까지는 복구하지 못했다 -_-;; 흔적을 남겨주신 분들께 죄송한 마음이다. 5개월 정도 프로젝트에서 손을 놨더니 적응할 시간이 좀 필요한듯 하다. 몇개월 지나지도 않았는데, 왜 이렇게 새로운 기술이나 개념들이 많이 나왔는지... IT 개발자로 살아남는 것이 어렵다는 것을 새삼 느끼게 된다. 이제 내 생에 가장 여유로왔던 시간으로 기억될 것 같은 순간이 지났다. 이제부터 새로운 마음으로 글쓰기를 다시 시작해볼까 한다. 마음 추스리고 시동을 거는 것이 좀 늦는 타입이라 언제 어떤 주제로 글을 다시 쓰게 될지는 모르겠다. 더보기