-
.NET 플래폼의 구조.NET 정리 2010. 2. 18. 17:01
.NET 프레임워크의 구조
> .NET 응용 프로그램의 실행을 위한 언어 독립적 기반 구조
> .NET 응용 프로그램의 구현 및 배포의 생산성, 효율성, 단순성을 증대시킨 새로운 플랫폼
> 인터넷과의 면밀한 통합을 지향하는 현대적인 응용 프로그램 개발 플랫폼
> .NET 응용 프로그램의 구현에 필요한 방대한 클래스 라이브러리
.NET 프레임워크는 .NET 응용 프로그램을 구현하고 해당 프로그램이 올바르게 잘 실행될 수 있도록 필요한 모든 것을 제공해 주는 뼈대를 이루는 부분입니다.
.NET 프로임워크의 구조는 아래 그림에 나타나 있습니다.
공통 언어 런타임 ( Common Language Runtime )
이 부분은 .NET 프레임워크의 핵심 부분으로 .NET 코드나 스레드이 실행, 코드 안정성 검사 및 컴파일, 메모리 관리 등과 같은 시스템 서비스를 제공하여 .NET 응용 프로그램이 실행될 수 있는 기반 구조를 제공하며 .NET 응용 프로그램은 이 CLR에 의해 실행되어지고 관리 됩니다.
여기서 관리 된다는 말은,.NET 에서 상당히 중요한 개념인데 관리되는 코드라는 것은 .NET CRL에 의해 그 실행과 운영이 맡겨지는 코드로써 Visual Basic .NET , C# , JScript .NET , Managed Extensions for C++ 등에 의해 생성됩니다.
보다 정확한 내용은 뒷부분의 .NET 응용 프로그램 실행 모델 절에서 다시 이야기하겠지만 간략하게 이야기하자면 먼저 .NET 언어를 이용하여 작성된 코드들은 .NET 컴파일러에 의해 플랫폼에 최적화된 네이티브 코드가 아닌 MSIL (Microsoft Intermediate Language)로 컴파일 됩니다.
이 MSIL 코드는 플랫폼에 독립적인 언어로써 MSIL 언어는 실행 시점에서 .NET JIT (Just In Time) 컴파일러에 의해 해당 플랫폼에 알맞은 네이티브 코드로 컴파일 되어 실행됩니다.
이렇게 MSIL로 컴파일 되어 .NET CLR의 관리를 받는 코드를 관리되는 코드 또는 관리형 코드라고 합니다. 그렇다면 관리되지 않는 코드 또는 비 관리형 코드라는 것은 .NET CLR의 도움 없이도 실행될 수 있는 코드가 되겠지요. 기존의 윈도 응용 프로그램과 같이 .NET CLR과는 전혀 무관하게 실행될 수 있는 코드를 관리되지 않는 코드 또는 비 관리형 코드라고 하며 Visual Studio .NET 에서는 Visual C++ .NET 만이 유일하게 관리되지 않는 코드를 생성할 수 있습니다.
Visual C++ .NET과는 조금 다른 형태이지만 C#이나 Visual Basic .NET 등도 관리되지 않는 코드를 생성할 수 있습니다. Visual C++ .NET은 응용 프로그램 자체가 .NET 프레임워크와는 별도로 실행될 수 있지만 C#이나 Visual Basic .NET에서는 코드의 일부에 관리되지 않는 코드를 사용할 수 있는 정도입니다.
또한 .NET 프레임워크는 다양한 .NET 언어를 지원하기 위한 다양한 명세를 제공하고 있는데 CLS (Common Language Specification : 공통 언어 명세)와 CTS (Common Type System : 공통 형 시스템)이 바로 그것입니다.
공통 형 시스템 (CTS : Common Type System)은 다음에 설명할 공통 언어 명세(CLS : Common Language Specification)과 함께 .NET의 중요한 특징 중 하나인 언어 간 상호 호환성 및 통합을 제공하는 중요한 개념입니다.
.NET 프레임워크에서는 매우 다양한 언어들을 이용해 응용 프로그램의 개발이 가능한 반면 각 언어들은 각기 다른 데이터 형을 제공합니다. 예를 들어 Visual Basic은 모든 데이터 형에 관계없이 어떠한 데이터든 저장할 수 있는 Variant 타입이 제공되는 반면 C++에서는 Variant 타입이 지원되지 않습니다.이러한 문제는 언어 간의 상호 호환성을 방해하는 주된 요인이었으며 따라서 .NET 프레임워크 환경에서는 이 문제를 해결하기 위해 .NET을 지원하는 모든 언어들이 준수해야 하는 CTS를 제시한 것입니다.
다양한 개발 언어들이 지원하는 데이터 형은 컴파일 단계에서 CTS에서 정의된 데이터 형과 연결 되므로 결과적으로 개발 언어에 관계없이 동일한 데이터 형을 표현할 수 있게 되는 것이지요.
CTS와 함께 CLS 역시 언어 간 상호 호환성과 통합에 중요한 역할을 합니다. 현존하는 개발 언어들은 각기 다양한 특징들을 제공합니다. 예를 들어 C/C++이나 자바 언어의 경우 대소문자를 구별하기 때문에 Name 변수와 name 변수는 서로 다른 변수로 취급되지만 Visual Basic의 경우에는 대소문자를 구별하지 않기 때문에 Name변수와 name변수는 같은 변수로 취급됩니다.
이러한 문제를 해결하기 위해 마이크로소프트는 개발 언어들이 .NET을 지원하고 다른 언어들과 통합되기 위해 최소한으로 제공해야 하는 규칙을 공통 언어 명세(CLS : Common Language Specification)라는 이름으로 정의해 두었습니다.
따라서 컴파일러 개발 업체들은 이 CLS 명세를 따름으로써 .NET 환경을 지원하는 개발 언어를 구현할 수 있습니다.
.NET 기본 클래스 라이브러리.NET 프레임워크는 .NET 응용 프로그램이 실행을 관리하고 그 기반 구조를 마련하고 있는 한편 언어에 관계 없이 .NET 응용 프로그램을 보다 효율적이고 신속하게 구현할 수 있는 다양한 클래스의 집합을 제공하는데 이것을 .NET 기본 클래스 라이브러리라고 합니다.
.NET 클래스 라이브러리를 사용함으로써 얻을 수 있는 이점은 개발자가 .NET 환경에서 어떤 언어를 선택했는지에 관계 없이 항상 동일하게 사용할 수 있는 표준 라이브러리라는 것입니다. 지금까지 윈도 응용 프로그램을 개발하기 위해서는 Win32 API나 MFC, ATL 등을 이용해 응용 프로그램을 구현하거나 또는 Visual Basic이나 델파이 등의 4GL 개발 도구를 이용하여 응용 프로그램을 이용해야 했으며, 각각의 언어 또는 도구에 따라 서로 다른 구문과 API 등으로 인해 하나의 언어를 마스터하는데 상당한 시간과 노력을 투자해야 했습니다.
그러나 .NET 기본 클래스 라이브러리는 개발 언어에 대한 투명성을 제공해 줍니다. 즉, 여러분이 Visual Basic .NET을 사용하든 C#을 사용하든 .NET 클래스 라이브러리에서 제공되는 클래스를 이용하여 동일한 성능의 응용 프로그램을 개발할 수 있다는 것입니다.
또한 새로운 언어를 선택하게 되더라도 해당 언어를 사용하기 위해 또 다른 API를 학습하기 위한 시간과 노력을 최대한으로 줄일 수 있다는 장점도 있습니다.
.NET 기본 클래스 라이브러리는 .NET 프레임워크를 지원하는 모든 언어들이 공통적으로 사용할 수 있는 표준 API로써 DOS 환경에서 동작하는 콘솔 응용 프로그램은 물론 윈도 응용 프로그램과 ASP.NET 웹 응용 프로그램, XML 웹 서비스, COM+ 컴포넌트, ADSI (Active Directory Service Interface) 프로그램, 윈도 NT 서비스 프로그램 등 거의 모든 응용 프로그램을 개발하는데 필요한 방대한 양의 클래스들이 네임 스페이스에 의해 잘 분류되어 제공됩니다.
네임 스페이스란 클래스의 역할과 위치를 구별하기 위한 일종의 논리적인 이름 공간입니다. 이렇게 생각해볼까요? 여러분이 홍길동이라는 친구에게 우편물을 보내려고 할 때 우편물 겉 표지에 “홍길동 앞” 이라고 버젓이 쓰고 우체통에 넣어두면 우체부 아저씨가 여러분의 친구에게 우편물을 제대로 보내줄 수 있을까요? 아마도 2~3일 내에 반송된 우편물을 받아보게 되실 겁니다. 그것은 우편물을 받아볼 사람의 정확한 주소가 없기 때문이죠.
그래서 여러분들은 “서울시 송파구 방이동 1번지 홍길동 앞”이라는 구체적인 주소를 우편물에 명해야 합니다. 네임 스페이스는 바로 이러한 주소와 같은 역할을 합니다. 예를 들어 웹 응용 프로그램에서 사용자의 입력을 받기 위해 TextBox 클래스를 사용하려면 여러분은 다음과 같이 코드를 작성해야 합니다.
System.Web.UI.WebControls.TextBox textbox = new System.Web.UI.WebControls.TextBox();
또는 C#의 using 절을 이용하여 다음과 같이 작성할 수도 있습니다.
using System.Web.UI.WebControls;
… 어쩌구저쩌구 주절 주절...
TextBox textbox = new TextBox();네임 스페이스를 사용함으로써 클래스의 위치와 용도를 쉽게 파악할 수 있고 동일한 클래스 이름으로 인한 충돌 현상도 피할 수 있습니다.
ADO.NET과 XML
.NET 기본 클래스 라이브러리의 상위 레벨에는 데이터 액세스 관련 클래스와 XML 관련 클래스들의 집합이 위치하고 있습니다. ADO.NET이라 불리는 이 새로운 데이터 액세스 클래스들은 기존의 ADO (ActiveX Data Object)를 더욱 발전시킨 새로운 형태의 데이터 액세스 기술을 구현하는 것으로 특히 XML (eXtensible Markup Language)와 긴밀하게 통합되어 있습니다.
ADO.NET은 크게 기존의 ADO 프로그래머를 위해 ADO 객체들과 유사한 형태로 구현된 관리되는 데이터 제공자 (Managed Data Provider) 클래스와 새롭게 등장한 DataSet 관련 클래스들로 구분할 수 있습니다.
관리되는 데이터 제공자 클래스들은 ODBC를 지원하는 대부분의 데이터베이스에 대해 연결을 설정하고 명령을 실행하며 그 결과를 받아오는데 필요한 클래스들이 제공되며, 특히 SQL 서버와 오라클 데이터베이스에 대해서는 각각 최적화된 별도의 클래스들이 제공됩니다.
이에 반해 DataSet 관련 클래스들은 관리되는 데이터 제공자 클래스들과는 달리 비 연결형 데이터 클래스로서 마치 서버의 메모리에 존재하는 데이터베이스와 같이 동작합니다. 또한 데이터 간의 관계를 설정하고 데이터의 수정 및 삭제 등의 작업을 한 번에 수행할 수도 있으며, XML과의 유연한 통합으로 XML에서 DataSet 또는 DataSet에서 XML로의 변환이 자유자재로 이루어집니다.
인터넷 지향 개발 플랫폼을 표방하는 .NET 프레임워크는 XML 문서와의 강력한 연동을 위해 다양한 XML 관련 클래스들을 제공하고 있습니다. 이들 클래스는 XML 문서를 읽고 새로운 노드를 추가하거나 수정 또는 삭제하는 등의 작업을 가능하게 하며 XSLT와 XPath 등 거의 모든 XML 문서의 기능을 모두 구현하고 있어 XML의 강력한 성능을 .NET 응용 프로그램에 그대로 적용할 수 있습니다.
윈도 폼, 웹 폼, XML 웹 서비스
.NET 프레임워크의 최 상단에는 각종 응용 프로그램을 구현하기 위한 세 가지 대표적인 기술들이 위치하고 있습니다. 이들은 대부분 기본 클래스 라이브러리나 ADO.NET, XML 관련 클래스들로부터 상속되어 확장된 클래스들로서 .NET 프레임워크를 기반으로 다양한 응용 프로그램의 신속하고 안전한 개발을 지원해 줍니다.
윈도 폼 기술은 일반적인 윈도 응용 프로그램을 구현하기 위한 클래스들의 집합으로 응용 프로그램의 사용자 인터페이스를 위한 각종 컨트롤을 구현하는 클래스들이 포함되어 있습니다.
웹 폼은 ASP.NET 웹 응용 프로그램을 구현하는데 필요한 다양한 클래스들의 집합이며, 웹 페이지 사용자 인터페이스를 위한 컨트롤을 구현하는 클래스 외에 HTTP 요청 및 응답에 대한 클래스와 컬렉션, 인터넷 보안, 웹 서버 제어에 필요한 모든 클래스들이 제공됩니다.
마지막으로 XML 웹 서비스 기술은 HTTP와 SOAP (Simple Object Access Protocol) 등 표준 인터넷 프로토콜을 이용한 분산 응용 프로그램의 구현에 필요한 클래스의 집합을 제공합니다. XML 웹 서비스를 통해 여러분은 언제 어디서든 참조할 수 있는 분산 컴포넌트를 구현할 수 있습니다.
지금까지 .NET 플랫폼의 핵심 부분인 .NET 프레임워크의 구조를 살펴보았습니다.'.NET 정리' 카테고리의 다른 글
asp.net 의 웹폼에 대하여.. (0) 2010.02.25 ASP.NET Development Model (0) 2010.02.18 ASP.NET Execution Model (0) 2010.02.18 NET Framework Class Library (0) 2010.02.18 .NET 프레임워크 (0) 2010.02.18