Blog | Tag | Local | Guest | Login | Write |  RSS
.net Framework에 해당되는 글 4건
2008.11.20 :: XML? XAML? (part 2)
2008.10.30 :: XML? XAML?
2008.10.23 :: CLR, FCL
XML? XAML? (part 2)


저번 포스팅에 제목으로만 달아놓고 쓰지못했던 XAML이란 것에 대해 간략히 이야기 해보고자 합니다.

XAML이란?

XAML (Extensible Application Markup Language) = 확장 응용프로그램 마크업 언어
원래는 윈도우 프리젠테이션 파운데이션의 코드이름인 Avalon에서 따와서 Extension Avalon Markup Language의 약자였죠.
[zæ:mɛl]로 발음한다고 하네요.

.NET Framework를 공부하고 계시는 분이면 최근까지 런칭된 .NET Framework가 3.5까지 나와있다는 점과 WPF(윈도우 프리젠테이션 파운데이션), Silverlight등의 Framework와 관련된 여러 도구들이 나왔다는 것을 한번쯤 들어봤을것이라고 생각합니다. 이것들이야 말로 XAML(MS의 XML)기반의 서비스를 구축하기 위한 도구들입니다. 

XAML 요소는 공통 언어 런타임 객체 인터페이스에 직접 매핑할 수 있지만 XAML은 공통 언어 런타임 속성과 이벤트를 해당 객체로 매핑하는데 사용합니다.  일반 XML문서와 마찬가지로 표준 문서 편집기, XAMLPad와 같은 코드 편집기, Vectropy와 같은 그래픽 편집기로 만들어 편집할 수도 있습니다. (물론 다들 Visual Studio를 열고 쓰시겠죠;) 급하게 수정해야할 부분이라면 간단히 notepad 같은 걸로 열고 수정하기엔 편하죠.

좀 더 쉽게 풀어쓰자면 XAML은 그래픽 요소, 사용자 인터페이스, 동작, 애니메이션 등을 정의하는 데 사용되는 XML 기반 언어이면서 Microsoft의 .NET Framework 3.0에 포함된 데스크톱 지향 기술인 윈도우 프리젠테이션 파운데이션용 태그 언어로서 처음 도입되었으며 응용 프로그램 생성 시 디자이너와 개발자 간 작업에 교량 역할을 하기 위해 고안되었습니다라고 할 수 있습니다.

지금까지는 응용 프로그램을 만들기 위해 디자이너가 사용하는 도구 및 리소스 모음이 개발자가 사용하는 것과 달랐으며 이러한 차이는 결과 응용 프로그램에도 부정적인 영향을 줄 여지가 있었습니다. Microsoft는 디자인 전문가들이 그래픽 항목과 사용자 인터페이스를 개별적으로 구성하여 최종 결과를 XAML로 표현하면 이를 통해 개발자가 응용 프로그램을 구축할 수 있도록 Microsoft Expression 및 Microsoft Expression Blend라는 새 Expression 도구 모음을 도입했습니다.

그리고 일반적으로 이런 내용에 대해서 한번쯤 들어보신분들도 가끔 모르는게 있는데 Silverlight의 최초 릴리스에 사용된 XAML은 데스크톱에 사용할 수 있는 완벽한 XAML의 웹 지향 하위 집합이므로 Windows Presentation Foundation에 사용된 XAML과는 차이가 있습니다. 따라서 WPF XAML에 익숙하다면 Silverlight XAML에 <Window> 태그, 페이지 리소스, 데이터 바인딩, 유용한 컨트롤 모델 등과 같은 기능이 없는 걸 금방 눈치채실 수 있을것이라 생각합니다.

XAML에서는 XML 태그를 사용하여 요소를 정의합니다. 각 Silverlight 문서의 루트 수준에는 UI 요소가 그려질 공간을 정의하는 Canvas 태그가 위치합니다. 이 Canvas에는 Silverlight에 필요한 XML 네임스페이스 선언이 들어 있습니다.
<Canvas    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”></Canvas>

