다운로드가 완료되면 설치 후 EM을 실행합니다.
평가판 이기에 계속 버튼을 클릭하고 진행합니다.
이제 몇 가지 이미지를 추가해서 웹 문서 형태의 포토 갤러리를 생성해 보겠습니다.
로컬 컴퓨터에 있는 이미지 몇 장을 선택합니다.
선택한 이미지를 Expression Media에 끌어다 놓습니다.
아래의 이미지 처럼 작업 영역에 사용할 미디어 파일이 추가되어 있는 것을 확인할 수 있습니다.
Expression Media 상단 메뉴에서 "만들기"를 선택하고 HTML 갤러리를 선택합니다.
그러면 HTML 옵션창이 활성화 됩니다.
테마탭의 사이트 제목란에 적당한 이름을 적어 줍니다. 그리고 바로 아래에 있는 테마 선택상자에서 원하는 테마를 선택합니다. 저는 '깔끔'을 선택 했습니다.
다음으로 인덱스 테이블이나 축소판 그림 그리고 미디어를 원하는대로 선택합니다.
설정 탭에서는 출력되는 문서 속성을 설정합니다.
문서의 확장명을 무엇으로 할 것인지 동영상이 포함되어 있는지 등을 선택합니다.
그 다음 왼쪽 하단에 있는 옵션 버튼을 클릭하여 저장할 이름을 결정합니다.
서버 탭에서는 FTP 설정을 통해 원격 저장을 가능하게 해줍니다.
설정이 모두 끝났으면 만들기 버튼을 선택합니다.
문서가 생성될 적절한 폴더를 선택하고 확인 버튼을 클릭합니다.
아래의 그림과 같은 웹 사이트가 생성되었습니다.
화면의 쎔네일 이미지를 클릭해 봅니다.
그러면 큰 이미지를 가지고 있는 페이지로 전환되고, 큰 이미지를 보여주는 화면에서 다른 화면으로의 이동이 쉽도록 상단에 네비게이션이 제공되는 것을 확인할 수 잇습니다.
전에 이런 간단한 형태의 문서를 만들 때는 웹 문서를 만드는데 필요한 기술을 알아야지만 원하는 결과물을 만들어 낼수 있었습니다. 그러나 Expression Media는 Rich한 웹 문서를 전문적인 기술이 없어도 너무나 쉽게 만들어 줍니다.
문서가 생성된 디렉토리를 보면1개의 HTML 파일과 3개의 폴더를 확인할 수 있습니다.
index.htm은 생성된 문서이고, assets 폴더에는 자바스크립트 파일과 네비게이션에 필요한 이미지 아이콘들이 포함되어 있습니다. preview 폴더에는 웹 갤러리가 생성될 때 메인 페이지에 노출될 썸네일 이미지가 생성되어 있습니다. Source 폴더에는 큰 이미지를 보여주는 웹 문서와 원본 이미지가 포함되어 있습니다.
사용자 입맛에 맞게 꾸밀려면 약간의 작업이 필요하겠지만 그럴 필요없이 테마만으로 충분하다면 단지 사진 몇장 드래그와 버튼 몇개 클릭만으로 웹 갤러리를 만드는 Expression Media의 기능이 매우 만족스럽습니다.
10월 8일에 Microsoft UX/RIA Partner Workshop에 참석했었습니다. 파트너는 아니지만 그냥 Silverlight에 관심 있는 개발자 입장으로요. ^^; REMIX08에서도 거론되고 Silverlight의 좋은 기능으로 많이 소개되었던 II7-Bit Rate Throttling (UXKOREA), 쉽게 구현할 수 있는 미디어플레이어 (훈스닷넷), Cross Domain 설정, Silverlight Deep Zoom기능 등 여러 기능들이 소개되었습니다. 각 기능들에 대해서 링크를 걸어두었으니 관심을 가지시고 읽어 보시기 바랍니다. Deep Zoom 소개는 영어로 소개하지만 영상도 있으니 가볍게 동영상을 보셔도 좋을 것 같습니다. ^^
세미나 후기라도 써보려고 오래된 똑딱이 디카도 가져가서 사진도 찍고 그랬는데 벌써 10월 말이니…-ㅅ-; 마지막에 경품을 받지 못해서 그런가 봅니다. 속으로는 ‘오~오~오~ 드뎌 경품 추첨이다.’ 라고 기대는 매번 하는데…표정은 티 안내고 앉아 있지만. ㅋㅋ 이번에도 아쉬움을 갖고 돌아왔습니다.
이번 시간에는 Expression Blend를 이용하여 간단한 Silverlight 시계를 만들어 보겠습니다. 먼저 개발을 위해 아래 파일들을 설치하시기 바랍니다. (Silverlight 다운로드페이지)
우선 아래 그림과 같이 시계의 표면 및 이음 홈, 테두리, 그림자를 포함한 그래픽을 디자인해보겠습니다.
아래 절차를 따라 Expression Blend에서 새 프로젝트를 만듭니다.
1. Expression Blend를 실행합니다.
2. 메뉴의 파일, 새 프로젝트를 차례로 클릭하여 새 프로젝트 대화 상자를 띄웁니다.
3. 이름 상자에 원하는 Silverlight 애플리케이션 이름을 입력합니다.
4. 언어 상자에 Visual C#을 선택합니다.
5. Silverlight 2 애플리케이션을 선택하고 확인을 클릭합니다.
여기서 F5키를 한번 눌러볼까요? 이걸 누르면 브라우저 창이 하나 열리면서 웹 페이지가 열립니다.
이 때 확인하실 것이 하나 있습니다. 제가 현재 Silverlight 2 RTW를 설치해놓고 Expression Blend June Preview 버전을 사용하고 있는데, 필요한 Silverlight 버전은 베타 2 버전입니다. 저와 같은 환경을 가지고 있으시면 이전 버전의 파일을 삭제하시고 베타 2 버전을 설치하시기 바랍니다. 살짝 귀찮긴 하네요~^^;
Silverlight 2 애플리케이션 새 프로젝트를 만들었고 다음으로는 시계의 그림자 부분을 디자인해보겠습니다.
1. Blend의 도구 상자에서 타원 (Ellipse)을 선택합니다. (처음은 사각형만 보이지만 마우스를 길게 클릭하거나 오른쪽 마우스 버튼을 클릭하면 다른 도구도 추가로 표시됩니다.)
2. 하얀 캔버스에 타원을 드래그 & 드롭을 하여 대략 330픽셀 너비와 높이의 원을 그립니다.
3. Blend 우측 상단에 속성 탭을 선택하여 Fill을 선택합니다. 단색 브러시를 확인한 후 검정색으로 채우고 Opacity를 30%로 변경합니다. ②, ④번은 싱크되어 있습니다. ④번에 black으로 입력하시면 16진수 값으로 변경이 되고 ②번 Fill부분도 함께 변경이 됩니다. (아래 그림 참고)
4. 개체 및 타임라인 창에서 타원 이름을 shadowEllipse로 변경합니다.
이제 그림자는 완료하였습니다. 아주 간단하지요? 그럼 다음으로 시계 테두리를 그려 보겠습니다.
1. 그림자 원 shadowEllipse를 복사하여 동일한 크기의 원을 하나 더 만듭니다. shadowEllipse를 선택하여 CTRL+C와 CTRL+V (copy & paste)합니다. 이 원의 이름은 outerRimEllipse로 지정합니다.
2. 테두리 원에는 그라데이션을 지정합니다. 먼저 개체 및 타임라인 창에서 outerRimEllipse를 선택합니다. 모양 창에서 Opacity는 100%로 지정하고 브러시 창에서 Fill을 선택하고 그라데이션 브러시를 선택합니다.
3. 좌에서 우로 그라데이션 방향을 변경합니다. 먼저 도구 상자에서 브러시 변형을 선택합니다.
응용 프로그램을 구축하기 위해 Visual Studio 2008을 사용하고 있다는 것으로 가정합니다. MSBuild를 사용하여 Visual Studio 없이도 Silverlight-기반 응용 프로그램을 만들 수 있습니다. 좀 더 자세한 정보는 Silverlight 응용프로그램어셈블리개발을 참고하세요.
Silverlight-기반 응용 프로그램은 HTML 페이지에서 Silverlight 플러그-인에 의해 로드됩니다. HTML 페이지를 Silverlight 플러그-인으로 전체를 채우거나 페이지의 일부에만 사용할 수도 있습니다. 기본적으로 Visual Studio 프로젝트에서는 페이지의 width와 height 값을 100%로 차지하는 플러그-인을 만들 것입니다. 좀 더 자세한 내용은 Silverlight 플러그-인예시 (Silverlight 2)를 참고하시기 바랍니다.
응용 프로그램의 일부에만 Silverlight를 적용한다면, Silverlight 코드와 관리되는 코드에서 HTML 페이지로 호출할 수 있습니다. 이를 수행하는 방법의 자세한 사항은 HTML 연결: HTML과관리되는코드에서상호작용를 참고하시기 바랍니다. ASP.NET 페이지가 있다면, 여러분의 페이지에 MediaPlayer컨트롤 또는 Silverlight서버 컨트롤을 포함시킬 수 있습니다. 이에 대해 자세한 정보는 ASP.NET 웹페이지와 Silverlight 통합을 참고하시기 바랍니다.
XAML
XAML은 Silverlight 기반 응용 프로그램의 UI를 정의하는 선언적 마크업 언어입니다. 새로운 Visual Studio 프로젝트를 만들 때, Page.xaml 파일이 동적으로 만들어집니다. XAML 파일에 XML을 사용하여 특성들을 정의하고 개체를 만들 수 있습니다. XAML에 대한 좀 더 자세한 정보는 XAML 개요 (Silverlight 2)를 참고하세요.
Silverlight 응용 프로그램 추가 창의 옵션을 이 프로젝트 안에 Silverlight를 호스팅할 HTML 테스트 페이지를 동적으로 생성으로 선택하고 Silverlight 프로젝트를 생성합니다. 그리고 Page.xaml 파일을 열어 Grid엘리먼트 안쪽에 아래 코드를 작성합니다.
XAML
<Rectangle Fill=”Red” Width=”150” Height=”100”/>
Ctrl + F5 키를 눌러 실행하거나 미리보기 창에서 빠르게 아래와 같은 결과를 확인합니다.
UI를 만들기 위해 XAML 파일을 직접 작성하거나 Microsoft Expression Blend를 사용할 수 있습니다. Expression Blend는 Silverlight-기반 응용 프로그램을 만들 수 있는 WYSIWYG 디자인 툴입니다. Expression Blend는 직접 편집할 수 있는 XAML 파일을 생성하고 Expression Blend로 코드-비하인드 파일을 작성하고 이벤트를 연결할 수도 있습니다. 좀 더 자세한 정보는 Microsoft Expression Blend를사용한 Silverlight 퀵스타트를 참고하시기 바랍니다.
레이아웃
Silverlight는 UI 레이아웃에 해당하는 3가지 패널을 제공합니다. 그 중 기본적 패널인 Grid는 가장 확장성이 있는 강력한 레이아웃 패널입니다.
Silverlight 컨트롤은 컨텐트나 다른 컨트롤을 호스트하는 것과 상태가 변경되는 디스플레이를 나타내는데 사용합니다. 컨트롤은 Button이나 TextBox같은 사용자 상호 작용이 가능한 엘리먼트에서 DataGrid같은 정보의 복잡한 레이아웃 엘리먼트까지 기능적으로 사용 가능합니다. 모든 컨트롤의 목록은 컨트롤갤러리에서 보실 수 있습니다.
Silverlight는 컨트롤이 어떻게 보여져 영향을 주는 각 컨트롤을 위한 기본 템플릿으로 나타납니다. 그러나 여러분은 모든 컨트롤의 외관과 시각 움직임을 변경하여 사용자 지정 템플릿을 만들 수 있습니다. 좀 더 자세한 정보는 컨트롤사용자지정화를 참고하시기 바랍니다.
아래 예제는 이 전 예제에서 grid의 0,0 셀에 button 하나를 추가하여 만듭니다.
기본적으로 여러분의 Visual Studio 프로젝트는 코드 파일 하나를 포함하고 있는데, 코드-비하인드 파일이라 부릅니다. 그 코드 파일은 C#이나 Visual Basic같은 공통 언어 런타임 (CLR)을 통해 Silverlight에 의해 지원되는 관리되는 언어 중 하나입니다. CLR과 Silverlight의 좀 더 자세한 정보는 공통언어런타임개요를 참고하세요.
코드-비하인드 파일 이름은 Page.xaml에 해당하는 Page.xaml.cs 같이 생성됩니다.. 코드-비하인드 파일은 XAML 개체에 로직을 적용할 수 있습니다. 코드에 UI 개체를 만들 수 있고 여러분의 시각 엘리먼트 트리에 그것들을 추가할 수 있습니다. 그리고 코드-비하인드 파일에서 (또한 프로젝트에 포함된 어떤 코드 파일에도) 만들어진 클래스는 XAML로부터 액세스될 수 있습니다. 예를 들어, 자신의 컨트롤을 정의하고 그 다음 XAML에 그 인스턴스를 만들 수 있습니다. 좀 더 자세한 정보는 XAML Namescopes (Silverlight 2)와 XAML and Mapping Custom XML Namespace Values (Silverlight 2)를 참고하시기 바랍니다.
Silverlight는 Silverlight-기반 응용 프로그램을 작성하기 위한 파이썬 (Python)과 루비 (Ruby) 같은 동적 언어의 사용자를 가능하게 하는 동적 언어 런타임 (DLR)을 포함합니다. 동적 언어는 어셈블리로 컴파일하지 않는 소스 코드로 패키지화 되어 있고 코드는 실행 때 컴파일 되고 생성될 수 있습니다. 그것들은 확장성, 상호적 개발 형식이 적절합니다. Silverlight는 3개의 동적 언어를 포함합니다: IronPython과 IronRuby, 관리되는 Jscript. 좀 더 자세한 정보는 Silverlight 2 동적언어를 참고하세요.
여러분은 여러분의 응용 프로그램에 이미지와 이미지 효과들을 추가할 수 있습니다. Silverlight는 또한 쉽게 줌을 사용하고 크게 상세한 이미지를 회전을 허용하는 Deep Zoom을 포함합니다. 좀 더 자세한 정보는 이미지 (Silverlight 2)와 Deep Zoom을 참고하시기 바랍니다.
많은 Silverlight-기반 응용 프로그램은 데이터와 함께 작동합니다. 여러분은 DataGrid와 ListBox같은 컨트롤을 사용하여 데이터 셋을 나타낼 수 있습니다. UI를 두기 위해, 여러분은 Data Binding을 사용할 수 있습니다. 여러분의 데이터 개체에 여러분의 UI를 바인딩한다면, 동적으로 개체에 업데이트는 여러분의 UI에 전달됩니다.
데이터는 RSS 피드 같은 다양한 소스로부터 여러분의 응용 프로그램으로 나타날 수 있지만 대개 그것은 XML 포맷에 있습니다. Silverlight는 XML 데이터 파싱을 위해 XmlReader와 LINQ를 포함하고 있습니다. LINQ는 여러분이 작게 데이터 조각을 파싱한다면 장점을 가지고 있습니다. 좀 더 자세한 정보는 Silverlight에 XML 데이터파싱을 참고하세요.
네트워킹
Silverlight는 네트워크에서 통신을 위해 몇몇의 기능을 제공합니다. WebClient클래스는 클라이언트에 다운로드 되는 컨텐트를 처리합니다. 여러분은 또한 Plain XML 메시지를 보내고 받기 위해 WebClient를 사용할 수 있습니다. 또한 여러분의 Silverlight-기반 응용 프로그램은 Windows Communication Foundation (WCF)와 SOAP, ASP.NET AJAX 같은 웹 서비스를 액세스할 수 있습니다. 좀 더 자세한 정보는 네트워킹과통신을 참고하세요.
Silverlight Base Class Library
Silverlight는 문자열 처리와 컬렉션 작업, 예외 처리 같은 핵심 프로그래밍 업무를 위한 .NET Framework 부분 집합으로 나타납니다. 그것은 모든 기본 데이터 형식을 위한 클래스와 예외 처리, 이벤트와 이벤트 처리, 컬렉션, 쓰레딩, 동기화를 포함합니다. 좀 더 자세한 정보는 Silverlight에서 Common Language Runtime 및 Base Library를 참고하세요.
먼저, 생성할 테스트 페이지에 버튼 및 텍스트 박스, 등의 HTML 엘리먼트를 추가할 것입니다.
1. Visual C#의 Silverlight 응용 프로그램 프로젝트 하나를 만듭니다. 솔루션에 컨트롤을 호스팅할 새 웹 추가 옵션이 선택되어진 것을 확인합니다. 저는 프로젝트 이름을 EloiHtmlDom으로 설정하였습니다. (참고: Silverlight 응용프로그램만들기)
2. 시작 페이지를 HTML 테스트 페이지로 설정하고 소스뷰를 엽니다.
시작 페이지 설정은 EloiHtmlDomWeb의 마우스 우측 클릭하여 속성 페이지 – 시작 옵션에서 변경 가능하며 간단히 HTML 테스트 파일에 마우스 우측 클릭하여 시작 페이지로 설정으로도 변경 가능합니다.
속성 페이지에서 설정하는 화면
시작 페이지로 설정을 이용한 설정
3. <object>태그를 찾아 height속성을 “100%”에서 “10%”로 변경합니다.
4. </iframe> 태그 뒤에 다음 HTML 코드를 추가합니다. 이 코드에는 두 개의 버튼과 텍스트 박스 세 개를 포함하고 있습니다.
<div id=”basic1”>
<h3> Silverlight 관리되는 코드로 HTML 버튼 다루기</h3>
<hr />
<strong>첫 번째 텍스트 박스의 텍스트를 두 번째 텍스트 박스에 대문자로 변경</strong><br />
5. 응용 프로그램을 실행 시키면(ctrl + F5 키를 이용하여 디버깅을 사용하지 않고 실행 시킵니다.) 대문자 처리 버튼과 속성 가져오기 버튼, 텍스트 박스 3개를 볼 수 있습니다. 먼저 첫 번째 텍스트 박스 에 대해서 다루려고 합니다. 현재 value는 없고 disabled 상태입니다.
관리되는 클래스에서 HTML 페이지 연결하기
관리되는 클래스에서 HTML 페이지에 연결하기 위해 먼저 Page 생성자에서 참조를 초기화 합니다.
1. 코드 비하인드 파일을 (Page.xaml.cs) 열어 Page클래스를 찾습니다.
2. using키워드를 사용하여 System.Windows.Browser 네임스페이스를 추가합니다.
3. HtmlDocument타입의 클래스 레벨 _doc변수를 선언합니다.
4. Page생성자의 _doc변수를 초기화합니다.
현재 HTML 페이지의 인스턴스로 _doc 변수를 사용합니다.
namespace EloiHtmlDom
{
Public partial class Page : UserControl
{
private HtmlDocument _doc;
public Page()
{
InitializeComponent();
_doc = HtmlPage.Document;
‘
HTML DOM 속성에 액세스하기
다음은 첫 번 째 txtInput텍스트 박스의 속성을 동적으로 속성을 변경해보도록 하겠습니다.
1. Page생성자의 끝 부분에 다음 코드를 추가합니다.
HTML document object의 GetElementById메서드를 사용해서 disabled상태를 변경하고 새로운 값을 설정합니다.
CS
// Return for all pages except those ending in TestPage.html
if (_doc.DocumentUri.AbsoluteUri.EndsWith(“TestPage.html”) != true)
btnUC.AttachEvent(“onclick” new EventHandler<HtmlEventArgs>(this.OnUCtextClicked));
2. 대문자 처리 버튼의 onclick이벤트의 OnUCtextClicked라는 이벤트 핸들러를 작성합니다.
3. 이벤트 핸들러에서 HTML 엘리먼트의 속성을 읽거나 씁니다.
예를 들어, 다음의 OnUCtextClicked 이벤트 핸들러에서 SetAttribute와 GetAttribute메서드는 속성 값을 쓰고 읽기위해 txtInput과 txtOutput엘리먼트에서 사용됩니다. txtInput 엘리먼트에 입력된 텍스는 대문자로 변환되고 txtOutput엘리먼트의 value속성에 할당됩니다.
1. Visual Studio 2008을 열어 파일– 새 프로젝트를 선택합니다. 프로젝트 형식을 Silverlight로 선택하고 Silverlight 응용 프로그램 템플릿을 선택합니다.
2. 프로젝트 이름을 원하는 것으로 입력하시고 확인을 클릭합니다. 저 같은 경우는 EloiSyndication으로 하였습니다.
3. Silvierlight 응용 프로그램 추가 창에서 이 프로젝트 안에 Silverlight를 호스팅할 HTML 테스트 페이지를 동적으로 생성을 선택하고 확인을 클릭합니다.
Silverlight 응용 프로그램에서 Syndication 관련 작업을 위해 System.ServiceModel.Syndication.dll을 참조에 추가합니다.
1. 솔루션 탐색기에서 참조를 마우스 우측 클릭을 하여 참조 추가를 선택합니다.
2. 참조 추가 창의 .NET 탭에서 System.ServiceModel.Syndication을 선택하고 확인을 클릭합니다.
3. 아래 코드를 Page.xaml.cs 파일에 추가합니다.
using System.ServiceModel.Syndication;
using System.Xml;
다음은 syndication feed 요청을 위한 HTTP request를 만듭니다.
1. 먼저 이 컨트롤에서 액세스하기 원하는 syndification feed 하나를 찾아 그 주소를 메모해둡니다. 이 예제에서는 http://www.setisigns.net/rss를 사용하겠습니다. 크로스 도메인을 가능하기 위해 feed를 호스팅하는 도메인의 루트에 Clientaccesspolicy.xml이나 Crossdomain.xml 파일을 위치 시켜야합니다.
본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.
안녕하세요. 엘리 입니다.
이번 시간에는 HTTP 전송을 사용하여 Plain XML 메시지 (Plain Old XML 또는 POX 메시지라고도 부릅니다.)를 받는 방법에 대해서 알아보도록 하겠습니다.
POX 메시지는 SOAP으로 포장되지 않은 순수 XML 데이터로 이루어져 있고 SOAP 기반의 프로토콜을 지원하지 않는 여러 종류의 클라이언트 (예: 웹 브라우저)에서 주고 받게 됩니다. SOAP과 WS-* 외에 HTTP를 사용하여 통신할 때POX는 데이터를 전달받는 좋은 방법입니다.
그럼 바로 예제를 보도록 하겠습니다. 아래 예제는 WebClient 클래스를 사용하여 웹 서비스에 액세스합니다. 웹 서비스와 Silverlight 기반 응용 프로그램이 같은 도메인상에서 호스팅되면 웹 서비스와 Silverlight 기반 응용 프로그램을 원활히 사용할 수 있습니다. 웹 서비스와 통신하는 Silverlight 기반 응용 프로그램을 만들 때 Silverlight 컨트롤은 웹 서버로부터 서비스되는 웹 페이지 내에서 호스팅 되어야 합니다. 파일 시스템 (예: HTML 테스트 페이지)에서 웹 서비스와 통신을 하게 되면 보안 예외가 발생할 것입니다.
참고
현재WebClient클래스는 크로스 도메인을 지원하지 않습니다. 현재 릴리스된 WebClient는 같은 서버에서 웹 서비스와 Silverlight 기반의 응용 프로그램이 호스팅되어야 합니다. 웹 서비스와 Silverlight 기반 응용 프로그램이 다른 도메인에서 호스팅되고 있으면 웹 서비스에 크로스 도메인이 가능하게 XML Policy 파일이 있어야 합니다. 좀 더 자세한 정보는 MSDN에서 How to: Make a Service Available Across Domain Boundaries를 참고하시기 바랍니다.
다음은 XML로 결과가 리턴되는 웹 서비스에 액세스하는 방법에 대해서 소개합니다.
1. Silverlight 프로젝트 하나를 만듭니다. Silverlight 응용 프로그램 추가 창에서 솔루션에 컨트롤을 호스팅할새 웹 추가를 선택합니다. 이 프로젝트 안에 Silverlight를 호스팅할 HTML 테스트 페이지를 동적으로 생성 옵션을 선택하면 보안 관련 예외 발생이 일어납니다. (참고: Silverlight 응용프로그램만들기)
2. Silverlight 프로젝트에서 System.Net 어셈블리에 참조를 가지고 있는 확인합니다.
그리고웹 서비스를 호출하기 위해 System.Net의 클래스들이 필요하므로 Page.xaml.cs 파일에서 System.Net 네임스페이스가 추가되었는지 확인합니다.
3. 웹 서비스를 호출하기 위해 WebClient를 만들고 DownloadStringAsync(Uri)메서드를 호출합니다. 호출하기 원하는 웹 서비스에 파라미터로 URI를 전달합니다.
4. 웹 서비스 호출의 결과값을 알기 위해, 웹 클라이언트에 DownloadStringCompleted 이벤트를 사용합니다. 그리고 웹 서비스 결과값을 얻기 위해 DownloadStringCompletedEventArgs의 Result속성을 사용합니다. 결과값을 추가로 처리하거나 단지 사용자에게 결과값을 보여주기만 할 수도 있습니다. 웹 서비스 호출에 에러가 발생했는지 알기 위해서 이벤트 인수의 Error속성을 사용합니다.
다음 예제는 Digg 웹 서비스에 요청을 보내는 방법과 XML로 응답을 돌려받는 방법에 대해서 보여줄 것입니다. 텍스트 박스에 숫자를 입력하고 버튼을 클릭하면 응답으로 XML을 볼 수 있습니다. Digg 웹 서비스가 다른 도메인에 있더라도 Digg 웹 서비스가 크로스 도메인을 호출을 지원하기 때문에 이 요청은 작동할 것입니다.
원글출처 : http://silverlight.net/Quickstarts/BuildUi/SplashScreen.aspx 본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.
안녕하세요 엘리 입니다.
이 번 시간에는 Silverlight 기반 응용 프로그램이 로드되기 전에 나타나는 스플래시 스크린 (Splash Screen) 대해서 알아보겠습니다.
여러분이 Silverlight 응용 프로그램이 포함된 웹 페이지에 접근을 하게 될 때 XAML을 참조하는 어셈블리나 패키지가 브라우저에 배포됩니다. 이 때 배포되는 패키지 용량이 클 경우 아무런 알림 없이 사용자들을 기다리게 한다면 그 사이트를 떠나는 사람이 적지 않을 것입니다. 이럴 때 다운로드 되는 동안 그 진행률을 보여주게 되면 좀 더 나은 사용자 경험을 제공할 수 있을 것입니다. 아래 그림이 스플래시 스크린입니다. 용어가 생소할지 모르지만 그림으로 보니 확실히 어떤 것인지 아시겠지요?
스플래시 스크린 모델은 Silverlight 1.1 알파 버전 이후로 변경된 점이 있습니다. 현재는 스플래시 스크린이 플러그인 API에 빌트인 되었고 스플래시 스크린을 사용을 위해 별도의 페이지를 만들 필요 없이 스플래시 스크린이 기본적으로 제공되기도 합니다. 대신에 스플래시 스크린 소스와 패키기 기본 소스는 각각 분리되어 있고 진행은 플러그인에 의해 자동적으로 조정됩니다.
Silverlight 2 베타 2와 동일한 점도 있습니다. Silverlight 기반 응용 프로그램이 관리되는 프로그래밍 모델을 사용하고 있음에도 관리되지 않는 프로그래밍 모델인 JavaScript와 연동이 되어 여전히 사용하고 있다는 점입니다. 다운로드가 완료되고 패키지가 로드되어서 Silverlight 응용 프로그램이 사용 가능할 때 일반적으로 관리되지 않는 프로그래밍 모델에서 관리되는 프로그래밍 모델로 바뀌고 응용 프로그램이 실행되는 동안 여전히 관리되는 프로그램으로 유지됩니다.
다운로드 진행과 완료 이벤트
실버라이트 스플래시 스크린은 Silverlight 플러그인에서 제공하는 3가지 속성을 사용합니다.
splashscreensource: 패키지 (소스)가 다운로드 되는 동안 보여줄 XAML 페이지의 URI
onsourcedownloadpregresschanged: 소스가 다운로드 되는 동안 지속적으로 호출될 JavaScript 이벤트 핸들러 참조. 이 이벤트는 전체 다운로드의 약 0.5% 정도까지 나눌 정도로 아주 많이 발생합니다.
onsourcedownloadcomplete: 소스가 다운로드될 때 한 번 호출될 JavaScript 이벤트 핸들러 참조.
기본 제공 스플래시 스크린
기본 제공되는 스플래시 스크린은 패키지 다운로드 시간이 지정된 한계 시간인 500 ms를 넘어서면 나타나게 됩니다. 기본 애니메이션을 보여줄 XAML과 초기화 순서는 실버라이트 플러그인에 하드 코딩 되어있습니다.
기본 스플래시 스크린을 사용하지 않고 개별적으로 만들어 사용하려면 HTML 파일의 OBJECT 태그에 정의되어 있는 Silverlight 플러그인의 splashScreenSource파라미터 값을 사용해야 합니다. 이 것은 조금 후에 좀 더 자세히 알아보도록 하겠습니다. 또는 Silverlight.js파일을 사용한다면 CreateObject / CreateObjectEx함수를 호출하는 부분에 splashScreenSource파라미터 값을 지정하면 됩니다.
프로젝트 파일 설정하기
이러한 종류의 프로젝트를 설정하는 방법은 여러 가지가 있지만 여기선 기본적인 Silverlight 프로젝트를 사용하도록 하겠습니다. 스플래시 스크린 테스트를 위해 응용 프로그램 용량을 크게 할 필요가 있습니다. 용량이 적다면 스플래시 스크린을 보지 못하고 바로 Silverlight 응용 프로그램만 보게 될 것입니다. 그럼 기본으로 제공되는 스플래시 스크린을 구경해보겠습니다. ^^
1. 먼저 EloiSplashScreen이라는 새 프로젝트를 하나 만듭니다.
중요
다운로드되는 진행 상황을 보기 위해서는 기본 디버깅 옵션인 상태로 솔루션에 컨트롤을 호스팅할 새 웹 추가를 선택하셔야 합니다. HTML 페이지 동적 생성 옵션을 선택하면 너무 빠르게 파일이 다운로드되어 스플래시 스크린을 볼 수 없게 됩니다.
2. 스플래시 스크린 테스트를 위해 용량이 큰 패키지를 만들어야 합니다. 실제로는 참조하지 않고 단지 용량이 큰 리소스 파일을 어셈블리에 추가시킵니다. 이 파일들은 패키지에 포함되지 않습니다. 아래와 같이 이 파일들을 추가 – 기존 항목을 사용하여 프로젝트에 추가시킵니다. 최소한 5 MB를 초과하도록 합니다. 저는 mp3 파일 추가시켰습니다. ^.^
참고로 저는 처음에 EloiSplashScreenWeb에 파일을 추가해서 수 십 분 동안 스플래시 스크린을 보질 못했습니다. 별의 별 생각이 다 들면서…’이거 버그 아냐?’ -ㅅ- ‘정말 기본으로 제공되는게 있긴 한거야?’ ‘빨리 보고 싶단 말이야’ 하면서…ㅋㅋ 그리고 EloiSplashScreenWeb에 추가를 하면 아래 나올 속성 창에 빌드 작업 속성이 나타나질 않습니다. -ㅅ-
그럼 정확히 파일을 추가하셨다면 해당 파일 빌드 작업 (Build Action) 속성을 포함 리소스 (Embedded Resource)로 지정합니다.
3. 패키지 다운로드가 완료되었는지 확인하기 위해 간단히 TextBlock같은 UI 엘리먼트를 page.xaml 파일에 추가하도록 합니다.
4. 프로젝트를 빌드하고 컴파일을 확인합니다. 그러면 아래와 같은 기본 스플래시 스크린을 볼 수 있습니다.
로드 후엔 TextBlock에 추가한 Mission Success 텍스트가 나타납니다.
기본으로 제공되는 화면도 예쁘네요. ^^ 그렇지만 좀 더 아름답고 개성을 살린 사용자 지정 스플래시 스크린을 만들어 보도록 하겠습니다. 예제가 기본 제공되는 화면보다 괜찮을런지는 모르겠네요. -ㅅ-
사용자 지정 스플래시 스크린 추가하기
이 번엔 사용자 지정 스플래시 스크린을 추가하기 위해 EloiSplashScreen 프로젝트가 아니라 EloiSplashScreenWeb 프로젝트를 변경할 것입니다. 이 것은 스플래시 스크린를 위한 XAML 페이지가 패키지 외부에 있어야 하기 때문입니다. 그러나 패키지가 자체가 다운로드 되는 동안 유효하지 않을 수 있습니다.
그럼 사용자 지정 스플래시 스크린을 추가하는 방법을 자세히 알아보도록 하겠습니다.
1. 솔루션 탐색기에서 EloiSplashScreenWeb을 마우스 우측 버튼을 이용하여 속성 페이지를 선택합니다. 시작 옵션에서 시작 페이지를 EloiSplashScreenTestPage.aspx에서 EloiSplashScreenTestPage.html로 변경합니다. 직접 텍스트를 변경해도 되고 우측 버튼을 이용하여 시작할 페이지를 직접 선택하셔도 됩니다.
2. 계속해서 마우스 우측 버튼을 이용하여 EloiSplashScreenWeb을 선택하여 새 항목 추가를 선택합니다. 템플릿 창에서 Silverlight Jscript 페이지를 선택하고 이름을 EloiSplashScreen.xaml로 변경하고 추가 버튼을 클릭합니다.
3. EloiSplashScreen.xaml 파일을 열어 기존 코드를 모두 지우고 아래 코드를 코딩합니다. 코드 내용이 좀 길게 느껴질 수 있지만 직접 코딩을 해보시기 바랍니다. 직접 코딩을 함으로써 조금 더 생각을 할 수 있고 사소한 오타로 오류가 발생해도 실제 멋진 Silverlight 응용 프로그램을 만들 때에 현재의 작은 오류 해결이 큰 도움을 줄 것입니다. ^^
7. 두 번 째 param 태그는 JavaScript 이벤트 핸들러를 참조합니다. 솔루션 탐색기에서 EloiSplashScreen.xaml 파일의 + 버튼을 클릭하여 하위 EloiSplashScreen.js 파일을 확인합니다. (이 js 파일은 EloiSplashScreen.xaml 파일을 생성할 때 함께 생성된 파일입니다.)
8. EloiSplashScreen.js 파일을 열어 기존의 코드를 모두 삭제하고 아래 코드를 코딩합니다. onSourceDownloadProgressChanged 함수는 프로그레스 바를 업데이트하게 됩니다.
function onSourceDownloadProgressChanged(sender, eventArgs)
미디어 플레이어를 만들기 위해 새로운 프로젝트를 하나 생성할까 합니다. 새로운 미디어 플레이어를 위한 프로젝트의 이름을 MediaPlayer 라고 하겠습니다.
프로젝트를 생성하셨다면 이제 Canvas 가 필요합니다. Object and Timeline에서 Canvas 객체를 추가합니다. 자. 다 만드셨죠? 그럼 이제 동영상을 추가해 보겠습니다.
동영상은 솔루션 탐색기에 필요한 동영상 리소스를 추가하고, 캔버스 객체에 마우스로 드래그해서 옮겨 놓으면 됩니다. 동영상 파일의 추가는 아래의 그림처럼 마우스로 동영상을 드래그 해서 놓아도 되고, Blend 2.5 상단 메뉴에 있는 Project를 선택한 후 Add Existing Item...이라는 메뉴를 선택해서 등록해도 됩니다.
이것도 귀찮다면 단축키 Ctrl + I 를 이용하면 됩니다.^^
미디어 파일을 추가하고 나면 아래의 이미지 처럼 Project 판넬에 추가된 영상이 표시됩니다.(이미지도 이것과 같은 방법으로 추가할 수 있습니다.)
다음으로 지난 포스트에서 생성했던 버튼 컨트롤을 추가합니다. Play, Stop, Pause 버튼을 빌드하고 나면 프로젝트가 있는 하위 bin 폴더에 dll 파일이 생성되어 있습니다. 그것을 참조추가하여 버튼 컨트롤을 사용할 수 있습니다. 참조추가 하는 방법은 아래의 그림처럼 하시면 됩니다.
(마우스 우클릭하여 참조추가하기)
(이전 포스트에서 만든 컨트롤을 빌드하면 나오는 dll 파일)
이제 추가된 dll에서 가져올 사용자 컨트롤이 모두 있는지 확인해보겠습니다. 아래의 첨부된 이미지에서 처럼 자산 라이브러리[ >> ]를 클릭하면 모든 사용자 컨트롤이 확인 가능합니다.
확인된 버튼 사용자 컨트롤을 더블 클릭을 하여 모두 추가합니다.
이제 미디어 플레이어를 만들기 위한 기본적인 준비가 완료되었습니다.
여기서 우리가 한가지 알아야 할 것이 있는데요. 현재는 하나의 프로젝트 내에 캔버스, 버튼 사용자 컨트롤, 동영상 파일과 같은 것들이 모두 각각의 객체의 형태로 존재하고 있습니다.
미디어플레이어에서는 이것들을 하나의 유닛으로 만들어야 할 필요가 있습니다. 그래서 캔버스 아래에 모든 객체들을 묶어 놓아야 합니다. 그러기 위해선 이것들을 그룹화 시켜야 합니다. 그룹화 하는 방법은 아래의 그림처럼 Group Into(그룹으로 묶기)로 합니다.
아래의 그림은 그룹화가 잘 되었을 때 보여지는 ArtBoard의 캡쳐 이미지 입니다.
이제 버튼 컨트롤에 따라 영상이 움직이도록 할 차례 입니다. 미디어를 추가하면 자동으로MediaElement엘리먼트가 생성됩니다. 그리고MediaElement는 동영상의 플레이 스타일을Auto로 가지게 됩니다. 우리는 여기서 버튼을 클릭했을 때 동영상이 플레이되도록 할 것이므로MediaElement에 하나의 속성을 추가할 것입니다.
아래의 그림에서 처럼 MediaElement에 LoadedBehavior 속성값으로 Stop을 설정합니다.
원래 원문을 살펴보면 MediaElement의 AutoPlay의 속성값으로 False를 넣으라고 되어 있는데 Blend 2.5에서 해당 속성을 찾을 수 없었습니다.
(미디어엘리먼트에 설정 가능한 속성들)
자아. 아무튼 계속 진행합니다. 이제 각각의 버튼 사용자 컨트롤에 이벤트를 연결해야 합니다. 마우스의 왼쪽 버튼이 해당 버튼을 클릭하였을 때 동작하는 이벤트의 이름을 MouseLeftButtonDown 속성값에 넣어줍니다. 아래의 그림 처럼 말이지요.
자 이제 C# 파일에 이벤트 메서드를 추가만 해주면 끝나게 됩니다.
이제 미디어 플레이어 실행을 위한 준비가 모두 마무리 되었습니다. F5키를 클릭하여 미디어의 동작 여부를 확인하는 부분은 각자 개인에게 맡기겠습니다.
이상으로 Blend 2.5를 이용한 실버라이트 애플리케이션 개발에 대해 간략하게 알아보았습니다. 좋은 하루 되십시오.^^
원글출처 : http://silverlight.net/Quickstarts/Start/18660837-4a10-462b-bf6e-723b36748ec3.aspx 본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.
안녕하세요. 엘리 입니다.^^
올 해 여름도 태풍이 조용히 지나가질 않는군요.
가족들, 주위 분들 태풍 피해가 없는지 걱정입니다. 피해 없이 모든 분들이 즐거운 여름 되시길 진심으로 바랍니다.
이 번 시간은VisualStudio에 있는Silverlight디자이너 미리보기 창에 대한 설명입니다.
XAML파일을 편집하면 바로 미리보기 창에서 수정한 부분이 적용이 되어 나타나게 됩니다.
이는 파일을 저장하지 않아도 솔루션을 빌드하지 않아도 적용됩니다. (단, 코드 오류 시 적용되지 않습니다.)
위 코드는 Silverlight 응용 프로그램 만들기 시간에 만든Page.xaml파일입니다. 저와 같은 이름으로 솔루션을 만드셨다면Visual Studio 2008을 실행한 후EloiSilverlightApp솔루션 내Page.xaml파일을 열어 보시기 바랍니다.
그 후 위 코드에서 빨간 상자로 하이라이트 된 부분을 각각 Width는 100으로 Height는 50으로Background는RoyalBlue로 변경해보도록 하겠습니다.
미리보기 창을 보면 위와 같이 크기와 색이 변경된 것을 확인하실 수 있습니다. 참고로 처음 코드는 Width는 400,Height는 300, Background는White였습니다. ^.^
그럼 좀 더 자세히 Silverlight 미리보기 창 기능에 대해서 알아보겠습니다.
Silverlight 미리보기 창 Visual Studio 2008 용Silverlight Tools 베타 2는 Silverlight 2 베타 2 응용 프로그램 생성을 위한 도구입니다. Visual Studio 2008의 Silverlight 미리보기 창은 WPF 디자이너 기능 일부를 가지고 있습니다.
지원 기능
다음은 Silverlight 2 베타 2 프로젝트의 Silverlight 미리보기 창에서 지원되는 기능들입니다.
1. 모든 XAML 편집 기능:인텔리센스와 XAML 포맷팅 기능은 WPF 형식 대신 Silverlight 2 베타 2 형식이 표시된다는 것을 제외하고 WPF 디자이너의 XAML 편집 기능과 같습니다.
2. 읽기 전용 위지윅 (WYSIWYG) 미리보기 기능:실행 전 미리보기 작업이 가능하고 확대, 축소가 가능합니다.
3. 분리된 미리보기 창과 XAML 코드 창 4. Silverlight 2 베타 2 컨트롤과 해당 아이콘들 도구 상자에 표시:Silverlight 2 베타 2 컨트롤들은 도구 상자 탭에 마우스 오버 시 플라이 아웃 되어 알파벳 순으로 표시됩니다.
5. 도구 상자 컨트롤 XAML 코드 창으로 드래그 앤 드롭 기능:컨트롤 추가 시 참조와 XML 네임스페이스가 자동으로 추가됩니다. 6. XAML 코드 편집 시 문서 개요 창과 태그 검색 기능: 문서 개요 창(CTRL+ALT+T)은 XAML 코드의 구조를 보여주고 검색 기능(CTRL+F)은 코드 내 문자를 검색합니다.
(메뉴 바 보기 - 문서 개요를 클릭하셔도 됩니다.)
7. .cs 또는 .vb 코드와 xaml 코드 상호 연동 기능
8. XAML 코드 창과 다른 WPF 사이 자동 업데이트 기능
9. 디자이너 컴포넌트 지원 기능
10. 에러 목록 창에 에러 표시 기능:XAML 코드가 에러가 있으면 올바른 코드 입력 전까지 마지막으로 나타난 화면이 표시되고 알림 메시지가 표시됩니다.
알림 메시지 내용: (디자이너를 업데이트하려면 우선 문서에 있는 오류를 수정해야 합니다. 오류 목록을 열려면 여기를 클릭하십시오.)
11. 미리보기 창 위치 조정 기능: XAML 코드 창을 기준하여 가로 분할 (기본 설정), 세로 분할이 가능하며 창을 축소할 수도 있습니다.
차례대로 세로 분할, 가로 분할 (기본 설정), 창 축소 아이콘
미 지원 기능 다음은 Silverlight 2 베타 2 프로젝트에서 Silverlight 디자이너 미리보기 창에서 지원되지 않는 기능들입니다.
1. 미리보기 창에서 편집 불가:도구 상자에서 컨트롤의 선택 및 이동, 항목 추가 기능은 지원되지 않습니다.
원글출처 : http://silverlight.net/quickstarts/blend_quickstart/part4_duplicate_objects.aspx 본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.
이번 강좌에서 우리는 play, pause, stop 과 같은 미디어 플레이어에 필요한 버튼을 만들어 보겠습니다.
앞의 강좌에서 사용했던 버튼을 이용해서 우리는 마우스오버나 클릭과 같은 행위에 응답하는 버튼을 생성할 것 입니다. 이전에 만들어 두었던 버튼을 이용하고자 한다면 Make Control...을 이용해서 간단하게 선택할 수 있습니다.
저는 새롭게 만들어 보겠습니다.^^ 먼저 사용자 컨트롤을 하나 생성합니다. 그리고 Rectangle객체를 선택하고, 그려 넣습니다.
Rectangle 객체의 모서리를 마우스로 잡고 그림처럼 화살표 방향으로 이동합니다. 그러면 모서리가 둥글게 처리 됩니다.
이제 버튼 모양이 만들어 졌습니다.
버튼에 보기 좋게 배경색을 넣겠습니다. 앞의 강좌에서도 설명했지만 그레데이션을 선택하고, 팔레트에서 두 개의 포인트를 이용하여 색상을 선택합니다.
그러면 위의 그림과 같은 버튼이 만들어지게 됩니다. 이렇게 만들어진 객체를 복사해서 새로운 버튼으로 만들겠습니다.
먼저 제일 상단 메뉴에 보면 Tool 이라는 것이 보일 것 입니다. 그곳에서 Make Control... 을 선택합니다. 그러면 다이얼로그 상자가 열리면서 컨트롤의 이름을 넣으라고 합니다. 저는 그곳에 btn_play 라는 이름을 넣었습니다. 이름을 넣고 OK를 클릭하면 솔루션 탐색기에 btn_play.xaml 파일이 생성된 것을 확인할 수 있습니다.
이제 플레이 모양을 넣기 위해 Pen 을 선택합니다.
Pen을 선택하고 그림을 그릴려고 했더니.. 오우~ 제가 Artboard를 400%로 해놓고 작업을 했었네요.^^; 100%로 축소 했더니 버튼이 콩알만 합니다. 그래서 이것을 확대할 필요가 생겼습니다.
그래서 확대 했습니다. 확대하고 나니깐 아까 모서리 둥글게 처리한게 거의 보이지 않네요.^^;
그래서 다시 모서리를 둥글게 처리 했습니다. 그랬더니 버튼 아래로 하얀 그리드가 보이네요.
그래서 아래의 그림처럼 화살표 방향으로 하얀 그리드를 마우스로 드래그 했습니다. 그랬더니 버튼까지 같이 늘어나네요. 이런 낭패가...ㅎㅎ
다시 버튼 객체를 선택하고 하얀 그리드 안에 알맞게 맞춰 넣습니다.
위에서 선택한 Pen 을 이용하여 3개 의 점을 찍었더니 삼각형이 그려졌습니다. 그런데 삼각형이 똑바르게 그려지지 않았네요.^^; 그래서 이것을 보정하고자 합니다.
Pen을 이용해서 그림을 그릴 경우 직선이나 포인트가 원하는 위치에 제대로 찍히지 않아서 원하는 모양이 나오지 않을 경우에는 아래 그림처럼 Direct Selectcion 메뉴를 이용해서 그것을 보정할 수 있습니다.
아래의 그림은 Direct Selection을 이용해서 삼각형 모양을 변형시켜 본 예 입니다. 여러분도 아래의 그림처럼 포인트를 잡고 노란 화살표 방향으로 포인트를 이동시켜 보시기 바랍니다. ^^
버튼이 너무 작아서 똑바로 그릴려고 해도 잘 되었는지 확인하기 힘드네요~ 그래서 Artboard 를 400%로 확대했습니다. 우와~ 댑따 잘보이는군요.ㅋ
삼각형을 잘 그렸으나 Rectangle 객체 위에 올바르게 놓여진 것 같지는 않습니다. 그래서 Expression Blend 2.5의 왼쪽에 있는 Toolbox에서 Selection을 선택하고, Rectangle객체를 선택해서 원하는 곳으로 약간 자리 이동했습니다.
자아. 이렇게 해서 play 버튼을 만들어 보았습니다. 미디어 플레이어에는 단지 play 버튼만 존재하는 것이 아니므로 다른 버튼도 만들어 보겠습니다. 기존에 이미 만들어 놓은 버튼이 있으므로 역시 복사해서 사용하도록 하겠습니다.
앞에서는 그냥 생성해서 사용했으므로 컨트롤을 복사하는 방법에 대해 조금 자세하게 설명해 보겠습니다. 먼저 왼쪽의 Object and TimeLines에서 LayoutRoot 를 선택하고 상단메뉴에서 Tool을 선택하고 Make Control...을 선택합니다.
그러면 아래의 그림처럼 다이얼로그 상자가 열립니다. 가운데 Name 부분에 버튼 컨트롤의 이름을 입력합니다. 저는 아래의 그림처럼 이름을 btn_pause로 정했습니다.
그리고 다시 Rectangle 객체를 이용해서 일시정지 마크를 만들어서 넣었습니다. 이후 작업은 위에 설명한 것과 동일합니다.
아래의 정지 버튼도 위와 동일한 방법으로 생성합니다. 그럼 이제 원하는 버튼이 모두 생성되었겠죠? ^^
다음 시간에는 위에서 생성한 버튼을 이용하여 아주 간단한 미디어 플레이어를 만들어 보겠습니다.
안녕하셨어요? 요즘 너무 더워서 점심을 거르는 날이 있는데 오늘은 비가 와서 시원하네요. 어렸을 때는 참 비가 싫었는데, 소풍 가는 날 비 오고 운동회 날 비 오고…^^; 그런데 요즘은 비가 오면 시원해서 좋네요. 빗 소리도 좋아지고요. 비 그친 후 맑은 하늘도 깨끗해서 좋구요. 오늘은 Silverlight 클래스 라이브러리 만들기에 대해서 알아보는 시간입니다. Silverlight 클래스 라이브러리 만들기 Visual Studio 2008 용 Silverlight Tools 베타 2를 설치한 Visual Studio 2008은 Silverlight 2 기반의 관리되는 클래스 라이브러리를 만들 수 있는 프로젝트 템플릿 (C#과 Visual Basic)을 포함하고 있습니다. 프로젝트 템플릿에는 기본 설정과 Silverlight 기반 클래스 라이브러리 코드 파일들을 포함하고 있습니다.
이제부터 Visual Studio 프로젝트 템플릿을 사용하여 Silverlight 기반 클래스 라이브러리 솔루션을 만드는 방법과 함께 생성되는 프로젝트 기본 설정과 파일들에 대해서 알아보도록 하겠습니다.
Visual Studio를 사용하여 Silverlight 기반 클래스 라이브러리 솔루션 만들기 Silverlight 클래스 라이브러리 프로젝트 템플릿을 사용하여 Silverlight 기반 클래스 라이브러리 솔루션을 만들어 보겠습니다. 1. Visual Studio 2008을 시작합니다.
2. 파일 - 새 프로젝트를 차례로 클릭합니다.
그러면 아래와 그림과 같이 새 프로젝트 대화 상자가 열립니다.
3. 프로젝트 형식 창에서 Visual C#또는 Visual Basic을 확장하고 Silverlight프로젝트 형식을 선택합니다. 4. 템플릿 목록에서 Silverlight 클래스 라이브러리를 선택합니다. 5. 이름 텍스트 박스에 여러분들이 원하는 클래스 라이브러리 이름을 입력합니다. 6. 확인을 클릭하면 솔루션이 생성됩니다.
Silverlight 클래스 라이브러리 프로젝트 템플릿으로 만든 솔루션은 Silverlight 기반 클래스 라이브러리 프로젝트 한 개를 포함하고 있습니다. Silverlight 기반 응용 프로그램 클래스 라이브러리 항목 Silverlight 기반 클래스 라이브러리 프로젝트는 설정 (configuration)과 어셈블리 참조 (assembly references), 최소한의 Silverlight 기반 클래스 라이브러리를 빌드하는데 필요한 코드 파일들을 포함하고 있습니다. 중요 Silverlight 기반 클래스 라이브러리 핵심 내용들을 이해하기 위해 Silverlight 라이브러리어셈블리개발페이지를 참고하시기 바랍니다. 설정 생성된 Silverlight 기반 클래스 라이브러리 프로젝트의 중요 설정 사항들은 다음과 같습니다. Visual Studio 상단의 프로젝트 메뉴에서 클래스 라이브러리 속성을 클릭하거나 솔루션 탐색기에서 클래스 라이브러리 이름을 마우스 우측 버튼 메뉴를 이용하여 속성을 클릭하시기 바랍니다.
- 아래 이름들은 Silverlight 기반 클래스 라이브러리 솔루션 생성 시, 새 프로젝트 대화 상자에서 이름 텍스트 박스에 입력했던 값과 연관됩니다. - 프로젝트 이름 - 프로젝트가 빌드될 때 생성되는 어셈블리 이름 - 생성된 어셈블리의 기본 네임스페이스 - 어셈블리에 포함된 이름과 버전 메타데이터 이름과 버전 메타데이터는 AssemblyInfo.cs 또는 AssemblyInfo.vb에 저장됩니다. 어셈블리 참조 (Assembly References) Silverlight 기반 클래스 라이브러리 프로젝트는 Silverlight 2와 관련된 필수적인 다음 어셈블리를 포함합니다. - mscorlib.dll - System.dll - System.Windows.dll
또한 다음은 일반적 응용 프로그램 기능을 위해 포함된 어셈블리입니다. - System.Core.dll - System.Net.dll - System.Windows.Browser.dll - System.Xml.dll 참조하는 어셈블리는 솔루션 탐색기에서 프로젝트– 참조에서 확인하실 수 있습니다.
코드 파일 생성된 Silverlight 기반 클래스 라이브러리 프로젝트는 Class1이라는 클래스 파일 한 개를 가지고 있습니다.
클래스와 사용자 컨트롤 추가하기 Silverlight 프로젝트에 클래스를 추가하려면 차례로 추가 - 새 항목을 선택 후 다음 화면 새 항목 추가 화면 템플릿 창에서 클래스를 선택합니다. (바로 추가 – 새 항목 – 클래스를 선택하셔도 같은 창이 열립니다.) 그러면 빈 클래스가 하나가 추가될 것입니다.
기존 Silverlight 프로젝트에 사용자 컨트롤을 추가하기 위해 솔루션 탐색기의 프로젝트에서 마우스 우측 버튼 클릭하여 차례로 추가, 새 항목을 클릭하고 새 항목 추가 창에서 Silverlight 사용자 컨트롤을 선택합니다. 생성된 사용자 컨트롤은 Page 클래스처럼 XAML 마크업 파일과 코드 비하인드 파일로 만들어집니다. 사용자 컨트롤 .xaml 파일과 .cs 파일을 사용하여 클래스를 구현하는 방법의 좀 더 자세한 정보는 코드비하인드와부분클래스 (Silverlight 2)를 참고하시기 바랍니다. 일반적으로 메인 응용 프로그램 UI 구현을 위해 응용 프로그램에서는 메인 사용자 컨트롤인 Page를 사용합니다. Page 사용자 컨트롤은 추가적으로 사용자 컨트롤을 포함하여 여러 요소들로 구성되어집니다. 그리고 응용 프로그램 네비게이션 모델이 Page 사용자 컨트롤을 사용할 경우 자식 사용자 컨트롤의 메인 UI를 변경하여 페이지 이동을 할 수 있습니다.
오늘은 여기서 마무리하도록 하겠습니다. 다음 시간에는 Silverlight 디자이너 미리보기에 대해서 함께 알아보도록 하겠습니다. 행복한 일 가득하시길 바랍니다. ^___________^*
원글출처:http://silverlight.net/Quickstarts/Start/65f7a50a-9858-4425-8b6f-1993e5ab0236.aspx 본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.
안녕하셨어요? 휴가 계획은 잡으셨는지 궁금합니다. 저는 회사에서 휴가 계획을 제출하라고 해서 일단 7월 말로 제출하긴 했는데, 언제 갈 지는 모르겠네요. ^.^ 요즘 저는 ‘다보스 리포트 – 힘의 이동’이라는 책을 읽고 있습니다. 이 책은 2007년 다보스 포럼 (정식 명칭: 세계 경제 포럼)에서 나온 안건들을 소개한 내용입니다. 다보스 포럼은 매년 스위스 다보스에서 2,000명이 넘는 경제인과 정치인, 미디어, 학자, 등이 참석하여 세계 경제의 주요 관심사를 논의하는 모임입니다. 이 책에서 관심 있는 분야 중에 하나는 웹 2.0에 대해서 준비하고 분석하고 있다는 것입니다. 웹 2.0과 함께 거론되는 RIA (Rich Interactive Application) 그리고 RIA와 함께 거론되는 Silverlight…^.^ 세계 글로벌 리더들도 미래의 세상을 예견하면서 웹 2.0에 대해서 논의했듯이 우리도 열심히 공부하자는 의미에서 몇 자 적었습니다. (아흐~썰렁한 결말 -ㅅ-)
그럼 오늘은 두 번 째 시간으로 실제 Silverlight 개발에 들어가보도록 하겠습니다.
Visual Studio를 사용한 Silverlight 기반 응용 프로그램 솔루션 만들기 아래 제시한 단계를 따라 Silverlight 응용 프로그램 프로젝트 템플릿을 사용하여 Silverlight 기반 응용 프로그램 솔루션을 만들어 보겠습니다. 1. 아래의 그림처럼 매뉴에서 Visual Studio 2008을 시작합니다.
2. 파일– 새 프로젝트를 차례로 클릭합니다. .
그러면 아래 그림과 같이 새 프로젝트 대화 상자가 열립니다
3. 새 프로젝트 대화 상자에서 Visual C#이나 Visual Basic을 확장하고 Silverlight프로젝트를 선택합니다. 4. 템플릿 목록에서 Silverlight 응용 프로그램을 선택합니다. 5. 이름 텍스트 박스에 응용 프로그램 이름을 입력합니다. 저는 EloiSilverlightApp로 입력하였습니다. 여러분들이 원하시는 것으로 입력하시기 바랍니다. ^.^ 6. 확인을 클릭하면 Silverlight 응용 프로그램 추가 대화 상자가 열립니다.
7. Silverlight 응용 프로그램 호스팅 방법을 선택합니다. - 솔루션에 Silverlight 응용 프로그램과 ASP.NET 웹 사이트를 구분해서 구성하고자 한다면 솔루션에 컨트롤을 호스팅할 새 웹 추가를 선택하고 프로젝트 형식과 이름을 추가로 입력합니다. - 프로젝트에 Silverlight 기반 응용 프로그램을 호스팅할 단일 HTML 페이지를 구성하고자 한다면 이 프로젝트 안에 Silverlight를 호스팅할 HTML 테스트 페이지를 동적으로 생성을 선택합니다. 8. 확인을 클릭하고 솔루션을 생성합니다.
Visual Studio 프로젝트 템플릿의 Silverlight 응용 프로그램으로 만들어진 솔루션에는 다음 사항들이 포함됩니다. - 하나의 Silverlight 기반 응용 프로그램 프로젝트 - 하나의 웹 사이트 (Silverlight 응용 프로그램 추가 대화 상자에서 솔루션에 컨트롤을 호스팅할 새 웹 추가를 선택했을 시)
Silverlight 기반 응용 프로그램 프로젝트 항목
Silverlight 기반 응용 프로그램 프로젝트는 설정 (configuration)과 어셈블리 참조 (assembly references), 그리고 응용 프로그램을 빌드하고 실행할 수 있는 최소한의 코드 파일들이 포함되어 있습니다.
설정 (Configuration) 다음은 Silverlight 기반 응용 프로그램 프로젝트 생성시 설정되는 중요한 항목들입니다. - 이 내용은 솔루션 탐색기에서 Silverlight 응용 프로그램 (프로젝트 이름)의 속성을 클릭하면 확인할 수 있습니다. 아래 그림을 참고하시기 바랍니다. - 프로젝트 이름 - 프로젝트가 빌드될 때 생성되는 어셈블리 이름 - 생성된 어셈블리의 기본 네임 스페이스 - 프로젝트가 빌드될 때 생성되는 Silverlight 기반 응용 프로그램 패키지 (.xap)의 이름 - 어셈블리에 포함된 이름과 버전 메타데이터 - 이름과 버전 메타데이터는 AssemblyInfo.cs 또는 AssemblyInfo.vb에 저장됩니다. - 응용 프로그램 패키지를 생성하는데 필요한 응용 프로그램 메니페스트 (수정 불가)
어셈블리 참조 (Assembly References) Silverlight 기반 응용 프로그램 프로젝트는 Silverlight 2와 관련된 필수적인 다음 어셈블리를 포함합니다. - mscorlib.dll - System.dll - System.Windows.dll 또한 다음은 일반적 응용 프로그램 기능을 위해 포함된 어셈블리입니다. - System.Core.dll - System.Net.dll - System.Windows.Browser.dll - System.Xml.dll
참조하는 어셈블리는 솔루션 탐색기에서 프로젝트– 참조에서 확인하실 수 있습니다.
코드 파일 Silverlight 응용 프로그램 프로젝트에는 아래 클래스들을 빌드하는 코드 파일들이 있습니다.
- Page: Page 클래스는 User Interface (UI)를 만들기 위해 생성됩니다. Page 클래스는 UserControl로부터 파생되고 XAML 마크업 파일 (Page.xml)과 코드 비하인드 파일 (C# 사용할 경우 Page.xaml.cs 또는 Visual Basic 사용할 경우 Page.xaml.vb)로 구성되어집니다.
- APP:응용 프로그램 클래스로 생성된 App 클래스는 모든 Silverlight 기반 응용 프로그램에 메인 응용 프로그램 UI를 보여주기 위해 또한 응용 프로그램을 구동하기 위해 필요합니다. 다음으로 이 클래스는 응용 프로그램 패키지 (.xap)가 다운로드된 후에 즉시 Silverlight 플러그인에 의해 관리됩니다. App 클래스는 시작 개체에서 응용 프로그램 구동을 핸들링합니다. 아래 프로젝트 - 속성 화면을 참고하시기 바랍니다.
App 클래스도 Page 클래스와 마찬가지로 XAML 마크업 파일 (App.xaml) 과 코드 비하인드 파일 (C# 사용할 경우 App.xaml.cs 또는 Visual Basic 사용할 경우 App.xaml.vb)로 구성됩니다.
테스트 페이지 여러분이 Silverlight 응용 프로그램 추가 대화 상자에서 이 프로젝트 안에 Silverlight를 호스팅할 HTML 테스트 페이지를 동적으로 생성을 선택하셨다면 프로젝트에 HTML page (TestPage.html) 하나가 생성됩니다. 이 파일은 여러분의 Silverlight 기반 응용 프로그램에서 호스팅되고 <object>태그를 사용하여 Silverlight 기반 응용 프로그램을 다운로드하고 실행하는 Silverlight 플러그인을 관리합니다. Visual Studio에서 여러분의 응용 프로그램을 실행할 때 웹 브라우저에서 실행됩니다. Silverlight 기반 응용 프로그램 웹 사이트 항목
Silverlight 응용 프로그램 추가 대화 상자에서 솔루션에 컨트롤을 호스팅할 새 웹 추가를 선택하셨다면 Silverlight 응용 프로그램 프로젝트 템플릿은 ASP.NET 기반 웹 사이트를 만들고 생성된 솔루션에 웹 사이트를 추가합니다. 웹 사이트에는 일반적 기본 ASP.NET 웹 응용 프로그램 프로젝트 파일들이 포함됩니다. - 기본 웹 페이지인 마크업 페이지 (Default.aspx)와 코드 비하인드 (C#을 사용한다면 Default.aspx.cs 또는 Visual Basic을 사용한다면 Default.aspx.vb)파일로 구성됩니다. - 웹 사이트 설정 파일 (web.config)
ASP.NET 웹 응용 프로그램에 대해서 좀 더 자세한 정보는 ASP.NET 웹응용프로그램을 참고하시기 바랍니다. 또한 Silverlight 기반 응용 프로그램 호스팅을 위해 특히 웹 사이트는 .aspx 파일과 .html 파일을 포함합니다. 두 파일의 이름은 Silverlight 기반 응용 프로그램 프로젝트의 이름과 "TestPage" 텍스트로 연결되어 만들어집니다. 예를 들어, Silverlight 기반 응용 프로그램의 이름이 "EloiSilverlightApp" 라면 다음과 같은 이름을 가진 파일들이 생성됩니다.
.html 파일은 <object>태그를 사용하여 Silverlight 플러그인을 설정하고 여러분의 Silverlight 기반 응용 프로그램을 실행하고 다운로드하게 합니다. .aspx 파일은 Silverlight ASP.NET 서버 컨트롤을 사용하여 .html 파일과 유사한 HTML을 생성합니다. Silverlight ASP.NET 서버 컨트롤에 대해서 좀 더 자세한 정보는 ASP.NET 웹페이지와 Silverlight 통합을 참고하세요.
기본적으로 .aspx 파일은 시작 페이지로 설정되어 있으며 Silverlight 기반 응용 프로그램 프로젝트가 빌드될 때 응용 프로그램 패키지 파일 (.xap)은 웹 사이트로 복사되고 .aspx 페이지를 통해 실행하고 다운로드할 수 있습니다.
상단 메뉴를 이용한 화면이고 솔루션 탐색기에서도 솔루션 이름에 마우스 우측 버튼 메뉴를 이용하여 빌드할 수 있습니다.
사용자 컨트롤과 클래스 추가하기 사용자 컨트롤은 용어 그래도 사용자가 만드는 컨트롤입니다. 사용자 컨트롤을 만들면 .xaml 파일과 그 하위에 .cs 파일이 만들어지는데 .xaml 파일은 컨트롤 그 자체를 생성하는데 사용되고 .cs 파일은 .xaml 파일로 만들어진 컨트롤의 동적 액션을 주는데 사용됩니다. 또한 사용자 컨트롤은 하나의 dll로 만들어질 수도 있고, 독립 실행 컨트롤의 형태를 띄어야 하므로 .xaml 파일과 .cs 파일로 만들어집니다. .xaml 파일만으로는 컨트롤에 액션을 줄 수 없기 때문입니다.
기존 Silverlight 프로젝트에 사용자 컨트롤을 추가하기 위해 솔루션 탐색기의 프로젝트에서 마우스 우측 버튼 클릭하여 차례로 추가, 새 항목을 클릭하고 Silverlight 사용자 컨트롤을 선택합니다.
Silverlight 사용자 컨트롤 추가 그림
생성된 사용자 컨트롤은 Page 클래스처럼 XAML 마크업 파일과 코드 비하인드 파일로 만들어집니다.
사용자 컨트롤 .xaml 파일과 .cs 파일을 사용하여 클래스를 구현하는 방법의 좀 더 자세한 정보는 코드비하인드와부분클래스 (Silverlight 2)를 참고하시기 바랍니다. 일반적으로 메인 응용 프로그램 UI 구현을 위해 응용 프로그램에서는 메인 사용자 컨트롤인 Page를 사용합니다. Page 사용자 컨트롤은 추가적으로 사용자 컨트롤을 포함하여 여러 요소들로 구성되어집니다. 그리고 응용 프로그램 네비게이션 모델이 Page 사용자 컨트롤을 사용할 경우 자식 사용자 컨트롤의 메인 UI를 변경하여 페이지 이동을 할 수 있습니다.
기존의 Silverlight 프로젝트에 클래스를 추가하기 위해서는 솔루션 탐색기에서 차례로 추가, 새 항목, 클래스를 클릭합니다. 그러면 여러분의 프로젝트에 새로운 빈 클래스가 추가될 것입니다.
지금까지 Visual Studio를 사용하여 Silverlight 응용 프로그램 만들기에 대해서 알아보았습니다. 내용 중에 해당 사항의 좀 더 자세한 정보를 위한 링크는 필요하시다면 이 링크가 아니더라도 다른 책이나 인터넷 자료를 이용하셔서 공부하시기 바랍니다. 이는 여러분께 Silverlight 내용에 좀 더 많은, 확실한 지식을 주게 될 것입니다. ^^
다음 시간에는 Silverlight 클래스 라이브러리 만들기에 대해서 알아보겠습니다.
더운 여름 짜증내지 마시고 오히려 주위 분들께 활기찬 모습과 웃음을 먼저 표현해보세요. 그러면 여러분은 더욱 즐거운 하루를 보내시게 될 것입니다. 받는 기쁨보다 주는 기쁨이 더 크다는거 알고 계시죠? ^_______^*
안녕하세요~ 세티 입니다. 오늘도 지난 번과 마찬가지로 실버라이트 퀵 스타트를 기준으로 번역하면서 나름 제 표현을 가미하면서 진행해 보겠습니다.
먼저 우리는 겹쳐져 있는 2개의 rectangle을 가지고 있습니다. 하나는 푸른색의 배경색을 가지고 있고, 다른 하나는 붉은 빛의 배경색을 가지고 있습니다. 이 중에서 붉은 빛의 배경색을 가지는 rectangle 을 가장 위에 둡니다. 일반적인 버튼의 경우 마우스가 버튼 위에 위치하게 되면 아무런 액션도 일어나지 않습니다. 여기서 우리는 아무 애니메이션도 없는 버튼에 애니메이션을 주기 위해 프로시저 코드를 사용할 것입니다.
예제를 위해 mouseover 이벤트를 이용하여 작성해 보겠습니다.
먼저 Blend 2.5를 실행합니다. 그리고 LayoutRoot에 2개의 Rectangle을 만듭니다. 먼저 처음 버튼에는 파란색 그레디언트 효과를 주었습니다.
그리고 버튼을 복사하여 하나의 Rectangle을 똑같이 붙여넣었습니다.
복사한 객체의 색상은 아래의 그림처럼 변경했습니다. 그리고 Visibility 속성을 Collapsed로 변경했습니다.
다음으로 Artboard의 XAML 탭을 클릭하고, 다음의 내용을 코딩합니다.
코드를 보면 쉽게 이해하시겠지만 Grid는 MouseEnter 이벤트와 MouseLeave 이벤트를 가지고 있습니다. 이 이벤트에 행위를 담당하게 될 C#코드의 이벤트를 연결합니다.
여기서는 Grid객체의 MouseEnter 이벤트가 실행되면 C#에서 ButtonMouseEnter 메서드가 실행될 것이고, MouseLeave 이벤트가 실행된다면 C#의 ButtonMouseLeave 메서드가 실행될 것입니다.
Grid의 이벤트가 실행될 때 특정 행위를 주기 위해 이제 C# 코드에 프로시저를 코딩합니다. 그러기 위해선 먼저 솔루션 탐색기에 있는 XAML 파일을 확장해서 C# 파일을 열어야 합니다. 아래의 그림처럼 말입니다.
그리고 Page.xaml.cs를 두 번 클릭하여 해당 파일을 오픈합니다. VisualStudio가 설치되어 있는 분은 자동으로 실행되면서 CS 파일이 오픈될 겁니다. 그 곳에 ButtonMouseEnter 메서드와 ButtonMouseLeave 메서드를 코딩합니다.
자아 이제 다 되셨으면 VS를 닫고 Blend 2.5에서 F5키를 눌러서 프로젝트를 빌드 합니다.
그러면 아래처럼 실행되면서 버튼이 하나 보일 것입니다.
위의 그림에서 설명한 것 처럼 마우스를 하얀 여백에 두었다가 배경색이 있는 Grid로 마우스를 움직여 보세요. Grid에 마우스가 올라가는 순간 Grid에 설정된 Mouse 관련 이벤트가 작동하면서 C# 코드에 있는 해당 메서드를 실행하게 됩니다. 그러면서 아래의 그림과 같은 결과를 렌더링하게 됩니다.
원글출처:http://msdn.microsoft.com/en-us/library/bb404708(VS.95).aspx 본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.
안녕하세요. 이제훈입니다. 모두들 멋진 닉네임 하나씩 가지고 계시지요? 제 이름도 기억해주시고 앞으로 닉네임으로도 불러 주십솨해서 소개(?)해드립니다. ^^ 제 닉네임은 eloi라고 합니다. 방금 어떻게 읽으셨나요? 엘로이? 엘루아? 이 엘 오 아이? 어떻게 불러주셔도 크게 상관은 없지만 우리들은 영어에 익숙(?)한지라 보통 엘로이라고 읽으셨을 것 같습니다. 제 주위 분들도 편하게 부르실 때 ‘엘로이’ 라고 보통 부르십니다. 그런데 eloi가 영어도 불어도 아닌지라… ‘엘리’ 라고 읽습니다. 앞으로 제 본명이나 닉네임이나 편하게 불러주세요. 그리고 좀 더 관심을 품으시고 단어의 기원에 대해서 궁금하신 분은 메일 주시기 바랍니다. ^^ 앞으로 Silverlight 2를 소개해나가기 전에 잠시 과거로 돌아가 보겠습니다. 전 3년 정도 한국마이크로소프트 웹 벤더 사에서 근무하면서 웹 사이트 개발 및 유지를 해왔습니다. 2006년도 어느 날 d2:MIX Seoul 2006 – The Next Web Now라는 행사가 열리게 되어 행사 페이지를 오픈 중이었죠. (언제 오픈한지 기억이 안나 검색해보았습니다. ^^)
처음엔 디자이너와, 개발자들 모두 모이는 행사라고 해서 조금은 의아해 했었습니다. 보통 MSDN, TechNet 관련해서 개발자, IT Pro, 학생 대상인 세미나가 많았던 이유 때문이었습니다. 또한 이 행사가 Expression 소프트웨어 출시 전 UX와 함께 소개되는 행사였습니다. 저는 사실 이 행사가 특이하게 홍대 클럽에서 열리고 해서 바쁜 와중에 한 번 가보고 싶은 마음이 있었는데 한 편으로는 단지 '마이크로소프트에서도 디자인 툴에 사업을 힘차게 해보려나 보다.' 라고만 생각하여 개발자인 저로서 조금은 관심이 없었던 행사이기도 하였습니다. 여러분들도 처음엔 저게 뭔가하는 생각이 드셨을 거라 생각이 듭니다. (아닌 분들도 계시겠지요? ^^) 그리고 지난 달에 열린 Remix 08 (Beyond RIA) 행사가 있어 참여하게 되었는데, 지나가던 여성 분들께서 ‘너무 개발자 중심 아닌가 싶어? 이해 되지 않는 부분이 많다. 구치?’ 하는 얘기를 듣게 되었습니다. 두 분 모두 디자이너이셨던 것 같습니다.
제 이야기와 두 디자이너 분의 이야기를 한 이유는 이렇습니다. 앞으로 Silverlight (+Expression Tool)는 개발자, 디자이너 모두 조금은, 경우에는 많이 본인 분야가 아니라고 하는 부분까지 신경을 쓰고 협업해야할 것입니다. 저도 처음엔 개발자로서 관심 밖이었고 도대체 저게 뭐하는거야라고 생각이 들었었는데 Silverlight 응용프로그램~ 가벼우면서도 멋진 것이더군요. ^^
많은 분 들이 관심을 가지시고 앞으로 세상에 함께 변화되어 가는 것이 아니라 변화에 대해 주체가 되었으면 하는 마음입니다. Silverlight가 앞으로 RIA의 중심이 될 동영상 프로그램, 동영상 서비스 어떤 것이든 큰 중심이 될 것입니다. 그럼 본격적으로 Silverlight 2에 대해서 소개를 하면서 제 글을 시작해 나가겠습니다.
Silverlight 개요
Microsoft Silverlight는 앞으로 웹에서 경험하게 될 다양하고 화려한 미디어와 풍부한 대화식 응용 프로그램 (RIA)를 구축하고 제공하기 위한 .NET 프레임워크의 크로스 브라우저, 크로스 플랫폼의 구현입니다. 또한 Silverlight는 선언적, 전통적 프로그래밍의 관리되는 코드와 동적 언어로 서버의 성능과 웹, 데스크톱, Windows Presentation Foundation(WPF)를 통합합니다. 베타이긴 하지만 현재 최신 버전인 Silverlight 2는 .NET 프레임워크 지원을 포함하여 1.0 보다 많은 기능이 추가되었습니다. 앞으로 두 버전 모두에 적용되는 기능을 설명할 것입니다.
조금은 개념적이라 이해하기 힘들 수 있으실 것 같습니다. 그럼 조금 더 자세히 알아보도록 하겠습니다.
Silverlight는 무엇인가? 화려하고 예술적 응용 프로그램을 만들 수 있는 Silverlight는 아래와 같은 특징이 있습니다. - 크로스 브라우저(cross-browser), 크로스 플랫폼(cross-platform)
많이들 사용하고 있는 Internet Explorer와 Firefox, Opera, Safari에서 모두 실행이 가능하고, Microsoft Windows와 Mac OS X에서도 실행 가능합니다.
- 어느 곳에서도 실행 가능한 일관된 경험, 결과 - 가벼운 설치 프로그램 - 비디오, 오디오 스트리밍(모바일 단말기에서 데스크톱 브라우저까지 720p HDTV 비디오 모드로 스케일합니다.) - 전체 페이지를 새로고침 하지 않고 데이터를 읽고 화면을 업데이트 할 수 있습니다. - 풍부한 그래픽과 사용자 상호 작용을 가진 Silverlight 기반 응용 프로그램
웹 개발자와 그래픽 디자이너는 다양한 방법으로 Silverlight 기반 응용 프로그램을 만들 수 있습니다. Silverlight 마크업으로 미디어와 그래픽을 만들 수 있고 이를 동적 언어 및 관리되는 코드로 변경, 조작할 수 있습니다. Silverlight 기능은 어떤 것이 있는가?
Silverlight는 목적에 맞게 적당한 도구와 적당한 언어로 단일 개발 플랫폼에서 여러 기술을 포함시킵니다. Silverlight는 다음과 같은 기능을 제공합니다.
- WPF와 XAML. Silverlight는 Windows Presentation Foundation (WPF) 기술을 포함하고 이는 UI 개발에서 브라우저 안의 요소들을 크게 확장 가능하게 합니다. WPF로 멋진 그래픽과 애니메이션, 미디어, 등 강력한 클라이언트 기능을 만들 수 있고 HTML로만 가능했던 것을 넘어 브라우저 기반 UI를 좀 더 멋지게 만들 수 있습니다. Extensible Application Markup Language (XAML)로는 선언적 마크업 구문을 통해 WPF 요소를 만들 수 있습니다.
- JavaScript 확장. Silverlight는 보편적인 브라우저 스크립트 언어로 확장성을 제공하고 WPF 요소로 할 수 있는 작업들을 포함하여 브라우저 UI를 강력하게 제어할 수 있습니다. - 크로스 브라우저, 크로스 플랫폼 지원. Silverlight는 어느 플랫폼이든, 어떤 브라우저든 같은 결과를 나타냅니다. 이는 사용자가 사용하는 브라우저와 플랫폼을 고려하지 않고 개발 및 디자인을 할 수 있다는 의미입니다. - 기존 응용 프로그램 통합. Silverlight는 여러분의 기존 JavaScript와 이미 개발해둔 기존의 기능을 보완해줄 ASP.NET AJAX 코드를 원활하게 통합할 수 있습니다. - .NET 프레임워크 프로그래밍 모델과 관련 도구 액세스. JScript와IronPython같은 동적 언어와 C#과 Visual Basic 같은 언어를 사용하여 Silverlight 기반 응용 프로그램을 만들 수 있습니다. 그리고 Visual Studio 같은 개발 도구를 사용하여 Silverlight 기반 응용 프로그램을 만들 수 있습니다. - LINQ. Silverlight는 통합 질의 언어 (LINQ)를 포함하고 있습니다. LINQ는 직관력 있는 기본 문법과 .NET 프레임워크 지원 언어 내의 강력한 정형화된 객체를 사용하여 데이터 액세스 프로그램을 만들 수 있습니다. - ASP.NET과 AJAX. ASP.NET을 경험해보셨다면, ASP.NET의 서버와 클라이언트 기능과 Silverlight를 조금 더 쉽게 통합할 수 있습니다. 또한 ASP.NET 내 서버 기반 리소스를 만들 수 있고 사용자 트랜잭션이 없이 서버 기반 리소스를 통신하는 비동기적 ASP.NET AJAX 기능을 사용할 수 있습니다. - Silverlight Architecture.좀 더 자세한 내용은 Silverlight Architecture를 공부하시면 됩니다. 여기서는 간단히 Silverlight Architecture만 보겠습니다.
Silverlight 기반 응용 프로그램 실행
Silverlight 기반 응용 프로그램은 브라우저 내에서 실행됩니다. 현재 모든 브라우저에서 특정 코드를 만들지 않고도 Silverlight 응용 프로그램을 실행할 수 있습니다. Silverlight 기반 응용 프로그램을 실행하기 위해서 사용자는 브라우저 내에 단지 가벼운 플러그인만 필요로합니다. 그 플러그인은 무료입니다. ^.^ 사용자 브라우저에 플러그인이 설치되어 있지 않다면 자동으로 플러그인 설치 알림을 받습니다. 다운로드와 설치는 수 초가 걸리고 설치 권한이 없는 사용자에게는 제한이 됩니다.
Silverlight 기반 응용 프로그램 개발
이미 여러분들이 알고 있는 기술과 도구로 Silverlight 기반 응용 프로그램을 개발할 수 있습니다. 여러분은 HTML과 WPF 요소들을 사용하여 웹 페이지를 만들고 HTML, XAML 같은 선언적 마크업 언어로 웹 기반 응용 프로그램을 위한 UI를 만들 수 있습니다. XAML은 좀 더 두드러지게 강력한 요소들을 제공합니다.
Visual Studio 사용
Visual Studio 2008을 사용하여 Silverlight 기반 응용 프로그램을 만들 수 있는데, Visual Studio는 Silverlight를 위해 강력한 에디터, 프로젝트 관리, 디버깅, 등과 같은 동일한 도구를 제공합니다. 이미 이 것들은 .NET 프레임워크와 함께 응용 프로그램을 위해 제공하고 있습니다.
Expression Blend 사용
Microsoft Expression Blend는 Silverlight 기반 응용 프로그램 디자인과 빌드, 제공까지 할 수 있습니다. 또한 그래픽과 미디어 자료, 상호 작용 가능한 디자인 생성에 필요로 되는 모든 기능을 가지고 있습니다. Expression Blend로 XAML 파일을 생성할 수 있는데 이는 Visual Studio를 사용하는 프로그래머와 Expression Blend를 사용하는 디자이너가 같은 파일을 공유할 수 있다는 의미입니다.
이번 시간은 여기서 마치도록 하겠습니다. 오늘 다루었던 주제는 조금 개념적이지만 기본적으로 꼭 알고 넘어가셔야 합니다. 이해가 쉽게 되지 않는 부분은 앞으로 실제 예제를 다루면서 풀어나가도록 하지요. ^.^ 서울도 드디어 30도가 넘었습니다. 작년부터 여름이 너무 습하네요. 모두들 건강하시길 바라고, 활기차고 즐겁게 여름 보내시기 바랍니다. ^.^
RIA에 대한 내용들을 찾아 인터넷을 누비고 있는 세티입니다. 인터넷을 검색하다보면 RIA기술이 뭐에요? 라는 질문부터 Flex가 이길 것이냐, Silverlight이 이길 것이냐 하는 소모적인 내용도 보이곤 합니다. 이러한 글들을 읽고 나름 그러한 물음에 대해 혼자서 고민을 해보았고, 그 고민의 결과를 한번 적어보았습니다.
얼마전 부터 불기 시작한 RIA의 바람이 인터넷에 태풍이 되어 관련 글들을 마구 쏟아내고 있습니다. RIA기술이 이렇듯 주목받게 된 몇 가지 이유를 꼽아 보자면...
1. 강력해진 개인컴퓨터 파워 2. 보다 빨라진 브로드밴드 3. 엔드 사용자의 다양한 시각적 요구 4. 웹 플랫폼을 만족시키기 위한 움직임
에 기인한다고 봅니다.
사실 RIA와 개념적으로 유사한 기술은 이미 90년대 말부터 그러한 기술적 배경과 이론을 가지고 있어왔고, 큰 제약없이 Rich Application을 적용할 수 있는 기업시장과 같은 곳에서는 이미 관련 기술과 개념이사용되어 왔습니다. 새삼 새로운 것도 아니고 다만 널리 사용되지 않았을 뿐이라는 것이 제 개인적인 의견 입니다. 또한 지금의 RIA기술과는 조금 다른 형태지만 데스크탑 기반에서는 이미 널리 사용되고 있었고, 웹 기반에서는 Cross Platform이나 Cross Browser 지원이 문제긴 했지만 그렇다고 사용되지 않았던 것도 아닙니다. 아무튼 RIA든 Rich Client든 이미 강력해진 웹 플랫폼에서 어찌보면 데스크 탑 응용프로그램에서 이미 사용되던 인터페이스나 그래픽의 화려함을 끌어다 쓰기 위한 고민에서 출발했다고 여러 증거가 말하고 있고, 저 또한 그렇게 보고 있습니다.
어도비는 웹 상에서 데스크탑 응용 애플리케이션의 화려함을 일반 엔드유저에게 제공하기 위해 누구보다 발빠르게 움직인 것은 사실 입니다. 어도비와는 다르게 MS나 Sun은 자사의 언어를 이용한 Rich Application을 가지고는 있었지만 이것을 일반 엔드유저에게 제공하기 위해 Cross Platform, Cross Broswer 지원에는 소홀했다고 봅니다. 그리고 그 소홀한 틈을 타서 어도비(매크로미디어)는 발빠르게 대처했고, 그들이 새롭게 정립한 기술을 기존 기술과 차별화 하기 위해 RIA라는 용어를 제시했고, 그것은 결국 표준은 아니지만 하나의 표준 기술처럼 인식되며, 오늘날 리치 클라이언트를 표헌하기 위한 가장 인기있는 기술로 자리매김 하게 되었다고 봅니다.
Rich Client와 RIA를 굳이 분리한다면 제 생각에는 'Rich Client 보다 매우 가벼운 하나의 엔진을 가지고 있고, 브라우저에 플러그 인의 형태로 제공되며 가볍고, 네트워크에 강하고 그러면서 기존의 Rich Client에서 표현되던 것 보다 더 화려하고 사용자 친화적인 환경을 제공한다.'라고 구분하고 싶습니다. 그런 부분에서 어도비는 매우 선구자적인 역할을 했다고 보여 집니다.
Flash가 디자이너를 위한 기술이었다고 본다면 Flex는 개발자를 위한 기술적 개념을 제공합니다. 이번에 나온 Silverlight 역시 디자이너와 개발자를 모두 만족시키기 위해 노력하고 있으며, Flex와 똑같은 RIA기술 입니다. 이러한 Flex와 Silverlight는 자신들이 가지고 있는 기술적 환경 차이를 그대로 가지고 내려오면서 나름 발전을 시켜 나가고 있습니다. 그러한 이유로 어느 기술이 좋다, 나쁘다 하는 것은 아직은 성급한 결론이라고 보여집니다.
Flex는 사용자 기반이 매우 넓습니다. 그리고 관련 기술을 익히고 있는 개발자들은 이미 기술적 성숙함을 가지고 있습니다. 반면에 Silverlight는 나온지 얼마 안되었고, 이제 개발자들이 기술을 익혀야 하며, 또 사용자 기반이 부족하지만 가장 최근에 나온 기술이라 Flex가 가지는 몇 가지 부족한 점을 매워주고 있습니다. 하지만 그렇다하더라도 기술은 매번 발전하는 것이고, 또 늘 개선되고 있다는 점을 고려할 때 오늘 이 순간 유지하고 있는 기술적 우위나 시장적 우위는 얼마든지 변할 수 있습니다.
자바가 처음 세상에 나왔을 때 닷넷이 세상에 처음 나왔을 때 우리는 기술적 편견을 가지고 특정 기술에 올인하는 경향을 보여왔습니다. 그리고 그 기술의 우월성을 강조하기 위해 진지한 고민과 고찰 없이 기술회사가 강조하는 사안만 가지고 상대를 흠집내는데 열을 올리고 있습니다.
이제는 기술회사의 설명이 아니라 우리 스스로가 고민하고 Flex든 Silverlight든 '어떤 기준에서 가장 최고의 성능을 발휘하더라.' 라는 객관적 자료들이 많이 제시되고, 그것을 기준으로 기술의 장단점이 아닌 특성을 이야기 해야 한다고 보여집니다.
개발자라면 당연히 그래야 하고 기술에 대해 편견을 가져서는 안된다고 보여집니다. 또한 나의 기술이 소중하면 상대방의 기술도 소중하다고 생각해야 하고, 있는 그대로 현상 그대로를 가지고 서로 이야기 되어져야 한다고 봅니다.
여담입니만 제가 최고로 생각하는 개발환경을 포함하는 기술은 바로 이겁니다. "똑같은 결과물을 내고 비슷한 기술로 개발을 진행할 때 나 자신을 집에 빨리 보내줄 수 있는 기술" 전 이것을 최고의 가치로 여깁니다.
원글출처:http://silverlight.net/ 본 강좌는 위의 원글을 참고 및 번역해서 작성했으며, 글 중간중간 제 개인적인 표현이나 의견을 넣어서 각색했습니다.
안녕하세요~ 세티 입니다.
이미 몇 년전 부터 Rich UI, UX와 관련된 이야기들이 나오고 여러가지 타입의 애플리케이션을 통해 다양한 시도(브라우저 기반이 아닌 응용 document 애플리케이션들을 이용한 Rich UI)들이 이어져오더니 이젠 교통정리가 되는 것 같습니다. 그것은 2D 기반의 단순 텍스트 위주의 애플리케이션이 아닌 3D 기반의 화려한 그래픽으로 무장된 애플리케이션을 말합니다. 제 기억으로는 3D기반 Rich 애플리케이션의 플래쉬가 선두 주자 였던 것으로 알고 있습니다. 웹의 보조 컨텐츠로 사용되던 플래쉬가 이제는 마크업을 넘어 점차 부유한 애플리케이션으로 발전해 나가고 있습니다. 이러한 발전의 끝에 플렉스와 실버라이트가 경쟁하는 구도로 이어져가고 있으며, 이러한 경쟁은 현재도 진행형, 앞으로도 몇 년간은 진행형의 형태 일 것 같습니다.
이러한 제가 다룰 내용은 Rich UI, 그 중에서도 Microsoft의 실버라이트 입니다. 인터넷을 검색하면 실버라이트에 대한 아주 많은 그리고 양질의 데이터가 검색 되겠지만 그래도 세티는 세티만의 강좌를 진행해 볼까 합니다.~ 강좌도 쓰고 공부도 하고.... 세티에게는 일석이조 입니다. ㅋㅋ
실버라이트란 무엇인가? 마이크로소포트가 발표한 실버라이트는 웹에서의 닷넷 기반 미디어 경험과 리치 인터렉티브 어플리케이션을 실행하기 위한 차세대 크로스 브라우저, 크로스 플랫폼 플러그 인 입니다. 실버라이트는 웹 어플리케이션에 통합되기 위해서 AJAX, Python, Ruby 그리고 Visual Basic과 C#을 이용하여 유연하고 일관성있는 프로그래밍 모델을 지원합니다. 실버라이트 미디어는 Mac이나 Windows에서 실행되는 Firefox, Safari 그리고 IE 등과 같은 브라우저에 높은 수준의 오디오와 비디오의 전개를 빠르고 효과적인 비용으로 포함시키는 능력을 가지고 있습니다. 실버라이트 제작에 필요한 툴인 Expression Studio와 Visual Studio를 이용하여 디자이너와 개발자는 보다 가벼운 웹을 제작하는데 있어 더욱 효과적인 협업을 할 수 있게 되었습니다.
흥미로운 크로스-플랫폼 사용자 경험
비디오 애니메이션, 상호작용, 매우 멋있는 사용자 인터페이스를 포함하는 웹을 위한 리치 인터렉티브 어플리케이션
플리케이션(RIA)와 미디어 사용자 경험의 전개
어떠한 설치 요구가 없이 맥이나 윈도우즈의 일관성 있는 경험을 제공
퍼포먼스 증가로 클라이언트에게 유리한 값지고 완벽한 웹 경험 생성
실버라이트를 사용함으로써 기대되는 것은 화려한 그래픽 그리고 미디어의 퍼포먼스와 더불어 현존하는 표준 AJAX 기반 어플리케이션의 업그레이드
통합툴과 유연한 프로그래밍 모델
닷넷 프레임워크 기반, 실버라이트는 웹을 위한 미디어 경험과 RIA를 전개하기 위한 툴과 개발자와 디자이너가 현재의 기술로 충분히 활성화 할 수 있습니다.
기존 웹 기술과 자산으로 간단하게 통합한다는 의미는 back-end 웹 플랫폼이나 기술로 작업할 수 있다는 것을 의미합니다.
아파치, PHP 자바스크립이나 클라이언트상에 위치하는 XHTML을 포함하여 현존하는 인프라스트럭처나 어플리케이션을 통합합니다.
자바스크립트, 루비, 파이선, C#, VB,NET 그리고 그 외의 언어를 포함하기 때문에 개발자는 언어를 선택할 수 있습니다.
마이크로소프트 닷넷 플랫폼의 특성과 웹 표준 지원을 위한 디자이너와 개발자를 위한 특별한 툴, 인터렉티브한 사용자 경험과 미디어-리치 경험, 인코딩과 분산을 위한 미디어 준비하기, 그리고 XHTML, XML, XSLT, CSS 그리고 ASP.NET을 사용하는 W3C 표준 컴파일런트 사이트를 생성하기 위한 Expression Studio(디자이너)
인텔리센스, 강력한 크로스-플랫폼 디버깅, 리치 언어 지원 그 밖의 클라이언트와 서버 코드 개발을 위한Visual Studio(개발자)
XAML을 사용하는 일관성 있는 프리젠테이션 모델, 윈도우즈 비스타 어플리케이션에서 사용되는 프리젠테이션 언어. 컨트롤, 비주얼 디자이너, 미디어 그리고 또 다른 엘리먼트들은 실버라이트와 윈도우즈 어플리케이션과 함께 표현할 수 있는 프리젠테이션 언어.
확장 컨트롤 모델은 효과적인 코드 재사용과 공유를 활성화 할 수 있고, 리치 콘텐트 추가를 위해 쉽게 만들수 있다.
파워, 퍼포먼스, 그리고 실버라이트와 마이크로소프트의 유연성 과 더불어 AJAX가 활성화된 웹 사이트를 위한 퍼포먼스가 전개 되었다.
능률적이고 저비용의 배포와 더욱 강력해진 미디어 솔루션
마이크로소프트는 WMA와 MP3오디오를 잘 지원하는 SMPTE VC-1 비디오 표준 도구를 윈도우즈 미디어 비디오(WMV)와 같이 단일화된 미디어 포맷으로 HD에서 모바일까지 지원한다.
그래픽 통합을 지원하는 미디어 오버레이와 벡터 기반의 그래픽을 추가.
비주얼 사실성 또는 모션 퀄리티의 손실 없이 방송 스타일의 비디오나 애니메이트 광고를 지원하는 플렉시블한 비디오와 애니메이션을 솔루션에 추가.
윈도우 서버(롱혼)을 위한 미디어 팩을 서버에 장착할수 있어 비용을 절약할 수 있고, 저비용의 미디어 스트리밍과 에미상을 수상한 윈도우 미디어 기술.
윈도우즈 미디어 기술 플랫폼으로써 미디어 툴, 서버 그리고 솔루션의 방송 생태계
콘텐츠 제공자를 위한 윈도우즈와 맥을 지원하는 마이크로소프트우의 플레이레디(PlayReady)
미디어 경험을 사실적으로 표현할 수 있는 하드웨어 가속 기반의 강력한 인코딩 툴
웹, 서버 그리고 서비스의 연결
JSON, RSS, POX 그리고 REST와 같은 공용 프로토콜 데이터에 접근할 때 LINQ와 LINQ-to-XML을 실버라이트가 지원한다.
실버라이트 애플리케이션내의 인터페이스와 컨텐츠를 묘사하기 위해 XAML 포맷기반의 텍스트를 검색하고 인덱스할수 있는 RIA의 향상된 검색능력
호스트와 소프트웨어 서비스 그리고 미디어 콘텐츠의 통합 따른 윈도우즈 라이브에 의한 실버라이트 스트리밍의 빠른 스케일의 애플리케이션
웹 커뮤니티에 자유롭게 접근하기 위해서는 Silverlight가 여러 상용 운영 체제 및 브라우저에서 성공적으로 실행되어야 합니다. 따라서 최초 릴리스에서는 Windows에서 실행되는 Firefox 및 Internet Explorer®뿐만 아니라 Mac OS X에서 실행되는 Firefox 및 Safari 브라우저를 지원하며 제품이 발전할수록 더 많은 운영 체제 및 브라우저를 지원할 예정입니다. 이러한 기능 외에도 Silverlight는 비디오 재생을 위해 Windows Media® Player를 사용하거나 XAML 구문 분석을 위해 Microsoft .NET Framework 3.0을 사용하지 않는 등 다른 제품에 의존하지 않으며 완전히 독립적입니다.
이 기사에서는 Silverlight 아키텍처의 간략한 개요를 살펴보고 기본적인 Hello World 응용 프로그램부터 시작하여 Silverlight 응용 프로그램 몇 가지를 실제로 작성해 볼 것입니다. 그런 다음 간단한 미디어 플레이어를 만드는 방법에 대해 설명할 것입니다. 또한 Silverlight가 클라이언트 측 기술인데도 PHP 또는 Java를 실행하는 서버와 같이 대규모 서버에 사용하기에 적합한 이유도 알아보겠습니다.
Silverlight 소개
간단히 말해서 Silverlight는 내부 DOM(문서 개체 모델) 및 이벤트 모델을 스크립트 가능한 방식으로 브라우저에 제공함으로써 XAML을 렌더링하는 브라우저 플러그 인입니다. 따라서 디자이너가 그래픽, 애니메이션 및 타임라인을 포함하는 XAML 문서를 구성하면 개발자는 이를 한 페이지 내에 코드로 작성하여 기능을 구현할 수 있습니다. XAML은 XML을 바탕으로 작성되므로 UI를 정의하는 문서는 클라이언트에 텍스트 기반으로 다운로드되며 검색 엔진과 방화벽의 영향을 받지 않습니다. 또한 XAML은 런타임에 서버 응용 프로그램이 구성하고 전송하므로 풍부한 그래픽 환경을 제공할 수 있을 뿐만 아니라 사용자 지정 기능과 동적 기능면에서도 매우 우수합니다.
그림 1에는 UI를 정의하는 정적 XAML 파일과 이벤트 처리를 위해 JavaScript를 사용하는 간단한 Silverlight 응용 프로그램에 대한 분석이 나와 있습니다. 브라우저는 플러그 인을 인스턴스화하고 이 프로세스 중에 XAML 파일을 로드합니다. 파일에 포함된 단추 클릭 등과 같은 이벤트는 브라우저가 캡처하고 JavaScript가 처리합니다. Silverlight 콘텐츠의 DOM이 제공되므로 JavaScript 코드가 Silverlight 콘텐츠를 동적으로 업데이트하여 렌더링된 콘텐츠의 상태를 변경할 수도 있습니다.
그림 1샘플 응용 프로그램
그림 2에는 Silverlight 응용 프로그램을 지원하는 아키텍처가 나와 있습니다. 주 프로그래밍 인터페이스는 JavaScript DOM API입니다. 이 인터페이스를 사용하면 콘텐츠의 로드 완료 또는 애니메이션 완료 등과 같이 Silverlight XAML 내에서 발생하는 이벤트에 응답할 수 있습니다. 또한 메서드를 호출하여 애니메이션 시작 또는 비디오 재생 일시 정지와 같은 프레젠테이션을 조작할 수도 있습니다. 이러한 기능은 XAML 구문 분석 엔진을 기반으로 합니다. 파서는 XAML에 정의된 그래픽 및 애니메이션의 렌더링을 처리하는 프레젠테이션 코어를 위해 메모리 내에 XAML DOM을 생성합니다. 또한 런타임에는 WMV, WMA 및 MP3 멀티미디어 콘텐츠 재생에 필요한 코덱이 들어 있습니다.
그림 2Silverlight 아키텍처
마지막으로 런타임에는 렌더링 처리를 관리하는 프레젠테이션 코어가 들어 있습니다. 프레젠테이션 런타임은 앞에서 설명한 대로 Windows, Mac OS X 등 여러 운영 체제의 다양한 브라우저를 지원하는 브라우저 플러그 인에 기본 제공되어 있습니다. 따라서 독립적인 그래픽 및 미디어 렌더링 엔진을 브라우저에 연결하고 JavaScript를 통해 스크립팅할 수 있습니다.
XAML 개요
XAML은 그래픽 요소, 사용자 인터페이스, 동작, 애니메이션 등을 정의하는 데 사용되는 XML 기반 언어입니다. 이는 Microsoft의 .NET Framework 3.0에 포함된 데스크톱 지향 기술인 Windows Presentation Foundation용 태그 언어로서 처음 도입되었으며 응용 프로그램 생성 시 디자이너와 개발자 간 작업에 교량 역할을 하기 위해 고안되었습니다.
지금까지는 응용 프로그램을 만들기 위해 디자이너가 사용하는 도구 및 리소스 모음이 개발자가 사용하는 것과 달랐으며 이러한 차이는 결과 응용 프로그램에도 부정적인 영향을 줄 여지가 있었습니다. Microsoft는 디자인 전문가들이 그래픽 항목과 사용자 인터페이스를 개별적으로 구성하여 최종 결과를 XAML로 표현하면 이를 통해 개발자가 응용 프로그램을 구축할 수 있도록 Microsoft Expression® 및 Microsoft Expression Blend라는 새 Expression 도구 모음을 도입했습니다.
Silverlight의 최초 릴리스에 사용된 XAML은 데스크톱에 사용할 수 있는 완벽한 XAML의 웹 지향 하위 집합이므로 Windows Presentation Foundation에 사용된 XAML과는 차이가 있습니다. 따라서 Windows Presentation Foundation XAML에 익숙하다면 Silverlight XAML에 <Window> 태그, 페이지 리소스, 데이터 바인딩, 유용한 컨트롤 모델 등과 같은 기능이 없음을 알 수 있습니다.
XAML에서는 XML 태그를 사용하여 요소를 정의합니다. 각 Silverlight 문서의 루트 수준에는 UI 요소가 그려질 공간을 정의하는 Canvas 태그가 위치합니다. 이 Canvas에는 Silverlight에 필요한 XML 네임스페이스 선언이 들어 있습니다.
Canvas는 고유한 자식을 생성할 수 있는 자식 Canvas 등을 포함해 둘 이상의 자식을 가질 수 있습니다. 자식 Canvas의 위치는 부모 Canvas를 기준으로 상대적으로 지정되며 루트 Canvas만 예외입니다. 다음은 부모(Canvas)의 왼쪽 위 모서리에서 25픽셀 떨어진 곳에 위치한 사각형을 포함하는 Canvas의 예입니다.
Silverlight XAML은 다양한 도형을 지원하므로 이를 조합하여 복잡한 형태를 만들 수 있습니다. 기본 지원 도형에는 사각형(Rectangle), 타원(Ellipse), 선(Line), 다각형(Polygon), 다중선(PolyLine), 경로(Path)가 있습니다. 이름만으로도 모양을 쉽게 짐작할 수 있을 것입니다. 다중선은 연결된 줄 세그먼트를 정의하는 데 사용되며 경로는 Canvas에서 비선형 경로(예: 자유 곡선)를 정의하는 데 사용됩니다.
브러시는 화면에 개체를 어떻게 그릴지 정의합니다. Fill 명령을 사용하면 브러시의 내부가 채워지며 Stroke 명령을 사용하면 브러시의 윤곽선을 그릴 수 있습니다. 브러시에는 단색 브러시, 그라데이션 브러시 및 이미지 브러시가 있습니다. 단색 브러시는 앞서 예제에서 사용한 Fill="Black"과 같이 Fill 특성에 고정 색상을 지정하거나 다음과 같이 SolidColorBrush 속성을 연결하여 구현할 수 있습니다.
그라데이션 브러시는 표준 좌표 공간에서 그라데이션 범위 및 그라데이션 중지 지점을 지정함으로써 구현할 수 있습니다. 예를 들어 선형 그라데이션의 방향을 오른쪽에서 왼쪽으로 이동하고 색상이 검정에서 점점 흰색으로 변경되도록 설정한다고 가정하면 검정인 0(직선의 시작)에 그라데이션 중지점을 하나 지정하고 흰색인 1(직선의 끝)에 또 다른 그라데이션 중지점을 지정할 수 있습니다. 그러면 Silverlight가 그라데이션을 그립니다. 2차원 공간에 정사각형을 정의하여(0: 왼쪽 위, 1: 오른쪽 아래) 그라데이션을 그릴 수도 있습니다. 따라서 왼쪽 위 빨강에서 오른쪽 아래 검정으로 2차원의 그라데이션이 적용된 사각형을 정의하려면 다음과 같이 XAML을 사용합니다.
XAML에서 TextBlock 태그를 사용하면 텍스트를 렌더링할 수 있으며 내용, 글꼴, 크기, 래핑과 같은 텍스트의 요소를 제어할 수 있습니다. 다음은 이와 관련된 예입니다.
<TextBlock>Hello</TextBlock>
<TextBlock FontSize=”18”>Hello</TextBlock>
<TextBlock FontFamily=”Courier New”>Hello</TextBlock>
<TextBlock TextWrapping=”Wrap” Width=”100”>
Hello there, how are you?
</TextBlock>
이 밖에도 Silverlight는 텍스트 입력을 구현하는 데 사용되는 키보드 이벤트를 지원합니다. 루트 요소에서 키보드 이벤트(KeyDown 또는 KeyUp)를 정의하고 이벤트 인수를 사용하여 어떤 키가 눌러졌는지 추적할 수 있습니다.
변환, 미디어 및 애니메이션
XAML을 사용하여 개체에 대해 여러 가지 변환을 정의할 수 있습니다. RotationTransform은 정의된 각도로 요소를 회전하며, ScaleTransform은 개체를 늘이거나 줄이는 데 사용됩니다. SkewTransform은 개체를 정의된 방향으로 지정된 각도만큼 기울이고, TranslateTransform은 정의된 백터에 따라 개체를 이동합니다. MatrixTransform은 이러한 모든 변환을 적용할 수 있습니다.
변환을 그룹화하여 하나의 개체에 여러 가지 변환을 정의할 수 있습니다. 그림 3에는 그 예가 나와 있습니다. 이 예에서는 Canvas에 타원이 세 개 있습니다. Canvas 수준에서 변환을 정의하면 각 타원이 회전하거나 크기가 변경되게 됩니다.
오디오 및 비디오 콘텐츠는 MediaElement 태그를 사용하여 제어할 수 있습니다. 이러한 태그에는 재생할 미디어를 지정하는 source 특성이 들어 있습니다. 이 태그를 사용하여 정의된 개체는 미디어 재생을 제어하는 다양한 메서드 및 이벤트를 제공합니다. XAML을 사용하여 빌드되고 JavaScript를 통해 사용자 상호 작용(재생, 일시 정지, 중지 등)이 가능한 간단한 미디어 플레이어의 예는 이 기사 뒷부분에서 설명합니다. MediaElement의 정의 방법은 간단합니다.
XAML의 애니메이션은 타임라인 동안에 변경되는 속성을 정의함으로써 구현됩니다. 애니메이션 정의는 Storyboard 내에 저장됩니다. 애니메이션의 종류에는 숫자 속성을 변경하는 DoubleAnimation, 색상 및 브러시를 변경하는 ColorAnimation 및 2차원 값을 변경하는 PointAnimation 등 여러 가지가 있습니다. 이러한 애니메이션은 선형 또는 키프레임 기반으로 만들 수 있습니다. 선형 애니메이션의 경우 정의된 타임라인에 따라 애니메이션이 서서히 변경됩니다. 키프레임 기반 애니메이션을 사용하면 애니메이션이 각 값에 따라 변경될 수 있습니다.
그림 4에는 시간이 지남에 따라 원의 너비가 변경되는 간단한 애니메이션에 대한 예가 나와 있습니다. AutoReverse 속성이 True로 설정되어 있으므로 원의 너비가 커졌다가 작아지는 변환만 반복하는 것이 아니라 커졌다가 작아졌다가 다시 커지는 애니메이션이 반복됩니다.
간단한 Silverlight 응용 프로그램
Visual Studio 2005에서 Silverlight용 응용 프로그램 템플릿(Silverlight SDK 다운로드에 포함됨)을 사용하여 Silverlight용 응용 프로그램을 쉽게 빌드할 수 있습니다. 이 기사에서 필자는 Visual Web Developer™ Express 응용 프로그램을 사용했습니다. 이 응용 프로그램은 MSDN®에서 다운로드할 수 있습니다.
다음 예는 WMV 비디오 콘텐츠를 재생하는 매우 간단한 미디어 플레이어입니다. 이 예에서는 Channel 9 비디오(channel9.msdn.com)를 사용하지만 원하는 비디오로 변경하여 재생할 수 있습니다. XAML은 상당히 간단하며 그림 5에서 전체 내용을 볼 수 있습니다. 작업을 단순화하기 위해 Play, Stop 및 Pause 단추에는 TextBlock 요소가 사용됩니다.
MediaElement 태그는 비디오를 정의하는 데 사용됩니다. 이름은 mPlayer이며 크기는 640×400으로 설정했습니다. Source 태그에는 Microsoft 웹 사이트의 다운로드 항목으로 호스팅되어 있는 WMV 비디오가 지정되어 있습니다.
다음은 Play, Stop 및 Pause 단추를 정의하는 데 사용되는 세 개의 TextBlock 요소입니다. 이러한 단추는 Canvas의 왼쪽 위에 수직으로 배치됩니다. Canvas.Left는 설정되어 있지 않으므로 기본값인 0이 적용됩니다. 세 개의 TextBlock 요소에는 클릭될 때 실행될 JavaScript 이벤트 처리기인 MouseLeftButtonDown이 정의되어 있습니다. 단추를 마우스로 클릭하면 Silverlight에서 브라우저로 이벤트를 보내고 여기서 JavaScript가 이벤트를 캡처한 후 처리합니다.
이제 이 XAML을 사용하는 응용 프로그램을 완성하기 위해 Visual Web Developer Express에서 JavaScript 이벤트 처리기를 구현해 보겠습니다. 이 이벤트 처리기가 작동하려면 silverlight.js 파일이 필요합니다. 이 파일은 Silverlight용 SDK 다운로드에서 구하거나 MSDN 샘플 다운로드 사이트의 Silverlight 샘플에서 얻을 수 있습니다.
Visual Web Developer Express를 사용하여 새 웹 사이트를 만듭니다. 이 사이트 내에 \js라는 폴더를 만들고 생성된 폴더에 silverlight.js 파일을 추가합니다. \js 폴더를 마우스 오른쪽 단추로 클릭하고 새 항목 추가를 선택합니다. 새 파일 대화 상자에서 JScript 파일을 선택하고 eventhandlers.js로 이름을 변경합니다.
다음은 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 새 항목 추가를 클릭한 후 videoplayer.xaml이라는 새 XML 파일을 만듭니다. 그림 5와 같은 XAML을 입력합니다.
마지막으로 프로젝트에 새 HTML 페이지를 추가하고 Default.htm으로 이름을 변경합니다. JavaScript 라이브러리를 로드하고 로드한 라이브러리를 사용하여 Silverlight 플레이어의 인스턴스를 생성함으로써 XAML 콘텐츠를 렌더링할 수 있도록 HTML 페이지를 편집합니다. 그림 6은 Default.htm의 전체 소스 코드를 보여 줍니다.
페이지 맨 위의 스크립트 태그에서는 JavaScript 라이브러리, silverlight.js 및 eventhandlers.js를 가져옵니다. silverlight.js 라이브러리는 Silverlight 플러그 인의 다운로드 및 인스턴스화를 관리합니다. 이 라이브러리에는 브라우저 및 OS가 추상화되어 포함되어 있기 때문에 이에 대한 걱정 없이 Sys.Silverlight.createObjectEx 기능을 사용하여 새 Silverlight 컨트롤을 구현할 수 있습니다. Silverlight 플러그 인 자체는 ID가 지정된 DIV 블록 내에 있어야 합니다. 이 예의 경우 플러그 인이 들어 있는 DIV는 AgControl1Host입니다. Silverlight 콘텐츠를 인스턴스화할 때 이 ID를 사용할 것입니다.
Silverlight 컨트롤의 새 인스턴스를 생성하고 생성된 인스턴스를 구성할 다양한 매개 변수를 전달함으로써 Silverlight 플러그 인을 인스턴스화할 수 있습니다. 이러한 매개 변수에 대한 자세한 내용은 Silverlight SDK를 참조하십시오.
마지막 단계로, Play, Stop 및 Pause 단추 클릭 시 발생하는 이벤트를 처리할 JavaScript 기능을 구현해야 합니다. 이 코드는 eventhandlers.js에 들어 있어야 합니다.
function PlayVideo(sender,args)
{
var mPlayer = sender.findName(“mPlayer”);
mPlayer.Play();
}
function PauseVideo(sender,args)
{
var mPlayer = sender.findName(“mPlayer”);
mPlayer.Pause();
}
function StopVideo(sender,args)
{
var mPlayer = sender.findName(“mPlayer”);
mPlayer.Stop();
}
XAML의 Stop TextBlock에서 MouseLeftButtonDown 특성을 JavaScript:StopVideo로 지정합니다. Sender 및 Args 매개 변수를 사용하는 동일한 이름의 JavaScript 함수를 만들어 기능을 구현합니다. Silverlight에서 findName 함수를 사용하면 DOM 내에서 지정된 매개 변수와 일치하는 요소를 검색할 수 있습니다. 따라서 비디오 재생을 중지하려면 findName API를 사용하여 MediaElement를 검색합니다. XAML에서 이 요소의 이름은 mPlayer입니다. findName API가 이 개체에 대한 참조를 반환하면 이러한 참조를 JavaScript 변수에 로드할 수 있습니다. 이제 참조가 있으므로 비디오 중지를 재생하기 위해 Stop 메서드를 호출하기만 하면 됩니다. Play(재생) 및 Pause(일시 정지) 기능의 작동 원리는 유사합니다.
이제 끝났습니다. 간단한 비디오 플레이어가 즉시 Silverlight를 통해 생성됩니다. 응용 프로그램을 실행하면 그림 7과 같은 화면이 표시됩니다.
그림 7간단한 비디오 플레이어 (더 작게 보려면 이미지를 클릭하십시오.)
그림 7간단한 비디오 플레이어 (더 크게 보려면 이미지를 클릭하십시오.)
이러한 방법은 비디오의 URI를 XAML에 하드코딩하려는 경우에는 매우 적합하지만 일반적으로 사용할 수 있는 방법은 아닙니다. 이러한 정적 HTML 페이지를 변경하여 비디오를 매개 변수로 받을 수 있는 Web Form으로 변경해 보겠습니다.
첫 번째 단계는 XAML에서 미디어 파일에 대한 참조를 제거하는 것입니다. XAML에서 MediaElement를 변경하여 Source 특성을 제거합니다. 제거를 마친 XAML은 다음과 같습니다.
그런 다음 응용 프로그램에서 VideoPlayer.aspx라는 새 Web Form(ASPX)을 만듭니다. 이 Web Form은 그림 6과 같이 videoplayer.xaml이라는 소스가 포함된 Silverlight 컨트롤을 인스턴스화해야 합니다. 또한 다음과 같은 JavaScript 코드도 포함해야 합니다.
<script type=”text/javascript”>
function root_Loaded(sender,args) {
var mPlayer = sender.findName(“mPlayer”);
mPlayer.Source =
“<% Response.Write(Request.Params[“VideoURI”]); %>”;
mPlayer.Play();
}
</script>
XAML에는 Canvas가 로드할 때 실행될 이벤트에 대한 이벤트 선언이 들어 있습니다. 이러한 이벤트 선언은 JavaScript의 root_Loaded 이벤트 처리기에서 캡처합니다. 이 함수는 ASP.NET을 사용하여 서버의 HTTP 요청에서 VideoURI를 분리하고 이 VideoURI를 JavaScript 함수에 넣어 비디오 소스를 설정합니다. 페이지를 실행하면 Silverlight에서 VideoURI 매개 변수의 비디오를 렌더링합니다. 이 예는 너무 간단해서 오류 처리 또는 필터링이 없으므로 응용 프로그램에 이러한 유형의 기능을 제공하려면 별도로 추가해야 합니다.
<script type=”text/javascript”>
function root_Loaded(sender,args)
{
var mPlayer =
sender.findName(“mPlayer”);
mPlayer.Source = “xbox.wmv”;
mPlayer.Play();
}
</script>
그런 다음 이 JavaScript가 MediaElement로 xbox.wmv 파일을 로드하고 Silverlight가 비디오를 재생합니다. 이를 통해 서버 측 활성 페이지(ASPX, PHP 또는 Java)를 보다 유연하게 만들면 Silverlight 최종 사용자 환경을 크게 개선할 수 있음을 알 수 있습니다.
Silverlight와 서버 응용 프로그램
Silverlight를 단순히 브라우저에 풍부한 콘텐츠를 포함하기 위한 클라이언트 기술로 생각하면 안 됩니다. 풍부한 컨텐츠는 Java Applet, ActiveX® 컨트롤 또는 Flash 응용 프로그램 등으로 구축된 닫힌 플러그 인을 통해서도 가능합니다. 반면 Silverlight는 UI가 텍스트 기반 XAML로 정의되어 있고 JavaScript를 통해 프로그래밍 기능이 구현되므로 열린 기술입니다. 이를 통해 개발자들은 백 엔드 서버와 상호 작용 할 수 있는 응용 프로그램을 쉽게 구축할 수 있습니다.
예를 들어 날씨 응용 프로그램을 생각해 보면 클라이언트 측에서 날씨 응용 프로그램을 만들려는 경우에는 웹 서비스를 사용하는 Java applet, ActiveX 컨트롤 또는 Flash 응용 프로그램을 빌드한 다음 이러한 애플릿을 클라이언트에 배포할 수 있습니다. 하지만 이렇게 되면 클라이언트와 서버 간 통신 요구가 증가하게 됩니다. 만약 이러한 데이터가 유료 구독 서비스라면 어떨까요? 응용 프로그램을 배포한 사람은 데이터 서비스에 액세스하는 클라이언트에 대한 라이센스 승인 작업을 하느라 도메인 관련 비즈니스 논리를 빌드할 시간이 없을 것입니다.
하지만 서버 측에서 응용 프로그램을 구성하고 모든 데이터를 클라이언트로 전달할 수 있다면 이러한 작업에 대한 부담을 덜 수 있을 것입니다. Expression Blend와 같은 도구를 사용하면 응용 프로그램의 사용자 인터페이스를 위한 템플릿을 XAML로 구성하고 표현할 수 있습니다. 그러면 런타임에 개발자가 관련 데이터를 가져와 템플릿에 삽입하고 완성된 XAML을 클라이언트로 반환하면 클라이언트에서 XAML을 렌더링합니다. 클라이언트 측에서는 논리 또는 연결(물론 초기 연결된 서버는 제외)이 필요하지 않기 때문에 클라이언트의 배포 및 관리는 상대적으로 수월하게 됩니다.
날씨 응용 프로그램 작성
이 섹션에서는 날씨 응용 프로그램을 구현하는 간단한 XAML 파일(그림 8 참조)을 작성하는 방법에 대해 알아보겠습니다. 완성된 날씨 응용 프로그램은 응용 프로그램의 브라우저 내 주소에 매개 변수로 전달된 특정 우편 번호에 대한 3일간의 기온 예보를 렌더링하게 됩니다. 또한 날씨, 정확한 날짜, 우편 번호로 지정된 위치 이름 및 날씨 데이터 애니메이션을 그래픽으로 표현하여 렌더링합니다. 날씨 응용 프로그램에 대한 모든 XAML 목록은 MSDN Magazine 웹 사이트에서 볼 수 있습니다.
그림 8Silverlight 날씨 응용 프로그램 (더 작게 보려면 이미지를 클릭하십시오.)
그림 8Silverlight 날씨 응용 프로그램 (더 크게 보려면 이미지를 클릭하십시오.)
문서의 맨 위에는 여는 Canvas 태그가 위치합니다. 이는 개체가 그려지는 기본 컨테이너입니다. 하나의 Canvas에 국한되지 않으므로, Canvas를 사용하여 관련 요소를 모두 그룹화할 수 있습니다. 따라서 각 날짜에 그래픽, 최고 기온, 최저 기온 및 다양한 레이블이 포함되고 이 모든 데이터가 하나의 XAML 템플릿으로 수집됩니다. 그림 9는 특정 날짜에 대한 예가 나와 있습니다. 이 예에서는 Canvas에 다양한 TextBlock 및 Image 컨트롤이 들어 있습니다. 이 Canvas의 이름은 cnv2로 지정되어 있고 불투명도가 0(즉 처음에는 보이지 않음)인 화면에 위치하고 있습니다. Canvas가 화면의 특정 위치에 오도록 높이, 너비, 왼쪽 및 맨 위 값이 설정되어 있습니다.
TextBlock은 Silverlight에서 텍스트를 렌더링하는 데 사용됩니다. TextBlock에는 여러 가지가 있는데, lblDegHigh2 및 lblDegLow2라는 TextBlock에 저장된 "°F" 레이블과 같이 하드코딩된 레이블로 사용되는 것도 있습니다.
lblDate2, lblHigh2 및 lblLow2라는 TextBlock에는 자리 표시자 정보가 들어 있습니다. 이 예에서는 이러한 TextBlock이 특정 데이터 및 온도로 하드코딩되었지만 ASP.NET 코드에서는 이러한 정보가 지정된 우편 번호에 해당하는 실제 날짜 및 온도로 다시 정의됩니다.
페이드 인 애니메이션 정의
Canvas 노드는 이벤트에 대한 작업을 실행하는 트리거를 지원합니다. 이 예에서는 다음과 같이 Canvas.Triggers가 페이지가 로드될 때 발생하도록 지정되어 있습니다.
애니메이션 유형은 DoubleAnimationUsingKeyFrames입니다. Canvas 및 자식 Canvas의 불투명도(UIElement.Opacity에 지정됨)를 0에서 1로 수정하여 일정한 시간 동안 페이드 인하도록 할 수 있습니다. 시간은 애니메이션과 관련된 키프레임을 통해 정의합니다.
XAML이 렌더링되면 스토리보드가 시작되어 첫 번째 요소가 렌더링 시작(0초) 후 1초 사이에 불투명도 0에서 1로 페이드 인하도록 합니다. XAML을 보면 다른 Canvas들이 1초와 2초 사이, 2초와 3초 사이에 각각 페이드 인하여 차례로 표시되는 사실을 알 수 있습니다.
XAML은 유효한 XML 형식이기 때문에 요소에 특성을 명명할 수 있으며 이를 통해 요소를 호출할 수 있습니다. 예를 들어 하루 최고 기온에 대한 자리 표시자 요소는 다음과 같습니다.
웹 페이지에서 Silverlight를 실행하면 컨트롤이 획득한 매개 변수 중 하나가 렌더링할 XAML의 위치입니다. 이때 XAML은 동적 언어로, 날씨가 요청되는 우편 번호에 따라 변경됩니다. 따라서 XAML을 생성하고 반환하는 웹 응용 프로그램을 만들면 XAML을 렌더링하는 페이지가 이러한 웹 페이지를 참조하게 됩니다. 이는 이러한 Silverlight 응용 프로그램을 구축하기 위한 첫 단계입니다.
Visual Studio®를 사용하여 새 웹 프로젝트를 만듭니다. 앞서 비디오 플레이어에서와 같이 \js 폴더를 만들고 생성된 폴더에 silverlight.js 파일을 추가합니다. 다음에 정의된 웹 서비스를 참조하는 프로젝트에 새 웹 참조를 추가합니다.
서비스의 이름을 weatherservice로 지정합니다. 프로젝트에 새 Web Form을 추가하고 Web Form XAMLSource.aspx를 호출합니다. Add Code as a Separate Page(별도의 페이지로 코드 추가) 옵션을 선택합니다. 코드 페이지의 맨 위에 다음과 같은 지시문이 있는지 확인합니다.
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Xml.XPath;
XAMLSource.aspx의 Page_Load 이벤트 처리기에 코드를 추가하는 방법은 이 섹션의 뒷부분에서 설명하겠습니다. 일단 XMLDocument 개체에 Scene.xaml이라는 템플릿을 로드합니다.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath(“Scene.xaml”));
다음은 읽기 매개 변수를 설정합니다. 페이지 호출 시 필요한 우편 번호를 지정하는 쿼리 문자열 매개 변수를 사용하게 됩니다.
이 코드는 웹 서비스 프록시의 인스턴스(Visual Studio에서 서비스의 WSDL에 참조를 추가하면 생성됨)를 생성하여 myWeather를 호출합니다. 웹 서비스는 WeatherForecasts 데이터 구조에 있는 데이터를 반환하므로 서비스의 GetWeatherByZipCode 메서드 호출을 통해 이러한 데이터 구조의 인스턴스(myForecast)를 생성한 후 문자열을 전송합니다. forecast 개체의 Details 멤버는 WeatherData 유형의 배열이므로 변수 myResults는 이러한 개체의 인스턴스로 설정됩니다.
다음 단계는 검색을 위해 XPath를 사용하여 XMLDocument를 초기화하는 것입니다. XML은 일부 요소(x:Name와 같이 x 접두사가 붙은 요소)에 대한 네임스페이스로 XAML 스키마를 사용하므로 페이지에서 접두사가 붙지 않은 요소를 포함해 모든 요소에 대한 네임스페이스를 정의해야 합니다. 예를 들어 XPath //TextBlock과 일치하는 노드는 검색할 수 없지만 기본 네임스페이스에 새 접두사, 이 예의 경우 더미(dummy)를 뜻하는 d를 지정한 후 이러한 접두사를 사용하여 기본 노드를 검색하면 //d:TextBlock을 검색할 수 있습니다. 코드는 다음과 같습니다.
NameTable myn = new NameTable();
XmlNamespaceManager mng = new XmlNamespaceManager(new NameTable());
mng.AddNamespace(“d”,
“http://schemas.microsoft.com/winfx/2006/xaml/presentation”);
mng.AddNamespace(“x”, “http://schemas.microsoft.com/winfx/2006/xaml”);
XPath를 사용할 수 있으므로 마을 이름이 들어 있는 노드를 검색하여 Text 속성을 우편 번호로 식별되는 서비스로 마을 이름으로 변경할 수 있습니다.
마지막 단계는 솔루션에 새 XML 파일을 추가하고 Scene.xaml으로 이름을 변경하는 것입니다. 이전 코드에서 이 파일이 참조된 것을 보았을 겁니다. 전체 날씨 XAML을 가져와서 이 파일에 붙여넣습니다. 이제 페이지를 실행하면 XAMLSource.aspx 페이지에서 반환된 XAML이 브라우저에 표시됩니다.
Silverlight 프런트 엔드에 XAML 제공
이전 단계에서는 템플릿 XAML을 빌드하고 웹 서비스를 사용하는 Web Form에 이러한 XAML을 포함한 다음 웹 서비스 호출에 대한 결과를 XAML의 올바른 위치에 넣었습니다. 이제 Silverlight 컨트롤이 들어 있는 페이지를 제공하고 이러한 XAML 서비스에 지정해야 합니다.
이전 섹션에서 사용한 웹 사이트를 열고 Default.aspx라는 새 Web Form을 추가합니다. Default.aspx의 HTML 코드를 그림 11과 같이 수정합니다.
여기서 중요한 부분은 Silverlight.createObjectEx에 대한 호출로, 정적 videoplayer.xaml이 XAML 소스 응용 프로그램에 대한 호출로 바뀜으로써 이러한 Default.aspx 페이지가 우편 번호 식별을 위해 받은 매개 변수를 XAML 소스 응용 프로그램에 전달한다는 점입니다.
“WeatherSite/XamlSource.aspx?ZIP=<%
if (Request.Params[“ZIP”] == null)
Response.Write(“98052”);
else
Response.Write(Request.Params[“ZIP”]);
%>”
이 코드는 페이지에 요청 매개 변수를 가져와 URL에 추가하여 마지막 단계에서 생성된 XamlSource 페이지를 호출합니다. 그런 다음 XamlSource를 호출하여 우편 번호를 전송하고 Silverlight에서 렌더링할 XAML 문서를 얻습니다. Default.aspx?ZIP=90210의 실행 결과는 그림 8에 나와 있습니다.
요약
이 기사에서는 Silverlight에 대해 자세히 소개했습니다. 또한 단순히 "Hello, World"라는 응용 프로그램만 설명하지 않고 XAML을 사용하여 사용자 인터페이스를 생성하는 방법, XAML을 JavaScript에 연결하여 상호 작용하는 방법, 단순한 클라이언트 패러다임에서 벗어나 서버 기반 패러다임으로 이동하여 응용 프로그램의 유연성을 높이는 방법 등 다른 응용 프로그램에 대해서도 살펴보았습니다. 이러한 방법론을 사용하여 비디오 스트림의 URI를 받아 재생하고, 블로그 등에서 사용하기에 적합한 간단한 비디오 플레이어를 생성하는 방법도 알아보았습니다.
또한 매우 간단한 클라이언트 배포 모델이 포함된 날씨 모니터 형태로 구현된 데이터 인식 응용 프로그램을 빌드하는 방법도 살펴보았습니다. Silverlight 구성 요소를 통해 서버에서 간단히 올바른 XAML을 호출하여 이를 렌더링함으로써 풍부하면서도 간편한 클라이언트를 만들어 보았습니다.
ASP.NET 및 Microsoft 스택은 이와 같은 웹 응용 프로그램을 빌드하는 데 매우 생산적인 플랫폼 중 하나이지만 이 기사의 다운로드에는 이러한 응용 프로그램의 Java 버전도 들어 있습니다. 이 버전은 ASP.NET 버전과 동일하게 웹 서비스를 사용하여 데이터를 얻은 다음 XML 문서 DOM에 XAML을 로딩하는 기능을 제공합니다. 그런 다음 템플릿 데이터에 해당하는 노드를 찾아 이러한 노드 값을 웹 서비스 노드 값으로 변경한 후 완성된 XAML을 URI로 작성합니다. 그런 후에 JSP(코드는 생략)를 생성하여 이러한 서블릿의 URL을 참조한 후 Silverlight를 통해 XAML을 렌더링합니다.
웹에서의 Silverlight 활용은 이제 시작 단계입니다. Silverlight는 XAML 렌더링 엔진의 유용한 기능 및 기본 웹 개발 기술의 유연한 사용을 제공하므로 개발자 도구 모음에 추가할 가치가 있는 도구입니다. 자세한 내용은 MSDN의 Silverlight 개발자 센터를 참조하십시오.