LINQ를 XSD로 변환하기

LINQ를 XML로 변환할 수 있는 LINQ to XSD가 오랜 기다림 끝에 모습을 드러냈습니다. 이 어플리케이션의
첫 번째 목적은, XML 데이터에서 타입을 확인해야 할 필요가 있는 개발자를 위해 XSD파일로에서 LINQ 호환
Object Model을 제공하는 것입니다.

아직은 LINQ to XSD는 소스코드만 제공되며, 설치 형태로는 제공되지 않습니다. 이 제품은 MSPL
(Microsoft Public License)
를 따르고 있습니다.

해당 프로그램을 설치하고자 한다면 'Readme' 파일을 주의 깊게 읽어볼 필요가 있다고 하네요..LINQ to XSD의
사용법은 꽤 간단합니다. 원하는 XSD파일을 C#프로젝트에 추가하고 build action을 'LinqToXsdScheme'로
설정하기만 하면 됩니다. code는 자동으로 생성되며, 결과물(object model)을 바로 이용하실 수 있습니다.

불행히도 LINQ to XSD는 VB와 같은 다른 언어는 지원하지 않습니다. 하지만 CodeDOM 기반으로 작성 되었기
때문에 조만간 다른 언어에 대한 지원도 추가될 걸로 예상이 되네요.