Canvas는 고유한 자식을 생성할 수 있는 자식 Canvas 등을 포함해 둘 이상의 자식을 가질 수 있습니다. 자식 Canvas의 위치는 부모 Canvas를 기준으로 상대적으로 지정되며 루트 Canvas만 예외입니다. 다음은 부모(Canvas)의 왼쪽 위 모서리에서 25픽셀 떨어진 곳에 위치한 사각형을 포함하는 Canvas의 예입니다.
<Canvas Width=”250” Height=”200”>  <Rectangle Canvas.Top=”25” Canvas.Left=”25”        Width=”200” Height=”150” Fill=”Black” /></Canvas>


우선 이번에는 간단한 내용만 이야기를 하고 맺도록 하겠습니다.
여담이지만 차세대 웹 표준으로 인해 최근 많은 논란이 있었죠. XForm, XAML, XUL 등등 각기 다른 회사에서 채택한 사용방식중 어떤 것을 사용할 것 인지에 대한 논란이죠. 상대적으로 현재는 XAML이 가장 우세하다고 하지만 우선은 좀 더 두고봐야 할테고..일단 공부는 그래도 계속해야죠 ㅋ

Reference by Wikipedia, jowon.springnote.com


XML? XAML?


.net framework 가장 처음 포스팅에서 말했던 부분을 다시 살펴봅시다~

.NET이라는 목표를 이루기 위해 실질적으로 돌아가는 Window기반의 응용프로그램을 개발하기 위한 기반이 되는 환경이 바로 .NET Framework라고 이야기 했었구요~

여기 목표라고 써있는 .NET이란 XML기반의 웹 서비스를 통해 서로 다른 시스템을 통합하기 위한 제반 환경 및 기반이라고 이야기 했었습니다.

자 대략적인 내부구조의 개괄적인 설명은 앞의 2포스팅에서 거의 다봤다고 생각이 드는데 XML이란 부분에서 약간 걸리는 것이 있네요 'XML기반의 웹 서비스'라고 할 때 XML이 뭔지 우선 알아야 할 법하여 간략히 정리해 보겠습니다. 아마 XAML이란 용어도 어디선가 들어보셨을 법하여 우선 제목에 같이 써놓았습니다.

XML?

우선 거창하게 영어 이름부터 풀어놓아보겠습니다. Extensible Markup Language. 해석하면 확장가능한 생성 언어 정도겠군요.
역사만 따져보면 XML은 1996년 W3C에서 제안하였구요 1998년 2월 W3C에서 처음으로 표준을 발표한 이래로 꾸준히 발전하면서 새로운 웹을 만들기 위한 여러 시도 중 한가지이면서 새로운 웹의 어찌보면 가장 기반이 되는 기술이라고 할 수 있을 정도로의 큰 부분이기도 합니다.

웹에서 가장 많이 기본으로 보는 것이 HTML입니다. 근데 ML부분이 일단 같은 약자입니다. 웹과 관련된 부분이니 역시 큰 연관관계가 있겠죠. 지금의 웹은 HTML로도 잘 돌아가고 있습니다. 여러 스크립트 언어나 서버 사이드 스크립트언어(PHP와 같은)언어들로 동적으로도 잘 돌아가고 있습니다. 하지만 곰곰히 생각해보면 문제가 있습니다.

최근 크롬이나 파이어폭스 등 브라우져가 널리 배포되면서 이곳저곳 페이지에 들어가보면 IE에서는 잘 돌아가던 페이지가 안되는 부분이 꽤있죠. 특히 초창기에 심했구요. 심지어 브라우저가 제작되던 초기에 IE와 넷스케이프도 자주 겪던 일인데 호환성의 문제가 있습니다. HTML은 분명 display를 위한 정적인 언어지만 이를 보완하기 위해 스크립트 등을 사용하다보니 각 스크립트, 제품별로 상호호환이 안되는 것이 큰 문제였고 지금 또한 그러한 문제가 남아있습니다.

