IT 살이 썸네일형 리스트형 [연재 01] XAML Browser Application- 사설(辭說)하기 XAML Browser Application- 사설(辭說)하기 이전의 Windows Forms 애플리케이션은 주로 기본적으로 2가지의 형태의 애플리케이션을 제작하는데 사용했다. ▶설치 애플리케이션(Installed Application) ▶컨트롤 라이브러리(Control Library) .NET3.0의 WPF(Windows Presentation Foundation)애플리케이션에는 여기에 하나의 타입이 더 추가된다. ▶XAML(‘재믈’) 브라우저 애플리케이션(XAML Browser Applications) 이 타입의 애플리케이션을 줄여서 XBAP('엑스밥')이라고 발음한다. 한때는(지금도) “WBA(‘우바’, Web Browser Application)”라고 한 적도 있었다. 이 XBAP 타입은 .NET.. 더보기 시스템시작 또는 사용자가 로그인시 자동으로 프로그램 실행시키기 출근해서 컴을 켜자 RSS리더기의 알림창이 쑤욱 올라온다. 누가 블로그에 포스트를 새로 하나 올린 모양이다. 제목을 클릭해서 해당 블로그로 가 보니 다음과 같은 내용이 있다. 시스템을 시작하거나 또는 사용자가 로그인하면 자동으로 어떤 일을 할 수 있도록 설정할 수 있다는 것인데, 유용한 팁이 될 것 같아 이곳에 캐시해둔다. 원본 주소는 이곳(http://blogs.msdn.com/junfeng/archive/2006/09/19/761765.aspx)을 참조하면 된다. 참고로 달봉이 노트북의 레지스트리 키 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 을 보면 다음처럼 컴이 부팅될때 시작되는 프로그램들이 등록되어 있는 것을 볼 수 있다... 더보기 13 Where Are We? 이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. WPF 애플리케이션 모델은 매우 유연하다. 기본적으로 독립형 애플리케이션과 브라우저 호스팅 애플리케이션을 만들수 있고 그리고 애플리케이션 모델은 메뉴 스타일과 하이퍼링크 스타일의 네비게이션을 지원하다. 또한 애플리케이션의 컨텐트는 애플리케이션 어셈블리나 또는 참조되는 어셈블리에 패키징될 수도 있고 또는 자유로운(loose) 파일로서 여러 곳에 위치할 수도 있다. 결론적으로 말하면, WPF 애플리케이션 모델이 만들어내는 사용자 경험은 풍부하다. 개발자의 선택에 의해서만 제한될 수 있다. ----------------------------------------------------------------------- Michael Weinha.. 더보기 12 PageFunction 이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. 이처럼 컨텐트가 다양한 곳에서 올 수 있고, 하이퍼링크 기반의 애플리케이션에서는 다른 어떤 곳으로의 네비게이션을 허락하기 때문에 어떤 태스크를 완수하기가 어려워질 수 있다. 하이퍼링크 기반의 애플리케이션은 사용자들을 특정 페이지에 국한시키는 것이 쉬운 문제가 아니기 때문이다. 애플리케이션이 하이퍼링크를 제공하는가 여부에 상관없이 사용자들은 브라우저의 주소창을 이용해서 어떤 페이지로든지 이동할 수 있다. 결과적으로 사용자는 아직 태스크가 완료되지 않은 상태에서 태스크를 시작했던 페이지를 떠나버릴 수 있다. Web에서는 세션 상태 등을 이용해서 다이얼 로그 창 스타일을 만들어 낼 수 있는 많은 트릭이 있지만 불행히도 많은 부하가 걸리는 작업.. 더보기 11 WPF 리소스 이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. 지금까지 애플리케이션 어셈블리에 임베딩되는 페이지드에 대해서 이야기했다. 그러나 컨텐트는 다양한곳으로부터 로딩될 수 있다. 소스 코드가 있는 어셈블리에 같이 포함(embedding)되어 있을 수도 있지만 참조되는 어셈블리에 있을 수도 있고, 또는 어셈블리에 포함되어 있지 않은 다른 자유로운 파일(loose file)들로 되어 있을 수도 있다. 그런 자유로운 파일들은 로컬 디스크, 파일 공유 서버, 또는 웹 사이트에 있을 수 있다. 그리고 컨텐트가 어셈블리에 포함되어 있든 자유로운 파일로 존재하든간에 그것이 꼭 페이지(Page)일 필요는 없다. 컨텐트는 이미지, 비디오, 오디오 같은 다양한 미디어를 가질 수 있다. 그리고 컨텐트는 반드시 .. 더보기 10 Frame 이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. Frame은 다른 스타일의 네비게이터(독립형 또는 브라우저 기반, 메뉴 기반 또는 하이퍼링크 기반) 가 호스팅하는 컨텐트에 브라우저 스타일의 사용자 경험을 포함시킬 수 있다. 그것의 유연성을 고려해서 개발자는 Frame을 사용하는 방법을 결정할때는 의도된 사용자 경험에 맞도록 잘 결정해야 한다. 독립형, 메뉴 기반의 애플리케이션은 도움말 파일 같은 문서 스타일의 컨텐트로 네비게이팅하는 적절한 모델이 되지 못한다. 대신에 그림 10처럼 하이퍼링크 방식이 좀더 적절할 것이고 쉽게 독립형 애플리케이션의 윈도우(Window)에 임베딩될 수 있을 것이다. 그림 10 독립형 윈도우에서의 브라우징 가능한 컨텐트 이것은 다음과 같은 마크업으로 가능하다.. 더보기 09 XAML Browser Applications 이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. NavigationWindow, Page, 그리고 Hyperlink는 독립형 애플리케이션에서 브라우저 스타일의 사용자 경험을 제공해 줄 수 있는 좋은 방법이다. 비록 즐겨찾기, 브라우징 탭과 같은 장식용 기능들을 가지고 있지는 않지만 NavigationWindow는 어떤 의미에서는 하나의 브라우저이다. 많은 사용자들이 브라우저에 익숙해져 있기 때문에 브라우저와 같은 기능들 또는 브라우저와 통합될 수 있는 애플리케이션에 좀 더 편안함을 느끼게 될 것이다. 만약 애플리케이션이 브라우저의 호스팅을 받고 하이퍼링크가 기반이 되는 환경을 제공받을 수 있다면 그곳이 바로 WPF XAML 애플리케이션(XBAP)이 가야 할 방향일 것이다. 예제 애플리.. 더보기 08 NavigationService 이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. WPF에서 NavigationService를 이용하면 앞에서와 같은 페이지와 페이지 호스트간의 서로 독립적인 관계를 이룰 수 있다. NavigationService는 네비게이션, 네비게이션 히스토리, 네비게이션 생명주기(lifetime)등을 포함한 네비게이션 엔진의 기본적인 기능들을 구현하고 있다. 다음은 NavigationService타입의 주요 멤버들을 보여주고 있다. sealed class NavigationService : IContentContainer { // Navigation public bool Navigate(Uri source); // Navigate to URI public void Refresh(); // Re-n.. 더보기 07 NavigationWindow 이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. 지금쯤이면 몇가지 의문 사항들이 있을 수 있을 것이다. Page가 윈도우는 아니라고 했다. 그렇다면 그것을 호스팅하는 윈도우는 어디서 왔는가? 하이퍼링크를 클릭하면 그 네비게이션을 실제로 처리하는 것은 무엇인가? 그리고 어떻게 해서 HTML 웹 페이지가 WPF 애플리케이션에서 출력될 수 있게 되는가? 이 모든 것을 담당하는 것은 NavigationWindow이다. Application.StartupUri 속성이 XAML 또는 HTML 페이로 설정되면 Application(이 페이지들은 자신들을 호스팅할 윈도우가 없다는 것을 알고 있다)은 그것들을 호스팅할 NavigationWindow 인스턴스를 생성한다. NavigationWindow는.. 더보기 06 Hyperlink 이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. 문서의 모든 차례를 보려면 SmartClient3.0 카테고리를 참조하기 바란다. 하이퍼링크 기반의 애플리케이션은 하나 이상의 XAML 페이지를 갖게 될 것이고 사용자들에게 이런 페이지들간에 네비게이트할 수 있는 방법을 제공할 필요가 있을 것이다. 해서 WPF는 Hyperlink 클래스를 제공하고 있다. ... Ordering Guidelines ... Hyperlink는 HTML의 HREF와 동일한 프로그래밍 모델을 사용하여 다른 XAML 페이지로 네비게이트할 수 있다. 개발자는 이동할 대상 페이지의 URI(이 경우는 OrderingGuidelinesPage.xaml)와 그리고 사용자들이 보고 클릭할 수 있는 텍스트(이 경우는 "Ord.. 더보기 05 Page 이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. Page는 웹을 대중화시키는데 일조를 한 HTML웹 페이지에 대응되는 WPF 버전이다. 이전에 언급한 것처럼 하이퍼링크 기반의 네비게이션은 독립형과 브라우저형 애플리케이션 모두에서 지원된다. WPF에서 하이퍼링크 네비게이션 경험의 기본이 되는 컨텐트가 바로 Page이다. Visual Studio 2005의 프로젝트에서 Project | Add New File | Page(WPF)를 선택하면 마크업과 코드 비하인드로 된 Page를 프로젝트에 추가할 수 있다. 이때 다음과 비슷한 코드가 생성된다. ... ... // HomePage.xaml.cs (codebehind) using System.Windows.Controls; // Page p.. 더보기 04 Window 이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. 문서의 모든 차례를 보려면 SmartClient3.0 카테고리를 참조하기 바란다. WPF에서 윈도우는 Window로 구현된다. Window는 항상 독립형 애플리케이션에서는 컨텐트를 호스팅하는 기본적인 단위가 되어 왔다. Visual Studio 2005에서 Project | Add New Item | Window(WPF) 를 선택하면 Window가 하나 프로젝트에 추가된다. 더보기 03 애플리케이션 타입(Application Type) 이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. 그림 1과 같은 간단한 예제 박스 애플리케이션을 생각해보자. 독립형의 메뉴 기반 애플리케이션으로서 사용자들은 필요한 박스들의 목록을 보고 주문하고 주문을 삭제할 수도 있다. 이런 사용자 경험을 제공하기 위해서, 애플리케이션 제작의 가장 기본적인 것부터 시작할 필요가 있다 : 애플리케이션 생성. 그림 1 박스 애플리케이션 윈도우 기반의 애플리케이션은 몇가지 표준적인 기반 구조를 가지고 있다 : 엔트리 포인트와 메시지 루프. 그리고 다음과 같은 공통적인 애플리케이션 서비스가 필요할 수도 있다. l 커맨드 라인 파라미터 처리 l 종료 코드(exit code) 반환 l 애플리케이션 영역의 상태 l 처리하지 않은 예외 처리 l 애플리케이션 생명주.. 더보기 02 사용자 경험(User Experience) 이 포스트는 MSDN 메거진에 실린 아티클을 번역한 글의 일부이다. UX(사용자 경험)은 애플리케이션의 컨텐트와 그것을 호스팅하는 방법이다. WPF에서는 일반 컨트롤,2D, 3D 그래픽 그리고 애니메이션, 데이터바인딩, 레이아웃, 템플릿등을 사용해서 컨텐트를 출력한다. 그러나 사용자가 그 컨텐트를 보고 그것과 상호 작용을 할 수 있도록 호스팅이 되기 전까지는 거의 쓸모가 없다. 윈도우 애플리케이션에서는 바로 애플리케이션이 컨텐트를 패키징하고 윈도우를 통해서 그것을 출력한다. 이곳이 바로 ‘애플리케이션 모델’ 개념이 등장하게 되는 문맥이다. 즉 컨텐트 패키징과 출력 방법에 따라 애플리케이션 모델이 구분될 수 있다는 것이다. WPF 애플리케이션은 두 가지 타입으로 구분될 수 있다. : 독립형(standalo.. 더보기 01 WPF로 사용자 경험(User Experience) 높이기 Build A Great User Experience With Windows Presentation Foundation 이번 포스트는 MSDN 매거진 10월에 실린 아티클을 번역(번역은 달봉이한테 무리이고 그냥 나름대로 해석한 것이다.)한 내용을 올려 볼려고 한다. Smart Client 애플리케이션은 역시나 WPF(Windows Presentation Foundation)을 알아야 한다. SmartClient 기술이 나오고 웹 브라우저도에서도 Windows Form 기술의 컨트롤들을 호스팅하고 그리고 Windows Forms의 WebControl에서는 웹 페이지를 불러와 보여주고 하는 것이 지금의 상황이다. 즉 동일한 컨텐트인데 그것을 호스팅하는 컨테이너만 Windows Form으로 하느냐 아니면 웹 .. 더보기 ClickOnce에서 변경되지 않은 어셈블리의 다운 여부 테스트 Q&A 게시판에 올라온 질문중에서 “ClickOnce 배포에서 애플리케이션을 게시할때마다(기본적으로 게시 버전은 계속 높아진다), 어셈블리는 변경이 없더라도 다시 다운받는가” 라는 질문이 있었다. 이에 대해서 간단히 테스트를 해 봤다. 달봉이의 테스트 노트북 환경은 이렇다. ▶.NET 2.0 설치 ▶HTTP를 통한 어셈블리 다운 관찰 툴 : IE Inspector(http://www.ieinspector.com/index.html) 테스트를 해 본 결과 ClickOnce 애플리케이션의 버전은 올라가도 그 구성 어셈블리들은 버전이 동일하면 다운되지 않음을 알 수 있었다. ■ 테스트 #1 : 최초 다운 로드 모습 먼저 로컬 머신에 이미 다운된 ClickOnce 어셈블리들을 mage.exe –cc 명령을 통해.. 더보기 [연재 03] 원격 데이터 읽기 때로는 원격에 있는 데이터 파일을 읽어야 하는 경우가 있다. 예를 들어 동적으로 생성되는 데이터를 미리 웹 서버에 캐싱해두고 클라이언트 머신에서 읽어 오려는 경우가 있을 것이다. 달봉이가 지금 참여하고 있는 프로젝트에서는, 클라이언트에서 시스템이 구동될 때 항상 데이터베이스에서 메뉴를 조회해와서 출력해주는 구조로 되어 있다. 그러나 시스템의 운영시에는 메뉴의 수가 너무 과도해져서 시스템의 구동 시간이 길어질 것으로 예상되고 있다. 해서 메뉴가 변경될때마다 XML형태로 해서 웹 서버에 저장해놓고 클라이언트의 시스템이 구동될 때 그 파일을 바로 읽어 오는 방식을 고려하고 있다. 이 포스트에서는 이런 경우 사용할 수 있는 .NET의 API를 소개한다. HTTP를 통해서 원격의 파일 접근하기 다음은 웹 서버에 .. 더보기 [연재 02] 로컬 데이터 파일 읽기 앞의 포스트에서는 ClickOnce 배포로 로컬 PC에 데이터 파일을 저장하는 방법에 대해서 알아봤다. 이번에 그 저장된 파일을 읽는 방법에 대해서 알아본다. 2. 로컬 데이터 파일 읽기 ClickOnce 애플리케이션과 함께 배포되는 데이터 파일은 데이터 디렉토리(Data Directory)에 저장되는데, 그 디렉토리 경로는 애플리케이션 인스톨시 동적으로 결정된다고 했다. 따라서 직접적으로 그 물리적 경로를 기반으로 해서는 그 파일을 읽어들일 수 없다. 그래서 .NET 프레임워크에서는 데이터 파일이 저장되는 데이터 디렉토리에 접근(Read/Write)할 수 있는 API를 제공하고 있다. 데이터 디렉토리에서 읽고 쓰기 우선 데이터 디렉토리에서 파일을 읽고 쓰기 위해서는 ClickOnce 애플리케이션에는 디.. 더보기 [연재 01] 데이터 파일, ClickOnce 애플리케이션과 함께 배포하기 ClickOnce 애플리케이션을 작성하다 보면 텍스트 파일, XML 파일 또는 MS 액세스 DB 파일(.mdb)같은 데이터 파일을 각 클라이언트로 배포할 필요도 생기게 된다. 이번 포스트에서는 이런 데이터 파일을 ClickOnce에 포함시켜 클라이언트로 배포하는 방법을 알아본다. 그리고 클라이언트 애플리케이션에서 그 데이터 파일에 접근하는 방법을 알아본다. 1. 데이터 파일, ClickOnce 애플리케이션과 함께 배포하기 ClickOnce 애플리케이션이 클라이언트 PC에 인스톨되면 각 버전의 애플리케이션마다 자신만의 데이터 디렉토리(Data Directory)를 할당받게 된다. 데이터 디렉토리 경로가 미리 정해지지는 않는다. 애플리케이션마다 인스톨될 때 동적으로 정의된다. VS.NET의 배포 디자이너 폼.. 더보기 [연재 06] 서비스 컨트랙트 정의하기 혹시 여러분은 Windows Live Writer라는 프로그램을 아시나요? 브라우저를 통해서 블로그에 직접 로그인하지 않고도 이 프로그램에서 포스트를 작성해서 바로 블로그로 글을 올릴 수 있습니다. 호오 정말 편합니다. 한번 이 프로그램을 검색해서 알아보세요. 마이크로소프트에서는 이 프로그램에 대한 SDK를 배포하고 있습니다. 직접 애플리케이션에서 이런 기능을 구현할 수 있다는 것이죠. 호오...지금 이 포스트도 이 프로그램으로 작성해서 올리고 있습니다. 서비스 컨트랙트를 정의한다는 것은 외부로 노출되는 전체 서비스에 대한 왁구(토목 현장에서 많이 쓰는 말이다 -_-;)를 만드는 일이라고 볼 수 있다. 메타 정의(?)라고나 할까. 구현(implementation)과는 구분되는 단계이다. 서비스 컨트랙트는.. 더보기 이전 1 ··· 9 10 11 12 13 14 15 16 다음