이 글의 관련글
  • About XSD (XML Schema Definition)
  • LINQPad를 이용하여 LINQ 편집하기 (1)
  • 2009/06/12 14:18 2009/06/12 14:18
    Trackback Address:http://www.yunsobi.com/blog/trackback/496
    [로그인][오픈아이디란?]

    WPF 아키텍처

    기본 WPF 프로그래밍 모델은 관리 코드를 통해 노출됩니다. WPF의 초기 디자인 단계에서는 시스템의 관리되는
    구성 요소와 관리되지 않는 구성 요소를 정확하게 구분하는 방법에 대한 많은 논쟁이 있었습니다.
    CLR에서는 보다 생산적이며 강력한 개발 작업을 수행하는 데 유용한 여러 기능(메모리 관리, 오류 처리, 공용
    형식 시스템 등)을 제공하지만 이러한 이점에는 대가가 따릅니다.

    WPF의 주요 구성 요소는 아래 그림에 설명되어 있습니다. 다이어그램의 빨간색 섹션(PresentationFramework,
    PresentationCore 및 milcore)은 WPF의 주요 코드 부분입니다. 이 중에서 하나(milcore)만 관리되지 않는 구성
    요소입니다. milcore는 DirectX와의 긴밀한 통합을 위해 비관리 코드로 작성되어 있습니다.
    WPF에서의 모든 디스플레이는 DirectX 엔진을 통해 수행되므로 효율적인 하드웨어 및 소프트웨어 렌더링을
    허용합니다. WPF에는 메모리 및 실행에 대한 세부적인 제어도 필요합니다. milcore에 있는 컴포지션 엔진은
    성능의 영향을 크게 받으므로 성능을 높이기 위해 CLR의 여러 이점을 포기해야 했습니다.

    WPF 아키텍처

    대부분 Managed Code로 이루어져있지만 렌더링 엔진인 milcore는 Unmanaged Code로 이루어져있다.


    출처 : http://msdn.microsoft.com/ko-kr/library/ms750441.aspx(새 창으로 열기)
    이 글의 관련글
  • WPF (Winsows Presentation Foundation) LifeTime :: WPF 어플리케이션 생명주기
  • WPF (Winsows Presentation Foundation) Class Hierarchy
  • MS Visual Studio 2005로 WPF 개발환경 구축하기 (1)
  • WPF에서 비디오 재생하는 두가지 방법 :: Media Player on WPF
  • WPF 폰트 버그 언제나 해결될까.. (2)
  • WPF 어플리케이션 트레이 아이콘으로 실행하기
  • 코드로 WPF 컨텍스트 메뉴 오픈 방법 :: WPF ContextMenu Open in Code (1)
  • WPF 문서 & 블로그 정리
  • WPF (Winsows Presentation Foundation) Application 개발 협업
  • 어렵네.. 어려워...
  • 2009/03/30 16:37 2009/03/30 16:37
    Trackback Address:http://www.yunsobi.com/blog/trackback/481
    [로그인][오픈아이디란?]

    XapOptimizer로 Silverlight XAP 배포 파일 사이즈 줄이기.

    실버라이트의 배포단위는 XAP 파일이다. 이 파일은 JAVA의 jar나 war같이 ZIP 파일의 이름만 바꾼 형태로,
    manifest 파일과 실버라이트 어플리케이션을 구동하는 데 필요한 모든 코드를 포함하고 있다.
    파일포맷 자체는 ZIP 파일 형식과 동일할 뿐 특별한 내용은 없다. 확장자를 zip으로 바꾼 후 압축 해제프로그램
    으로 열어보면 AppManifest.xaml 파일과 필요한 DLL들이 들어 있을 것이다.

    불행히도, xap 파일에 포함된 DLL 중에는 불필요한 코드도 상당수 섞여 있다. 배포하고자 하는 실버라이트
    어플리케이션이 DLL 중 코드 중 일부만 이용한다면 클라이언트 측에서 다운로드하는 파일 사이즈가 불필요하게
    크다는 의미이기도 하다. 이런 사이즈를 줄이기 위해 프로젝트 파일을 손보는 것 보다는 XapOptimizer를 이용해
    불필요한 클래스를 줄여보는 것도 고려해볼 만 하다.

    http://labs.componentone.com/XapOptimizer/

    XapOptimizer

    XapOptimizer



    XapOptimizer는 ComponentOne社의 온라인 툴로 현재는 베타 버전이다. 불필요한 코드가 포함되어 있는
    XAP 파일을 업로드 하면 결과물을 메일로 알려준다.
    용량 제한이 있지만 난독화까지 지원하고 있으니 필요하신 개발자는 한 번쯤 들러보는 것도 괜찮을 것 같다.  

    이 글의 관련글
  • Silverlight의 장점과 단점/아쉬운 점.
  • Silverlight 2 Unit Test Framework :: 실버라이트 단위 테스트 프레임워크
  • RIA (Rich Internet Application ) 패턴
  • Silverlight for Linux: Moonlight 1.0 Beta 1 Is Available for Download
  • 2009/03/05 14:14 2009/03/05 14:14
    Trackback Address:http://www.yunsobi.com/blog/trackback/473
    [로그인][오픈아이디란?]

    코드로 WPF 컨텍스트 메뉴 오픈 방법 :: WPF ContextMenu Open in Code

    윈도우즈 어플리케이션에서 마우스 오른쪽 클릭으로 팝업되는 메뉴를 'Context Menu'라고 부르는데
    XAML에서는 System.Windows.Controls 네임스페이스아래 ContextMenu 클래스로 존재합니다.

    WPF어플리케이션에서는 FrameworkElement라면 어떤 컨트롤이든지 ContextMenu를 설정할 수 있는데요.
    예를들어 버튼에 컨텍스트 메뉴를 설정하고 싶다면 xaml에서는 아래와 같이


    <Button x:Name="ui_button" Content="테스트 Button" >
    <Button.ContextMenu>
    <ContextMenu x:Name="contextMenu" >
    <MenuItem Header="menu 1." />
    <MenuItem Header="menu 2." />
    </ContextMenu>
    </Button.ContextMenu>
    </Button>


    버튼컨트롤의 ContextMenu라는 의존속성에 ContextMenu를 할당해 두면 사용자 마우스 오른쪽버튼 이벤트에
    반응하여 자동으로 컨텍스트 메뉴를 띄워주게됩니다.

    그런데 가~끔 이 컨텍스트메뉴를 사용자 개입없이 자동으로 띄워야 할 필요가 있는데요..
    코드에서 컨텍스트 메뉴를 띄우는건 contextMenu.IsOpen=true; 라는 짧은 코드로 가능합니다...만!!

    이런걸 원한게 아닌데..

    이런걸 원한게 아닌데... 끙..


    예.. 컨텍스트메뉴가 버튼에서 팝업되는게아니라 마우스 포인터 옆에서 팝업되어버립니다.
    컨텍스트메뉴, 드롭다운, 툴팁등은 팝업시스템으로 동작하는 또다른 윈도우이기 때문에 나타나는 현상입니다.
    WPF의 팝업 시스템에대한 자세한 이야기는 아래 MSDN의 글을 참조하시도록 하구요..
    http://msdn.microsoft.com/ko-kr/library/system.windows.controls.primitives.popup.aspx(새 창으로 열기)
    그럼, 어떻게하면 우리가 바라는대로 버튼 옆에 컨텍스트 메뉴를 띄울 수 있냐...
    ContextMenu의 PlacementRectangle, HorizontalOffset ,VerticalOffset 의존속성을 설정하면
    가능해 집니다.


    //컨텍스트 메뉴가 열릴 기준이되는 UI엘리먼트의 화면좌상단으로부터 위치(point)를 구합니다.
    Point targetPoint = ui_button.PointToScreen( new Point(0,0) );

    //컨텍스트 메뉴가 popup될 영역과 기준위치를 설정합니다
    contextMenu.PlacementRectangle = new Rect(targetPoint, new Size( ui_button.Width, ui_button.Height));
    contextMenu.Placement = System.Windows.Controls.Primitives.PlacementMode.RelativePoint;
    //offset을 주시구요…
    contextMenu.HorizontalOffset = 10;
    contextMenu.VerticalOffset = 10;

    //컨텍스트 메뉴를 여시면 됩니다.
    contextMenu.IsOpen = true;



    자.. 위와같이 수정 후 실행 하시면..
    짜잔~

    짜잔~


    예 원하는 결과대로 되었습니다.
    이 포스팅의 요지는 위에서 설명한 팁이 될수도 있겠지만 그보다는 'WPF의 팝업시스템의 이해' 정도가 되겠군요. ^^

    이 글의 관련글
  • WPF 문서 & 블로그 정리
  • Java에 OpenID 적용 관련 아티클
  • WPF (Winsows Presentation Foundation) Class Hierarchy
  • 자바 파일복사 코드와 성능 2 :: Java File Copy Code & Perfomance Issue. part 2 (7)
  • JAVA.UTIL.SCANNER로 텍스트 스캔하기
  • WPF (Winsows Presentation Foundation) Application 개발 협업
  • [STAThread] 어트리뷰트는 뭘 의미하는거지?
  • JVM에서 얻어오는 시간이 시스템시간과 차이가 날 때.
  • 프로그래머를 위한 스크린 캡처/공유 툴 :: 징 프로젝트 Jing Project (2)
  • finalize 메소드의 오버라이딩을 자제해야 하는 이유.
  • WPF (Winsows Presentation Foundation) LifeTime :: WPF 어플리케이션 생명주기
  • WPF 폰트 버그 언제나 해결될까.. (2)
  • 2009/03/03 15:29 2009/03/03 15:29
    Trackback Address:http://www.yunsobi.com/blog/trackback/471
    1. Blog Icon
      백미란

      contextMenu.Placement = System.Windows.Controls.Primitives.PlacementMode.RelativePoint;
      이렇게 하면 오른쪽버튼 클릭했다가 다시 왼쪽버튼을 눌렀을때 이상한 좌표에서 컨텍스트 메뉴가 뜨네요~
      Con.Placement = System.Windows.Controls.Primitives.PlacementMode.AbsolutePoint;
      이렇게 해야 정상으로 나와요 ^^ 강의 감사합니다~
      그런데 혹시 오른쪽 버튼 눌렀을때 컨텍스트 메뉴가 뜨지 않게 막는 방법도 있나요 ?
      그리고 바탕화면 쉘 컨텍스트 메뉴처럼 정보를 읽어와 뜨게 하는 방법이 있는지도 궁금합니다..

    [로그인][오픈아이디란?]

    LINQPad를 이용하여 LINQ 편집하기

    통합 언어 쿼리라고 불리는 LINQ ('링크'로 발음 합니다. )는 관계형 데이터 모델(RDB)를 객체지향 모델로 매핑하는
    (MS의 표현에 따르면) 획기적인 방법을 제공 하는데요..  
    이 LINQ 편집을 위한 좋은 툴이 있어 소개합니다.

    LINQPad 사이트
    물론, VisualStudio 2008에서도 이 언어를 편집할 수 있습니다만 여기서 소개하는 LINQPad 라는 프로그램은
    C# 3.0 in a Nutshell의 저자 Joseph Albahari씨가 개발하였으며 설치가 필요없는 약 3MB 용량에 AutoUpdate를
    지원합니다. 이 어플리케이션의 소스는 Standard Copyright Laws의 보호아래있지만 프로그램의 사용에는 별다른
    라이센스 제약 없이 자유롭게 이용할 수 있습니다.
    자동완성 기능을 지원하는 버전은 약간의 금액을 받는다고 합니다.

    이 어플리케이션을 사용하기위해서는 .NetFramework 3.5가 필수요건입니다. 이는 어플리케이션보다는
    Linq가 .NetFramwork 3.5 이후부터 사용가능하기 때문에 생긴 제약입니다.
    현재 LINQPad를 적용할 수 있는 DBMS로는 SQL Express, SQL 2000, SQL 2005이며 약간의 제약이 있지만
    SQL 2008에도 사용할 수 있다고 하네요.

    LINQPad는 링크 편집에 도움이 될 뿐만 아니라 C# 3.0 in a Nutshell에 수록된 200여개의 예제 내장해 이를 통해
    링크 문법을 익히는데도 큰 도움이 될듯합니다.
    뿐만 아니라 아래 스크린샷에 있는 Linq to object, Linq to lambda, Linq to sql 같은 유용한 기능도 제공하고 있습니다.

    LINQ 쿼리 결과 화면

    LINQ 쿼리 결과 화면


    LINQ를 lambda로 변환한 결과 화면

    LINQ를 lambda로 변환한 결과 화면


    LINQ를 SQL로 변환한 결과 화면

    LINQ를 SQL로 변환한 결과 화면


    이 글의 관련글
  • WPF (Winsows Presentation Foundation) Class Hierarchy
  • Java 개발자 입장에서 바라본 .Net의 Delegate (2)
  • LINQ를 XSD로 변환하기
  • WPF (Winsows Presentation Foundation) LifeTime :: WPF 어플리케이션 생명주기
  • C# 레지스트리에 값을 쓰고, 읽고, 삭제하기
  • 닷넷 프로젝트에서 로깅을... Log4Net - Logging Framework for Microsoft .Net (1)
  • WPF 어플리케이션 트레이 아이콘으로 실행하기
  • WPF 문서 & 블로그 정리
  • HitTest를 통한 마우스 아래의 컨트롤 구하기
  • 객체 지향론자를 위한 함수 프로그래밍(Functional programming)
  • 2009/02/11 13:17 2009/02/11 13:17
    Trackback Address:http://www.yunsobi.com/blog/trackback/466
    1. 정말 괜찮은 프로그램이군요. 한번 써봐야 겠습니다.

    [로그인][오픈아이디란?]

    RIA (Rich Internet Application ) 패턴

    마이크로소프트의 Pattern & PracticesRIA 패턴에 대한 글이 게시되었습니다.

    이 시나리오는 개인정보와같은 민감한 Data를 이용할 수 없는 RIA 어플리케이션이며 DB를 이용한다는 가정에서
    출발합니다. 결과적으로 클라이언트, 웹서버, 데이타베이스의  3-tier 로 구성이 됩니다.

    3-tier RIA Application


    위와 같은 구성에서 각 레이어에 적용하면 좋을 패턴을 마이크로소프트 사에서는 아래와 같이 제시합니다.
    각 레이어에 적용할 패턴들
    위 패턴이 적용된 이미지의 요약은 다음과 같습니다.
    MVC패턴으로 유저 인터페이스를 구성.
    유저인터페이스는 여러개의 control들로 구성.
    Presentation 레이어와 Service 레이어사이의 통신에는 Proxy 패턴을 적용.
    다양한 데이터 구조를 하나로 취합하기위해 DTO 패턴을 적용.
    Service 레이어는 외부와 내부 데이터 구조 사이의 변환기능을 제공해야 함.
    Bussiness 레이어는 메세지기반 운용을위해 facade 패턴 적용.
    도메인 엔티티를 위한 Repository 패턴 적용.
    Domain Entity 패턴은 오직 데이터만 나타내는 Business entity를 정의하는데 이용.
    Domain Entity와 Database Schema 사이의 매핑을 위해 Data Mapper 패턴 적용.

    위와 같은 패턴을 적용한 RIA 어플리케이션을 MS Silverlight로 구현할 경우 다음과 같은 Technical Solution을보여줍니다.
    Technical Solution

    아래 링크에서 더 자세한 정보와 코드조각을 얻으실 수 있습니다.
    http://www.codeplex.com/AppArch/Wiki/View.aspx?title=App%20Pattern%20-%20Three-Tier%20RIA%20Application%20Scenario&referringTitle=Application%20Patterns
    이 글의 관련글
  • XapOptimizer로 Silverlight XAP 배포 파일 사이즈 줄이기.
  • 옵저버 패턴 :: Observer Pattern
  • Silverlight for Linux: Moonlight 1.0 Beta 1 Is Available for Download
  • Silverlight 2 Unit Test Framework :: 실버라이트 단위 테스트 프레임워크
  • Ajax와 XML: 다섯 가지 Ajax 안티 패턴(anti-pattern)
  • Silverlight의 장점과 단점/아쉬운 점.
  • AJAX와 XML: 다섯 개의 일반적인 Ajax 패턴
  • 싱글턴 패턴 :: Singleton Pattern
  • 2009/01/31 12:35 2009/01/31 12:35
    Trackback Address:http://www.yunsobi.com/blog/trackback/464
    [로그인][오픈아이디란?]

    Microsoft에서 개발한 iPhone App - Seadragon Mobile

    MS Live Labs에서 마이크로소프트사의 첫번째 iPhone용 어플리케이션인 Seadragon Mobile 을 출시하였습니다.
    Seadragon은 MS사의 Deep Zoom 기능을 이용한 이미지 뷰어 어플리케이션입니다. 고해상도의 많은 이미지의
    효율적인 관리가 가능하다고 하고 애플 앱스토어에서 무료로 다운로드 할 수 있다고 합니다.

    Seadragon Mobile

    애플 앱스토어에 게시된 Seadragon Mobile



    Seadragon은 Photosynth(링크의 스크린 캐스트 참조)라는 MS의 Photo-browsing 기술을 이용하고 있습니다.

    Seadragon Mobile이 지향하는 바는 모바일 디바이스 유저가 그들의 기기에서 다량의 고해상도 이미지를 부드럽고
    자연스럽게 보여주는데 있다고 합니다. 이 어플리케이션의 초기 리뷰들이 대부분 긍정적인 반응을 보였지만
    몇몇은 속도에 불만을 토로하고 있다고 하네요.
    Seadragon Mobile은 10 기가픽셀(!!) 이상의 샘플 이미지가 포함되어 있으며, 이용자는 photosynth feed나
    RSS 이미지 feed를 통하여 컨텐트를 추가할 수 있다고 합니다.

    시연이 아닌 실제 제품으로 PhotoSynth를 이용해 볼 수 있다니.. iPhone에서 동작하는 Seadragon을 보고싶네요.
    이 글의 관련글
  • iPhone 4 (1)
  • 이미지와 시멘틱 :: Photosynth
  • 2008/12/17 15:07 2008/12/17 15:07
    Trackback Address:http://www.yunsobi.com/blog/trackback/453
    [로그인][오픈아이디란?]

    Silverlight for Linux: Moonlight 1.0 Beta 1 Is Available for Download


    Moonlight
    는 Linux와 Unix/X11에서 Microsoft사의 Silverlight를 구동케 하기위한 open source 구현체입니다.
    Moonlight는 2007년 9월부터 Novell사의 후원으로 Mono project에 의해 개발되어 왔으며, Moonlight 1.0 beta 1
    릴리즈하였습니다.

    Novell사와 Mono Project팀은 32bit/64bit 리눅스 시스템에서 구동 가능한 Moonlight 1.0 beta 1의 출시를 발표했습니다.
    현재는 SUSE Linux Enterprise Desktop 10, openSUSE 11.0, Ubuntu 8.04, Fedora Core 9 for 32 bit machines,
    SUSE Linux Enterprise Desktop 10 and openSUSE 11.0 for 64 bit machines 을 지원하며, 윈도우즈가 아닌
    OS에서의 실행을 위해 FireFox 3을 추천하고 있습니다.

    Moonlight 1.0은 2009년 1월 20일 출시를 목표하고 있으며, 여기에는 Video/Audio 재생을 위한 Media Pack 1.0,
    실버라이트 2.0 의 스트리밍외에도 다음과 같은 사양이 포함됩니다.
    실버라이트 1.0 호환.
    브라우저의 JavaScript 이용 가능.
    C/C++ 기반의 no managed code.
    Linix/x86 Linux/x86-64 에서 실행 가능.
    소스코드도 함께 배포.


    Moonlight 2.0은 2009년 4월 Beta, 2009년 9월 정식버전 출시를 계획하고 있습니다.
    이 구현체에는 다음과 같은 사양이 포함됩니다.
    실버라이트 2.0 호환.
    마이크로소프트 Media Pack 2.0을 이용한 비디오/오디오 재생
    c#, DLR-based languages 실행을 위한 Mono를 포함.
    실버라이트 2.0 기반 어플리케이션과 실버라이트 2.0 MS-PL 컨트롤의 실행.

    Monolight에서 멀티미디어 stack의 구동방식은 Miguel de Icaza의 blog를 참조하실 수 있습니다.

    소스 코드는 이하의 SVN을 통해 내려 받으실 수 있습니다.
    svn co svn://anonsvn.mono-project.com/source/tags/moon/1.0b1
    해당 소스 코드의 라이센스는 마이크로소프트사의 약속이 계속되는 한 GNU LGPL을 따른다고 합니다.

    이 글의 관련글
  • Silverlight의 장점과 단점/아쉬운 점.
  • RIA (Rich Internet Application ) 패턴
  • XapOptimizer로 Silverlight XAP 배포 파일 사이즈 줄이기.
  • Silverlight 2 Unit Test Framework :: 실버라이트 단위 테스트 프레임워크
  • 2008/12/07 13:58 2008/12/07 13:58
    Trackback Address:http://www.yunsobi.com/blog/trackback/446
    [로그인][오픈아이디란?]

    Java 개발자 입장에서 바라본 .Net의 Delegate


    지난 수년간 JAVA로 개발을 해 오다 작년부터 필요에의해 MS의 .Net Framework와 C#으로 프로젝트를 진행하고 있다.

    .Net Framework와 C#이란 언어를 다루면서 처음으로 접한 문화 충격이라면 Property와 Delegate일 거다.
    MS진영 개발자라면 당연한것으로 받아들이고 있을 두 개념을 처음 접했을때의 신선함이란!

    자바 개발자들을 위해 간략하게 첨언하면
    .Net에서 이야기하는 Property란 java 세상에서는 쉽게말해 getter와 setter에 해당하는데 요걸 코드로 표현하는 방법이 재미있다.
    (물론 이 property란게 코드의 표현이 재미있다의 수준에서 그치는 건 절대 아니다.)
    그리고 .Net에서 이야기하는 Delegate는 메소드 레퍼런스의 OOP적인 Wrapper이다.
    이 Delegate란게 Java언어에서도 구현은 할 수 있지만 .Net에서와 같은 우아한 코드로 표현되진 않는다.
    ( Java는 OOP 개념으로 접근하여 교과서스럽게 코드로 표현하기 때문일거다..
    여튼 Java에서는 없는 개념이라고 맘편히 생각해도 되겠다. )

    뭐? '메소드 레퍼런스의 OOP적인..'이 어쨌다고? 문자로 표현하니 뭘 이야기하는 건지 금방 못알아듣겠지만 개념이 그렇다.
    (C의 표현을 빌자면 '함수의 포인터' 정도로 불릴 수 있겠다.) 나 역시 코드를보고서야 위 말의 의미를 알 수 있었으니까..

    풀어 말하자면 클래스 인스턴스의 레퍼런스를 다른 클래스 인스턴스의 메소드에 전달하는것과 마찬가지로
    메소드의 레퍼런스를 객체 다루듯이 다른 클래스 인스턴스의 메소드에 전달하는것이 가능하다.
    놀랍지 않은가? 메소드를 객체처럼 주고 받을 수 있다니!!

    이게 사용하다보면 은근히 편하다. Java 세상에선 Callback을 받기위해 자신의 레퍼런스를 넘겨야 가능할 일을
    .Net에서는 Callback 메소드를 싼 클래스를 넘겨 버리면 그만이니...

    확실히 최근에 나온 언어일수록 개발의 편의성이 높긴하다. Java에도 조금 유연성을 발휘하여 이런 개념을 도입하면 어떨까?
    [상업적으로 가장 성공한 OOP언어가 Java가 아니던가. Java에 Generic 개념이 도입되었을때도 자바스럽지
    않다며 유난을 떠는 사람들도 많았으니 .net의 delegate 개념을 언어 차원에서 지원한다면 이건 더이상 java가 아니다며
    너스레를 떠는 사람이 넘쳐날지도.. ]

    이 글의 관련글
  • 컴포넌트 시스템과 클래스 로더 경계 :: Java Class Loader
  • BigDecimal의 필요성
  • JavaTM Cryptography Extension (JCE) Reference Guide
  • WebRowSet 을 이용한 JDBC 활용하기 1부
  • 객체 지향론자를 위한 함수 프로그래밍(Functional programming)
  • JDOM과 XML 파싱
  • WPF (Winsows Presentation Foundation) LifeTime :: WPF 어플리케이션 생명주기
  • 자바 SE 플랫폼 개괄 :: Java SE Platform at a Glance
  • QUEUE와 DELAYED 프로세싱
  • Java 7 로드맵 업데이트와 커뮤니티의 반응. (2)
  • 자바 어플리케이션(jar)을 실행파일(exe)로 만들기 :: launch4j (2)
  • Java Profiler JProbe 8.0 출시!! :: 자바 프로파일러
  • 2008/11/18 22:42 2008/11/18 22:42
    Trackback Address:http://www.yunsobi.com/blog/trackback/442
    1. 결국 그 delegate가 Python 언어의 람다 함수나 Javascript의 익명 함수와 같은 역할을 하죠. 원래 Lisp 같은 함수형 프로그래밍 언어 쪽에서 나온 개념인데 이게 은근 편리(?)하다보니 요즘은 원래 함수형 언어가 아닌 언어에서도 많이 지원하는 추세인 것 같습니다.

    2. Blog Icon
      서비

      예 daybreaker님께서 주신 말씀대로입니다.
      본질을 이해하고나면 표현하는 방법이 무슨 대수겠습니까만은..
      이게 시작을 대중적인 OOP언어로 한 저같은 사람은 생소한 코드
      표기방법과 쓰임에 당황+놀라움을 동시에 경험하기도 한답니다.. ^^

    [로그인][오픈아이디란?]

    Silverlight의 장점과 단점/아쉬운 점.

    RIA( Rich Internet Application )가 마켓리더인 어도비의 Flex와 AIR를 통하여 메인스트림 기술로 진입한 시점에
    MS에서는 Silverlight 제품을 RIA  영역에 포진 하였습니다. 이에 실버라이트 라는 제품에 대해 개발자 커뮤니티
    에서도 의견이 분분한데요.

    이와 관련하여 어도비 플랫폼 에반젤리스트인  Serge Jespers씨가 자신의 블로그를 통하여 실버라이트에 대한
    장단점과 아쉬운 점을 포스팅
    하여 Flex-Silverlight간의 논쟁에 불을 붙였네요.
    뭐.. 어도비 에반젤리스트가 한 말이니 어도비에 편향될 수도 있겠지만 실버라이트로 개발을 해 보신분이라면
    고개를 끄덕일 만한 내용도 조금은 있지 않을까 생각합니다.

    그는 포스팅을 통하여 실버라이트의 장점으로
    * 실버라이트의 쓰레드 모델의 컨셉트가 아주 마음에 든다. 특히나 main 쓰레드의 정체없이 복잡한 테스크를 처리가능한
      - 예를들어 데이타 로딩과 동시에 별도의 쓰레드로 구현되는 부드러운 에니메이션과 같은 - 기능은
      정말 Cool하다.
    * 실버라이트 어플리케이션은 파라메터 세팅과같은 간단한 방법으로 HTML문서와 통신할 수 있다.
    * C#이나 VB.NET과 같은 코드를 그대로 사용할 수 있는점 역시 훌륭하다. 특히나 이 두 언어는 윈도우즈 기반
      개발자들에게 익숙하다.

    라고 한 반면 단점과 아쉬운 점으로
    * C#과 XAML 코드표현 방법이 너무 다양하다. -이건 저도 WPF를 잠깐 해 보면서 느꼈던 부분인데 똑같은 기능을
      C#으로도 XAML로도 구현 할 수 있기때문에 적절한 개발 가이드를 세우지 않으면 스파게티 코드를
      만들어낼 가능성이 농후합니다. -
    * 컨트롤에 스타일을 적용하는건 말그대로 '악몽'이다. 이건 아무리 생각해도 실버라이트의 아킬레스건이다.
    * Text Field에서의 HTML 태그 지원 부족 또한 이해할 수 없다.
    * Expression 툴이 여전히 베타이다. 이는 Expression툴만의 문제에 그치지 않고 더이상 베타버전이 아닌
      비주얼 스튜디오 마저 버그를 갖는 미완성품으로 만들어 버렸다는 사실이다.
    * 실버라이트를 접한 삼일간의 느낌은 실버라이트는 디자이너를 전혀 고려하지 않고 개발되지 않았나 하는 생각이다.

    라는 견해를 밝히고 있습니다.
    제가 봐도 딱히 편향되어 보이진 않지만 어도비 에반젤리스트의 이런 견해는 그의 위치때문이라도 좋은
    논쟁꺼리를 만들어 낸 셈인데요..
    그의 이런 생각에 다른 개발자들은 어떤 생각을 갖고 있는지 궁금하시면 그의 해당 포스트를 방문해 댓글을
    직접 보시는게 좋겠네요. ^^

    http://www.webkitchen.be/2008/07/17/silverlight-the-good-the-bad-and-the-ugly/
    이 글의 관련글
  • XapOptimizer로 Silverlight XAP 배포 파일 사이즈 줄이기.
  • RIA (Rich Internet Application ) 패턴
  • Silverlight 2 Unit Test Framework :: 실버라이트 단위 테스트 프레임워크
  • Silverlight for Linux: Moonlight 1.0 Beta 1 Is Available for Download
  • 2008/07/28 19:38 2008/07/28 19:38
    Trackback Address:http://www.yunsobi.com/blog/trackback/409
    [로그인][오픈아이디란?]

    Silverlight 2 Unit Test Framework :: 실버라이트 단위 테스트 프레임워크



    실버라이트 단위 테스트 프레임워크 수석 개발자인 Jeff Wilcox는 Sliverlight 2의 테스트 방법을 작성하여
    포스팅 하였습니다. 실버라이트 테스트에 대해 스텝바이스텝으로 구성된 Jeff의 포스트에는 업데이트된
    Test Project Templaterepackage한 실버라이트 테스팅 어셈블을 제공 하고 있습니다.

    해당 실버라이트 유닛 테스트 프레임워크는 아직 비주얼 스튜디오에 통합되진 않았지만, MS Test에서 쓰이는
    Type과 Attribute를 그대로 이용하고 있다고 합니다.

    실버라이트의 단위 테스트에 관심이 있으신 개발자는 Jeff Wilcox의 해당 포스트를 방문해 보시기 바랍니다.

    이 글의 관련글
  • Java에 OpenID 적용 관련 아티클
  • java.beans.XMLDecoder와 java.beans.XMLEncoder를 이용한 Java객체의 xml 변환
  • Silverlight의 장점과 단점/아쉬운 점.
  • 터미널서버(Terminal Server)의 포트를 변경하는 방법
  • Oracle Application Server 설치 후 host, domain, ip변경 방법
  • 자바 어플리케이션(jar)을 실행파일(exe)로 만들기 :: launch4j (2)
  • HitTest를 통한 마우스 아래의 컨트롤 구하기
  • Flash SEO tool
  • TortoiseCVS 사용 시 Disk IO 성능 향상
  • Runtime 클래스를 이용한 외부 프로그램 호출
  • 넷빈즈( NetBeans ) 6.0 자바 소스 인코딩 설정은 어디서?
  • CLASSPATH에 없는 클래스 로딩
  • 2008/07/08 01:13 2008/07/08 01:13
    Trackback Address:http://www.yunsobi.com/blog/trackback/405
    [로그인][오픈아이디란?]

    HitTest를 통한 마우스 아래의 컨트롤 구하기

    WPF 어플리케이션이든 아니든 마우스가 위치한 곳의 컨트롤을 알아야 할 때가 종종 있다.
    다른 방식으로도 마우스 아래에 있는 컨트롤을 알아낼 수 있지만 WPF라면 아래와 같이 VisualTreeHelper클래스의
    HitTest를 이용해서 컨트롤을 얻어오는 방법도 있다.


    T GetItemAtLocation(Point location)
    {
    T foundItem = default(T);
    HitTestResult hitTestResults = VisualTreeHelper.HitTest(treeView,location);

    if(hitTestResults.VisualHit is FrameworkElement)
    {
    object dataObject = (hitTestResults.VisualHit as
    FrameworkElement).DataContext;

    if(dataObject is T)
    {
    foundItem = (T)dataObject;
    }
    }

    return foundItem;
    }



    위 메소드의 사용법은 이렇게 될 수 있다.

    void treeView_Drop(object sender,DragEventArgs e)
    {
    if(e.Data.GetDataPresent(typeof(Task)))
    {
    Task sourceTask = (Task)e.Data.GetData(typeof(Task));
    Task targetTask = GetItemAtLocation(MouseUtilities.GetMousePosition());

    // Code to move the item in the model is placed here...
    }
    }


    이 글의 관련글
  • Silverlight 2 Unit Test Framework :: 실버라이트 단위 테스트 프레임워크
  • Oracle Application Server 설치 후 host, domain, ip변경 방법
  • 자바 파일복사 코드와 성능 2 :: Java File Copy Code & Perfomance Issue. part 2 (7)
  • 자바 파일복사 코드와 성능 1. :: Java File Copy Code & Perfomance Issue. part 1 (4)
  • CLASSPATH에 없는 클래스 로딩
  • 넷빈즈( NetBeans ) 6.0 자바 소스 인코딩 설정은 어디서?
  • WPF 어플리케이션 트레이 아이콘으로 실행하기
  • 소켓통신 서버/클라이언트 통신시 IO Blocking 상태에 빠지는 코드와 해결 방안
  • C# 레지스트리에 값을 쓰고, 읽고, 삭제하기
  • Runtime 클래스를 이용한 외부 프로그램 호출
  • String 타입의 날짜를 Date 타입으로 변환하기
  • WPF (Winsows Presentation Foundation) LifeTime :: WPF 어플리케이션 생명주기
  • 2008/03/21 12:09 2008/03/21 12:09
    Trackback Address:http://www.yunsobi.com/blog/trackback/342
    [로그인][오픈아이디란?]

    WPF 문서 & 블로그 정리

    Maximizing WPF 3D Performance on Tier-2 Hardware

    WPF Amazon Explorer Using 3D

    WPF를 사용하여 컨트롤 및 3D 표면에 비디오 추가

    WPF 미디어 비주얼 관련 코드 조각 많은 블로그

    윈도우 미디어 플레이어의 Visualization을 WPF로 제작하기

    Using COM Interop to Create a WPF Visualization for Windows Media Player

    Walkthrough: Hosting an ActiveX Control in Windows Presentation Foundation

    각 종 대화상자 및 커스텀 대화상자 제작( 영문 , 한글 )

    WPF상에서의 각종 드래그앤드롭

    Win32 위에 WPF컨트롤 랜더링 하기

    WPF Data Binding 개발담당 Beareiz Costa의 블로그 : 각 컨트롤에 데이타를 바인딩하는 상세기법 설명

    C#으로 스크롤바 커스터마이징 하기

    Vista Shell 스타일의 Drag & Drop  : Screencast보기

    Rendering text in the adorner layer

    WPF 어플리케이션 성능 최적화 MSDN 문서

    Thread를 이용한 파일복사하기-프로그래스바

    Printing a Form in a report fashion (release 2.2)

    Mole II for WPF

    WPF Podcaster - skinning 기법과 백그라운트 컬러 변경에 경악!!

    WPF Ribbon Control Library - MS Office 2007에 적용된 리본 인터페이스에 대한 WPF 라이브러리

    WPF Weather reader control - 날씨 컨트롤

    이 글의 관련글
  • Runtime 클래스를 이용한 외부 프로그램 호출
  • 자바 파일복사 코드와 성능 2 :: Java File Copy Code & Perfomance Issue. part 2 (7)
  • HitTest를 통한 마우스 아래의 컨트롤 구하기
  • WPF (Winsows Presentation Foundation) Application 개발 협업
  • 넷빈즈 6.0 코드 템플릿 사용하기 :: NetBeans 6.0 Code Template
  • BigDecimal의 필요성
  • LINQPad를 이용하여 LINQ 편집하기 (1)
  • TortoiseCVS 사용 시 Disk IO 성능 향상
  • C# 레지스트리에 값을 쓰고, 읽고, 삭제하기
  • java.beans.XMLDecoder와 java.beans.XMLEncoder를 이용한 Java객체의 xml 변환
  • Silverlight 2 Unit Test Framework :: 실버라이트 단위 테스트 프레임워크
  • 소켓통신 서버/클라이언트 통신시 IO Blocking 상태에 빠지는 코드와 해결 방안
  • 2008/03/20 18:32 2008/03/20 18:32
    Trackback Address:http://www.yunsobi.com/blog/trackback/320
    [로그인][오픈아이디란?]

    WPF에서 비디오 재생하는 두가지 방법 :: Media Player on WPF

    WPF상에서 비디오를 재생하기 위해서 다음과 같은 2가지 객체를 이용 할 수 있습니다.

    System.Window.Control.MediaElement System.Window.Media.MediaFlayer가 그것입니다.

    동작 영상은 http://screencast.com/t/6IoXozpFL 을 참조.

    ( 프레임레이트가 낮은 것은 캡처링 때문이지 WPF성능상의 문제는 아닙니다. )


    MediaPlayer를 사용할 때 주의해야 할 점은 이 클래스는 직접적인 시각 표현이 없으며 시각적 트리에
    직접 추가할 수 없다는 점입니다.
    비디오를 재생하려면 MediaPlayer를 가져온 다음 해당 표면을
    VisualBrush
    와 같은 시각적
    트리에 추가해야 합니다.

    기본적으로 MediaElement MediaPlayer 클래스의 상위 래퍼입니다.

    소스 코드 보기..


    본 코드를 작성 한 후 XP에서 테스트를 진행 했을 때 아래와 같은 현상을 발견 할 수 있었습니다.

    OS

    .Net Framework

    Codec 설치여부

    WMP 버전

    Direct X

    영상 표시 여부

    Win XP sp2

    3.0

    X

    9

    9.0c

    X

    Win XP sp2

    3.0

    O

    9

    9.0c

    X

    Win XP sp2

    3.0

    X

    11

    9.0c

    X

    Win XP sp2

    3.0

    O

    11

    9.0c

    O

    Win XP sp2

    3.5

    O

    10

    9.0c

    O


    위 표로 미루어 보아 C#에서 제공하고 있는 MediaPlayer 클래스를 사용하기 위해서는 기본적으로

    윈도우 미디어 플레이어 10이상과 플레이하고자 하는 동영상의 코덱이 필요합니다.

    ( 윈도우즈 Vista는 기본적으로 WMP 11 이 설치되어 있으므로 해당 코덱만 설치되어 있다면 영상이 표시됩니다.
    MSDN 공식문서에도 WMP 10이상이 필요하다고 명시되어 있군요..)

    이 글의 관련글
  • WPF (Winsows Presentation Foundation) LifeTime :: WPF 어플리케이션 생명주기
  • 쥐의 뇌로 조작하는 로봇과 비행기
  • MS Visual Studio 2005로 WPF 개발환경 구축하기 (1)
  • 헉.. 진짜 무섭다...
  • WPF 아키텍처
  • WPF 문서 & 블로그 정리
  • Runtime 클래스를 이용한 외부 프로그램 호출
  • 자바 파일복사 코드와 성능 2 :: Java File Copy Code & Perfomance Issue. part 2 (7)
  • 그래픽 디자이너 3명이 만든 라이언일병 구하기
  • 리눅스 스트리밍 서버에 관한 솔류션 ( Linux Streaming Server Solution )
  • HitTest를 통한 마우스 아래의 컨트롤 구하기
  • 어렵네.. 어려워...
  • 2008/02/21 15:34 2008/02/21 15:34
    Trackback Address:http://www.yunsobi.com/blog/trackback/323
    [로그인][오픈아이디란?]

    닷넷 프로젝트에서 로깅을... Log4Net - Logging Framework for Microsoft .Net

    프로그램을 개발하거나 운영하는데 있어 로깅만큼 중요한 기능도 없을것이다. 시스템이나 어플리케이션에서 발생한 문제 해결의 출발점이
    '에러의 재현' 과 '로그 분석'이기 때문이다.

    Java 진영에서는, 이미 오픈소스에서 발전해 온, Log4J라는 막강한 로깅 프레임웍이 사실상의 표준(de facto standard)으로 존재하고 있다.
    ( Commons Logging 도 있지만 Log4J의 Wrapper 정도라고 생각하면 된다. )
    그럼, MS진영에는 어떤 로깅 프레임웍이 있을까?
    지금 회사에서 진행중인 프로젝트가 .Net 기반의 윈도우즈 어플리케이션이라 MS계열에서 널리쓰이고 있을것 같은(?) 로깅툴을 찾아볼 필요가 있었다.

    그런데 아니나 다를까.. 이미 이쪽 진영에까지 Log4J의 영향력이 미치고 있을줄이야..
    이미 Log4J를 닷넷용으로 포팅한 Log4Net이 있는 것이다.

    Log4J를 사용해 봤다면 Log4Net역시 어렵지 않게 사용 할 수 있다.
    이번 포스팅에서는 Log4Net을 활용하여 .Net 어플리케이션을 로깅하는 방법을 살펴보자.

    Log4Net 공식 사이트 : http://logging.apache.org/log4net/index.html
    라이센스 : Apache License, Ver 2.0 ( 상용어플리케이션에 이용할 수 있다!! )
    지원하는 프레임워크 : 2008년 1월 현재
                                   MS .Net Framework 1.0 , MS .Net Framework 1.1 , MS .Net Framework 2.0 ,
                                   MS .Net Compact Framework 1.0 , Mono 1.2.3, MS Shared Source CLI 1.0, CLI 1.0 Compatible
                                   6개의 프레임워크를 지원.
    Appenders 일람
    Appender .NET Framework 1.0 .NET Framework 1.1 .NET Framework 2.0 .NET CF 1.0 Mono 1.2 Shared Source CLI 1.0 CLI 1.0 Compatible
    AdoNetAppender x x x x x x
    AnsiColorTerminalAppender x x x x x x x
    AspNetTraceAppender x x x x x
    BufferingForwardingAppender x x x x x x x
    ColoredConsoleAppender x x x
    ConsoleAppender x x x x x x x
    DebugAppender x x x x x x x
    EventLogAppender x x x x x
    FileAppender x x x x x x x
    ForwardingAppender x x x x x x x
    LocalSyslogAppender x x x x x
    MemoryAppender x x x x x x x
    NetSendAppender x x x
    OutputDebugStringAppender x x x x
    RemoteSyslogAppender x x x x x x x
    RemotingAppender x x x x x x
    RollingFileAppender x x x x x x x
    SmtpAppender x x x x x
    SmtpPickupDirAppender x x x x x x x
    TelnetAppender x x x x x x x
    TraceAppender x x x x x x x
    UdpAppender x x x x x x x

    Log4Net은 최종으로 로그가 기록될 장소( 파일, DB, 메일 등..)를 Appender를 이용하여 구분하고 있다.
    사용할 Appender를 Log4Net 설정파일에 기술하면 Log4Net이 해당 Appender를 사용하여 로그를 기록하게 된다.  

    사용방법은 이렇다.

    1. 어플리케이션 소스 코드를 작성한다.

    소스코드 보기..

    2. 다운로드 받은 Log4Net을 압축해제하여 나온 디렉토리중 개발을 진행하고 있는 닷넷 프레임워크 버전에 해당하는
       log4net.dll을 Reference 한다.
    3. Log4Net 설정하기
        - 설정파일을 작성하여 어플리케이션이 빌드되는 디렉토리에 배치한다.

    log4net.xml 보기..

    4. 어플리케이션을 빌드후 구동하여 로그가 잘 남는것을 확인한다. ^^


    Log4NetSample.zip

    본 포스팅에 사용된 예제소스를 포함한 비주얼스튜디오용 솔루션파일

    첨부한 프로젝트는 WPF 어플리케이션으로 작성 되었습니다. 비주얼 스튜디오 2008이라면 바로 빌드가 가능하겠지만 VS2005인 경우 실행을 위해서는 http://www.yunsobi.com/blog/280 포스트를 참조하여 WPF개발 환경을 구축 한 후 실행 하셔야 합니다.


    좀 더 들여다 볼까요?.

    퍼포먼스 ( Perfomance )
    로깅에서 퍼포먼스를 이야기할 때 다음 세가지 이슈사항을 고려할 수 있습니다.

    1. Logging을 하지 않을 경우( turned off ) 로깅코드에 의한 퍼포먼스
    로깅레벨을 OFF 로 설정한 경우라면 메소드 호출 비용이 듭니다. 하지만 메소드 생성에는 파라메터 생성에따르는 숨겨진 비용도 포함되어 있음을 잊지 마세요. 예를들어 다음과 같은 코드
    log.Debug("Entry number: " + i + " is " + entry[i].ToString()); 
    에서 i 와 entry[i] 를 string으로 치환하는 비용과 각 string을 더하는 비용이 소모됩니다. 파라메터를 생성하는 비용은 파라메터의 갯수와 생성되는 횟수에 큰 영향을 받습니다.

    파라메터 생성 비용을 없애고 싶다면 아래와 같은 코드를 작성 하세요.
    if(log.IsDebugEnabled)
    {
        log.Debug("Entry number: " + i + " is " + entry[i].ToString());
    }

    디버깅 모드가 꺼져 있다면 위 코드는 파라메터 생성에드는 비용은 0이 될것입니다. 반면에 디버그기능이 켜져 있다면 두배의 비교 시간이 필요합니다. '디버그기능이 켜져있는지(log.IsDebugEnabled)'와 '로거가 디버그 모드인지(log.Debug())' . 하지만 이를 비교하는데 필요한시간은 매우 미미해서 실제 로그를 기록하는데 드는 비용의 1%정도에 해당합니다.
    어떤 개발자들은 전처리나 컴파일타임의 테크닉등을 이용하여 로깅에대한 모든 상태를 조절하기도합니다.이는 퍼포먼스 측면에서 보면 완벽하다고 할 수 있겠지만, 로그레벨을 변경하기가 매우 까다로워 집니다. 이렇게 하는것에 대해 많은 사람들이 작은 성능향상을 위해 너무 많은것을 잃고 있다고 조언 합니다.

    2. 로깅기능이 켜져 있을 경우 로그레벨에 의한 '로그작성'과 '로그작성 않기'의 판단에 따른 퍼포먼스
    이는 기본적으로 로거 Hierarchy의 동작 성능에 따릅니다. 로깅이 켜져(turn on)있다면 log4net은 로그레벨과 로거의레벨을 비교하는 작업이 필요합니다. 하지만 로거 자체에는 레벨이 할당되어 있지 않습니다. 로그레벨은 로거 Hierarch로부터 상속받게 됩니다. 로그레벨을 상속받기 이전에 로거는 상위클래스를 확인 할 필요가 있겠지요.

    여기에는 가능하면 짧은시간으로 동작케하기위한 노력이 담겨있습니다. 예를들어, 자식 로거들은 그들의 부모하고만 연결이 됩니다. 이전에 살펴본 BasicConfigurator의 예에서, Com.Foo.Bar 라는 이름의 로거는 루트로거와 직접 연결됩니다. 이것으로 존재하지 않을 Com 이나 Com.Foo 로거를 찾는 수고를 피할 수 있습니다. 이것으로 산재한 (sparse) hierarchies 속에서 상당한 속도향상을 얻을 수 있습니다.

    로그레벨 의한 로깅 여부 판단은, IsXXXEnable 프로퍼티를 조사하는것에비해 약 3배정도 느리다고 볼 수 있습니다.

    3. 로그메세지를 실제 기록하기
    이는 로그메세지를 포메팅하는것과 목표에 실제로 내보내는 비용이 발생합니다. 여기에는 포메터와 Appender가 가능한 빨리 동작하도록 노력을 기울이는 수밖에 없겠지요.


    어찌돼었든, log4net의 많은 기능들은 '속도'의 관점에서 디자인되었습니다. 몇몇 log4net 컴포넌트들은 성능향상을 위해 몇번이고 재작성 되었으며, 여전히 옵티마이즈되고 있으며 자주 갱신되고 있습니다. 이것만은 알아주세요.
    SimpleLayout의 퍼포먼스 테스트에서 log4net은 System.Console.WriteLine 만큼의 성능을 보여주고 있다는 것을. 


    PatterLayout 수정하기
    log4net의 출력형식을 조정하기위해서는 PatternLayout과  Conversion Character를 이용할 수 있습니다.
    예를들어 log4net.xml에 아래와 같은 패턴을 정의하여 남긴 로그를 보면

    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="C:\Window1.log" />
    <appendToFile value="true" />
    <datePattern value="-yyyy-MM-dd" />
    <rollingStyle value="Date" />
    <layout type="log4net.Layout.PatternLayout"> <!-- 레이아웃으로 패턴레이아웃을 지정했습니다. -->
    <conversionPattern value="%d [%t] %-5p %c - %m%n" /> <!-- conversion 캐릭터를 기술했습니다. -->
    </layout>
    </appender>

    아래와 같은 형식으로 남습니다.

    2008-01-08 13:30:18,938 [10] DEBUG Log4NetSample.Window1 - Log4NetSample.Window1인스턴스 생성 됨
    2008-01-08 13:30:24,792 [10] DEBUG Log4NetSample.Window1 - OnButtonMouseDown 이벤트 발생!!
    2008-01-08 13:30:24,856 [10] ERROR Log4NetSample.Window1 - 에러 발생!!!
    System.FormatException: 입력 문자열의 형식이 잘못되었습니다.
    위치: System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number,
    NumberFormatInfo info, Boolean parseDecimal)
    위치: System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
    위치: System.Int32.Parse(String s)
    위치: Log4NetSample.Window1.button_Click(Object sender, RoutedEventArgs e) 파일 D:\Project2007
    \emodioroot\Samples\Log4NetSample\Log4NetSample\Window1.xaml.cs:줄 68



    출력 결과물 형식을 변경하기위해선 Conversion Character를 변경할 필요가 있는데요.
    이용가능한 Conversion Character 일람은 아래와 같습니다.

    Conversion Character Effect
    a Used to output the frienly name of the AppDomain where the logging event was generated.
    c

    Used to output the logger of the logging event. The logger conversion specifier can be optionally followed by precision specifier, that is a decimal constant in brackets.

    If a precision specifier is given, then only the corresponding number of right most components of the logger name will be printed. By default the logger name is printed in full.

    For example, for the logger name "a.b.c" the pattern %c{2} will output "b.c".

    C

    Used to output the fully qualified class name of the caller issuing the logging request. This conversion specifier can be optionally followed by precision specifier, that is a decimal constant in brackets.

    If a precision specifier is given, then only the corresponding number of right most components of the class name will be printed. By default the class name is output in fully qualified form.

    For example, for the class name "log4net.Layout.PatternLayout", the pattern %C{1} will output "PatternLayout".

    WARNING Generating the caller class information is slow. Thus, it's use should be avoided unless execution speed is not an issue.

    d

    Used to output the date of the logging event. The date conversion specifier may be followed by a date format specifier enclosed between braces. For example, %d{HH:mm:ss,fff} or %d{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is given then ISO8601 format is assumed (ISO8601DateFormatter).

    The date format specifier admits the same syntax as the time pattern string of the ToString.

    For better results it is recommended to use the log4net date formatters. These can be specified using one of the strings "ABSOLUTE", "DATE" and "ISO8601" for specifying AbsoluteTimeDateFormatter, and respectively ISO8601DateFormatter. For example, %d{ISO8601} or %d{ABSOLUTE}.

    These dedicated date formatters perform significantly better than ToString.

    F

    Used to output the file name where the logging request was issued.

    WARNING Generating caller location information is extremely slow. It's use should be avoided unless execution speed is not an issue.

    l

    Used to output location information of the caller which generated the logging event.

    The location information depends on the CLI implementation but usually consists of the fully qualified name of the calling method followed by the callers source the file name and line number between parentheses.

    The location information can be very useful. However, it's generation is extremely slow. It's use should be avoided unless execution speed is not an issue.

    L

    Used to output the line number from where the logging request was issued.

    WARNING Generating caller location information is extremely slow. It's use should be avoided unless execution speed is not an issue.

    m

    Used to output the application supplied message associated with the logging event.

    M

    Used to output the method name where the logging request was issued.

    WARNING Generating caller location information is extremely slow. It's use should be avoided unless execution speed is not an issue.

    n

    Outputs the platform dependent line separator character or characters.

    This conversion character offers practically the same performance as using non-portable line separator strings such as "\n", or "\r\n". Thus, it is the preferred way of specifying a line separator.

    p

    Used to output the level of the logging event.

    P

    Used to output the an event specific property. The key to lookup must be specified within braces and directly following the pattern specifier, e.g. %X{user} would include the value from the property that is keyed by the string 'user'. Each property value that is to be included in the log must be specified separately. Properties are added to events by loggers or appenders. By default no properties are defined.

    r

    Used to output the number of milliseconds elapsed since the start of the application until the creation of the logging event.

    t

    Used to output the name of the thread that generated the logging event. Uses the thread number if no name is available.

    u

    Used to output the user name for the currently active user (Principal.Identity.Name).

    WARNING Generating caller information is extremely slow. It's use should be avoided unless execution speed is not an issue.

    W

    Used to output the WindowsIdentity for the currently active user.

    WARNING Generating caller WindowsIdentity information is extremely slow. It's use should be avoided unless execution speed is not an issue.

    x

    Used to output the NDC (nested diagnostic context) associated with the thread that generated the logging event.

    X

    Used to output the MDC (mapped diagnostic context) associated with the thread that generated the logging event. The key to lookup must be specified within braces and directly following the pattern specifier, e.g. %X{user} would include the value from the MDC that is keyed by the string 'user'. Each MDC value that is to be included in the log must be specified separately.

    %

    The sequence %% outputs a single percent sign.

    이 글의 관련글
  • WPF 어플리케이션 트레이 아이콘으로 실행하기
  • WPF (Winsows Presentation Foundation) LifeTime :: WPF 어플리케이션 생명주기
  • Java 개발자 입장에서 바라본 .Net의 Delegate (2)
  • LINQPad를 이용하여 LINQ 편집하기 (1)
  • C# 레지스트리에 값을 쓰고, 읽고, 삭제하기
  • HitTest를 통한 마우스 아래의 컨트롤 구하기
  • WPF (Winsows Presentation Foundation) Class Hierarchy
  • 2008/01/08 13:42 2008/01/08 13:42
    Trackback Address:http://www.yunsobi.com/blog/trackback/299
    1. 2010/08/01 18:33
      item 36, 닷넷 런타임의 진단기능을 활용하라 Tracked from 최익필의 이름없는 블로그
    1. 좋은 정보 감사합니다.

    [로그인][오픈아이디란?]