또하나의 커다란 문제는 HTML은 display를 위한 언어, 즉 사용자가 눈으로 보고 읽을 수 만 있다면 컴퓨터는 그냥 뿌려주기만 하면 되는 역할을 가진 언어입니다. 동적으로 뿌려주는 부분은 프로그램으로 결국 클라이언트의 요청을 서버에서 처리하여 정적인 HTML 페이지를 클라이언트에게 보내주는 것일 뿐입니다. 하지만 이러다보면 문제가 자연스레 생깁니다. 요즘 검색엔진이 유난히 많아졌는데 검색어를 넣다보면 완전 엉뚱한 링크들이 모여있는 것을 볼 수 있습니다. 이게 바로 HTML로 이루어진 문서의 문제인데 검색어가 설령 HTML로 이루어진 페이지 속에 들어있다 하더라도 동의어나 문맥의 어떤부분인지 비중은 어떠한지에 대해 컴퓨터는 전혀 알 수 없기 때문에 검색을 하라고 컴퓨터에 시켜도 결국 정확한 값을 얻어오기는 힘들다는 것 입니다.
(이부분을 보완하기위해 수많은 알고리즘과 많은 테스트, 시도 등이 있었고 지금도 있습니다.)

또한 그외에도 HTML은 우선 태크가 한정적이기 때문에 구시대에는 그것만으로 모든 것을 표현 가능했을지 모르나 표준이 추가되지 않는한 확정성이 상대적으로 제한적입니다.

여튼 이런 문제들을 XML로 해결할 수 있다! 가 XML이 나오게 된 이유라고 할 수 있습니다. (즉 HTML의 문제점이 되는 부분을 해결할 수 있다.) 라는 것이죠.

물론 이런 문제점을 보완하기 위해서 제시된 표준이 XML이 최초는 아닙니다. SGML(표준화된 일반 마크업 언어)라고 하여 정부기관 등에서 많이 사용된 언어가 있습니다. 하지만 덩치가 크고 무거운 표준이고 웹이 발달하기 전의 언어라 웹에 대한 지원이 부족하기 때문에 웹에 사용하기에는 부적합했습니다. 하지만 결국 이것이 XML의 모태라고 해도 될 것 같습니다. XML은 현재 SGML의 많은 기술적인 부분을 받아들여 발전해 나가고 있습니다. 간략하게 둘을 비교하자면 아래의 그림과 같습니다.



그럼 다시 정리해서 XML의 장점은 뭐냐! 이렇게 물어본다면

1. 문서의 내용, 디자인이 완전히 분리되어 있다는 겁니다.
(문서의 구조는 XML문서를 통해서 트리구조의 구조적인 형태로 나타냅니다. 그리고 출력, 포매팅은 XSL 문서를 통해서 나타낼 수 있습니다.)

2. 다양한 방식의 링크 기능을 제공합니다.
(XLink, XPointer를 이용하면 기존 HTML에서 이용하던 하이퍼링크 이상의 기능을 발휘할 수 있습니다.)

3. 표준화된 DTD를 통해서 모든 분야에서 사용이 가능합니다.
(많이 사용되는 WML, SMIL, SVG등이 모두 XML에 기반을 둔언어입니다. 이것은 XML의 DTD를 선언하고 모든 사용자가 그 규칙에 맞추어 사용하면 컴퓨터나 사람이 모두 해석할 수 있는 메타 언어가 된다는 거죠.)

장점을 써놓았지만 처음보시는 분이 딱보고 2가지 이상이해 하셨으면 성공입니다~ 나머지는 차근차근 알아가면되겠구요
자 그럼 XML이란 것이 HTML로 이루어진 문서보다 낫다라는 식으로 앞에서 이야기 했던것은 다름이 아니라 어떤 신문기사에 나온 내용을 XML로 가지고 있다면 이를 다른 미디어로 보내는 것은 XML 포매팅만 새롭게 해준다면 기존의 XML문서를 이용해서 쉽게 할 수 있습니다. (<- 한번만 더 읽어보시고 잘 생각해보세요. 기존의 신문기사를 보고 만약 다른 미디어로 이를 재현하려면 어떠한 노력이 들지를 생각해보세요)

이런 것이 가능한 이유는 XSLT라는 W3C에서 발표한 XML표준안 때문입니다. 각 밴더들이 이에 대한 솔루션을 내놓고 있구요. 예시를 들자면 XSL의 포매팅 객체 (Formatting Object)를 이용해서 PDF파일(아크로뱃리더)형식과 HTML과 WAP의 3가지 형태로 출력하는 외국의 사이트를 본적이 있네요.. (http://www.renderx.com/)
이런 식으로 최근에는 XML이 보편화 되어가고 있습니다.

이렇게 좋은 것을 왜 널리 안쓰고 있느냐라고 하지만 XML은 현재 제한된 부분만 구현되어있고 개발되어지고 있다라는 것을 알고 이번 포스팅은 여기까지 하도록 하겠습니다. (표준이 제시되었다고 해서 완성된 것은 아니죠)

Referenced by XML DeveloperGroup Community & Wikipedia


CLR, FCL

 

앞서서 이야기한 CLR(Common Language Runtime:공용언어런타임)과 .NET Framework Class Library 이 두가지가 프레임워크의 크게 2가지로 나뉘어진 부분이라 언급했는데 좀 더 자세한 설명을 추가하고 이야기를 하고자 합니다.

CLR

CLR은 코드 관리환경이며 여기서 실행되는 코드를 관리코드(Managed Code)라고 하였는데 이들은 CIL(Common Intermediate Language)라고 하는 중간언어로 구성되어있다. 일반적인 언어는 그 언어의 컴파일러를 통해 각 플랫폼에서 실행가능한 코드(Native Code)로 전환되는데, .NET Framework의 경우는 Managed Code에서 CIL로 변환되고 최종적으로 플랫폼에서 실행가능한 코드(Native Code)로 전환된다.

이러한 부분을 보았을 때 기존의 언어들로 이루어진 코드와 컴파일러를 통해 만들어진 프로그램에 비해 하나의 과정이 추가되어 있기 때문에 시간이 더 걸릴 것이라는 의구심을 가질 수 있다. (물론 사용해보면 알지만 역시 느리긴하다 -_-;) 때문에 MS의 개발자들은 JIT컴파일러의 최적화에 많은 시간을 할애 하였기에 최종 실행시간은 기존의 방법과 거의 동일하다는 결론을 내릴 수 있도록 되었다. (일반적인 인터프리터 코드처럼 느리지 않다)

.NET Code의 커다란 장점은 관리 코드를 만든다는 것이다.
몇가지 관리 코드의 잘 알려진 장점을 살펴본다면

Memory Leak(메모리 누수)가 발생될 수 있는 부분의 원천봉쇄 (예: 포인터 사용금지)
관리 스택, 관리 힙의 사용(불필요한 메모리 공간 사용이 없음)
보안에 대한 부분의 고려
메모리 공간의 자동적 관리기능(Garbage Collector)
등등등~

이런 것들이 주욱 있다 이는 개략적으로만 알아두고 후에 코드를 통한 구현을 하면서 느끼는 것이 낫다고 생각하여 여기까지만 적어둔다.
잠시 이야기가 샜지만; CLR과 관련된 개념은 개략적으로 여기까지이다. 앞에서 말했던 나머지 하나인 .NET Framework Class Library에 대해서 알아보자

.NET Framework Class Library

.NET Framework Class Library는 앞에서 이야기 한 부분을 다시보면
네 가지 요소로 구성되어 있습니다.

FCL에 들어있는 몇가지 네임스페이스를 훑어보고 이번 포스팅을 마무리 하도록 하겠습니다.


 네임스페이스  내용 
 System  핵심 데이터 타입과 보조 클래스가 존재 
 System.Collection  Hash테이블, 크기조절이 가능한 배열, 그 외의 데이터 저장소 
 System.Data 이하  ADO.NET을 이용한 데이터 접근 클래스들
 System.Drawing  그래픽 처리를 위한 클래스들(GDI+) 
 System.IO  File과 stream I/O 처리를 위한 클래스들
 System.Net  HTTP등의 네트워크 프로토콜을 캡슐화한 클래스들 
 System.Reflection 이하  메타데이터를 조작하기 위한 클래스들 
 System.Runtime.Remoting 이하  분산 프로그램을 지원하는 클래스들
 System.ServiceProcess  Windows 서비스를 지원하는 클래스들
 System.Threading  관리 스레드를 생성하는 클래스들
 System.Web  HTTP를 지원하는 클래스들
 System.Web.Services  웹 서비스를 지원하는 클래스들
 System.Web.Services.Protocols  웹 서비스 클라이언트를 지원하는 클래스들
 System.Web.UI  ASP.NET의 핵심 클래스들
 System.Web.UI.WebControls  ASP.NET 서버 컨트롤 클래스들
 System.Windows.Forms  GUI프로그래밍을 위한 클래스들
 System.Xml 이하  XML을 조작하기 위한 클래스들

코드가 안나오니까 지루하네요 다음 주 부턴 코드가 슬슬 나오는 포스팅을 시작하도록 하겠습니다~

Reference Book : Programming Microsoft .NET 정보문화사


p . s >
아..그리고 하나 시작할 때 목적을 빼먹었는데...
이 포스팅을 보면 다른 책 안보고 이해와 코드를 짤 수 있도록 하는 것이 목적입니다. (꿈이 크네...)
HW만 전문적으로 하시는 분이나 이런 부분은 프로그래머가 아니면 모르는 부분이다 알려달라 하시는 분이 있으면 이미 했던 포스팅이라도 수정 추가를 하려고 했던 부분이라 이런 부분을 더 알고 싶다 등의 리플을 달아주시면 피드백이 되서 감사할 것 같습니다~




.NET과 .NET Framework
.NET Framework에 대한 포스팅을 앞으로 주욱 써나갈 생각입니다.
우선 .NET Framework란 무엇인지에 대해서 말하기 위해 가장 필요한 것 부터 정리해 나가겠습니다.


.NET Framework 란?

우선 Framework라 함은 프로그래밍을 해보신 분이라면 어디선가 한번씩은 들어본 단어일 것 입니다.
사전적 의미는 뼈대, 골격, 틀, 하부구조, 기반 이란 의미를 지닌 단어죠. 한번쯤 프로그래밍을 해본 사람들이라면
아무리 분야가 달라도 한번쯤 들어봤을 법한 MFC와 같은 것 역시 일반적으로 Framework라고 부르는 걸 보면
아마도 프로그래밍을 좀 더 편하게 하기위해 미리 만들어놓은 골격 구조나 기초 구조와 같은 것들을 의미하는 것이 아닐까요?

Microsoft에선 .NET Framework에 대한 정의를 다음과 같이 이야기 했습니다.

.NET Framework는 마이크로소프트 Windows운영체제 제품군의 중요한 새 구성요소로써 보다 쉽게 시스템을 구축 및 배포하고 다른 네트워크 연결 시스템과 통합할 수 있는 차세대 Windows 기반 응용 프로그램의 기초입니다

뭔가 매우 복잡한 말인듯 하지만 사실상 주요 키워드만 정리해본다면

1. Windows운영체제 제품군의 중요한 새 구성요소
   -> Window에 포함된 구성요소 (중요하다고 하니 앞으로 중요한 역할을 차지할 것이라 생각한 것이겠죠?)

2. 보다 쉽게 시스템을 구축 및 배포하고 
   -> 쉽게 시스템을 만들 수 있다.

3.
다른 네트워크 연결 시스템과 통합할 수 있는
   -> 이기종 시스템과의 통합을 위해 좀 더 나은 환경을 제공하겠다는 것이죠.

4. 차세대 Windows 기반 응용 프로그램의 기초입니다.
   -> 앞으론 응용 프로그램을 개발하기 위한 기반 환경(.NET)이 되겠다는 것이죠



즉 통합해서 한마디로 말하자면(물론 위의 첨부 내용도 한마디지만) .NET이라는 목표를 이루기 위해 실질적으로 돌아가는 Window기반의 응용프로그램을 개발하기 위한 기반이 되는 환경이라고 생각하시면 됩니다.

.NET?

물론 종종 일반적으로 개발자들이 .NET과 .NET Framework를 종종 동일한 의미로 사용해서 말하는 경우가 자주 있습니다. 사실 두가지는 틀린 이야기지만 의미론적으로 이해하고 다들 넘어가는게 대부분이라 딱히 구분할 필요가 없다고는 하지만 그래도 처음 시작이니 적어도 그 두가지 의미의 차이를 확실히 집고 넘어가기 위해 정리를 해본다면

.NET이란 XML기반의 웹 서비스를 통해 서로 다른 시스템을 통합하기 위한 제반 환경 및 기반(운영체제, .NET Framework, .NET언어, 통합 개발 환경등 모든 것이 포함된 기반)을 의미합니다.
.NET Framework란 이런 .NET의 목적을 실현 시키기 위해 필요한 기술(ASP.NET, Windows 응용 프로그램 구현 기술, 데이터 엑세스 기술 등등)을 함축한 실질적인 프로그램의 기반 또는 환경을 의미합니다.


.NET Framework의 구조

.NET Framework는 여러 부분으로 나뉘어 있지만 크게 보면 다음의 두부분으로 나뉘어져 있다고 할 수 있습니다.

 공용언어 런타임(Common Language Runtime)
 .NET Framework 클래스 라이브러리(.NET Framework Class Library)
공용 언어 런타임은 .NET Framework의 가장 하위에 있으며 .NET Framework클래스 라이브러리는 .NET Framework에서 공용언어 런타임을 제외한 나머지 요소들을 총체적으로 가리키는 것 입니다.

공용언어 런타임(Common Language Runtime, CLR)

  공용 언어 런타임은 우리가 .NET 언어로 코드를 작성할 때 일반적으로 신경써야 하는 부분들, 예를 들면 메모리 관리, 보안 관리, 오류 처리 등의 작업을 도와주어 프로그래밍을 단순화하는 역할을 할 뿐만 아니라 .NET Framework로 개발된 응용프로그램의 실행 환경을 제공합니다. 그래서 공용 언어 런타임을 코드 관리 환경이라고도 하며 코드 관리 환경에서 실행되는 코드를 관리 코드(Managed Code)라고 합니다.

.NET에서의 핵심이 .NET Framework라면 .NET Framework에서의 핵심은 바로 공용 언어 런타임입니다. 공용 언어 런타임은 .NET 언어의 내부 처리 프로세스와 관계가 깊으므로 .NET에서 PL(Programming Language)과 관련된 부분을 이야기하고자 한다면 이를 이야기 하는 것이라고 봐도 무방할 것입니다.

.NET Framework 클래스 라이브러리(.NET Framework Class Library)

.NET Framework 클래스 라이브러리는 개발자가 질 높은 응용 프로그램을 구현하거나 이미 개발된 응용 프로그램을 신속하게 확장할 수 있도록 도와주는 기능들을 미리 패키지화한 것을 말합니다. 여기에는 크게 네 가지 요소로 구성되어 있습니다.

1. ASP.NET(XML Web Service & Web Form)
2. Data and XML
3. Windows Forms
4. Base Class Library


1. ASP.NET은 웹 구현을 위해 사용되는 기능들을 미리 패키지화한 것이며 이것은 곧 하나의 웹 기술을 의미합니다. 물론, 여기에는 XML 웹 서비스 기술도 함께 포함되어 있습니다.

2.  Data and XML이라고 되어 있는 부분은 .NET을 통해 만들어진 응용 프로그램이 데이터 소스(데이터베이스 또는 기타 다른 정보 저장 공간)와 원활히 연결될 수 있도록 도와주는 기능들을 미리 패키지화한 것입니다(ADO.NET).

3. Windows Forms는 Windows응용프로그램 개발을 위해 사용되는 기능들을 미리 패키지화한 것입니다.

4. Base Class Library는 위에서 언급한 .NET Framework의 세 가지 구성 요소(ASP.NET, Windows Forms, Data and XML)와 .NET Framework에서 공통적으로 사용하는 기능들을 패키지화한 것입니다.



Reference Book : 뇌를 자극하는 ASP.NET 2.0 프로그래밍 - 이시환