'.NET Framework'에 해당되는 글 1건

  1. 2012.02.24 .Net Framework 이란? (1)
VB.NET2012.02.24 18:20
갑자기 닷넷프레임워크가 무었인지 되짚어보기로 했습니다.

.Net Framework 가 발표된 초기 문서인 Microsoft .Net Framework 제품개요 입니다. (http://www.microsoft.com/Korea/MSDN/netframework/technologyinfo/overview/ )

뭔가 복잡하고 어렵게 설명이 되어 있습니다. 그중에 제일 이상한 부분은 이처럼 JAVA와 비교해서 엄청 나은 성능이다 라는 부분입니다. 
Sun에서 제공하는 Java Pet Store의 .NET 기반 구현인 .NET Pet Shop에서 성능은 J2EE 버전보다 28배나 높고 지원되는 동시 사용자 수는 6배나 많으며 CPU 사용률은 1/6밖에 되지 않습니다. 
물론 당시에는 그럴수 있었겠죠. 예전에 자바 문제가 많았죠.. 하지만 이러한 문장은 처음 닷넷프레임워크를 접하는 사람들에게 혼동을 줄수 있을것 같네요. 

현재는 닷넷이나 자바나 둘다 랭귀지의 성숙도가 높아져서 속도차이는 비슷하지 않을까요? 물론 언어마다 특정 기능부분에서 우위가 있긴 합니다만, 전체적으로 몇배가 더 빠르다고 할수는 없을것 같습니다.  

그럼 정의와 정리를 해보겠습니다.
 

위키에는 다음처럼 정의하고 있습니다.
닷넷 프레임워크(.NET Framework)는 마이크로소프트에서 개발한 윈도 프로그램 개발 및 실행 환경이다. 네트워크 작업, 인터페이스 등의 많은 작업을 캡슐화하였고, 공통 언어 런타임(Common Language Runtime)(CLR)이라는 이름의 가상 머신 위에서 작동한다.
아... 그래도 어렵습니다.

도대체 닷넷 프레임워크가 뭘까요? 쉽게 말하면 프로그램이 돌아가도록 지원해주는 뼈대 역할을 해 주는것 이라고 보면 됩니다. 소프트웨어 프레임워크는 복잡한 문제를 해결하거나 서술하는데 사용되는 기본 개념 구조입니다. 뼈대, 골조, 프레임워크 라고 하는데, 이러한 범위가 폭넓은 용어를 특정 무엇으로 지칭하는 버즈워드(buzzword) = 유행어 라고도 할수 있습니다.




닷넷프레임워크는 빌드, 배포, 웹서비스, 웹어플리케이션 등이 동작하게 하는 공통 환경입니다. 그리고 BCL(Base Class Library)를 포함하고 있는데, 이 클래스 라이브러리는 파일을 제어 하거나 데이터베이스에 접근하거나 네트워크를 제어 할수 있는 기능이 포함되어 있습니다.


위 그림은 1.1 버전의 BCL 입니다. 웹, 윈폼, 데이터, XML 등 다양한 라이브러리들이 존재 합니다. 이러한 기능들이 닷넷 프레임워크에 새롭게 나타난게 아니라 기존 Win32 API 들을 닷넷에 맞게 재구성 했다고 보시면 됩니다. 닷넷 이전에도 DB 관련 프로그램을 VB나 C++ 로 만들었죠. C++의 MFC도 어떻게 보면 BCL이라고도 할수 있겠네요.

대부분의 기능들이 이미 클래스로 만들어져 있어서 개발자는 해당 클래스 라이브러리를 사용하면 되는것입니다. 간편하죠? 하지만 좀 다른 UI나 기능을 구현하려면 직접 구현을 해야 하는데 보통 3rd Party 제품을 많이 사용하죠. 실제로 개발자가 자료구조와 알고리즘을 직접 만들어서 개발하는 경우는 드뭅니다. JAVA도 마찬가지 입니다. 대부분 클래스를 가져다 쓰지요, 하지만 닷넷 프레임워크보다 추상클래스가 많아서 직접 구현해야 하는 경우가 많습니다.

그럼 여기서 잠깐 이 문제를 짚어보겠습니다. 왜 한국 IT는 자바가 판을 칠까?
지극히 개인적인 생각입니다만, 지금은 아니지만 예전(10년전)에는 닷넷에 기본적으로 제공되는 클래스 라이브러리가 자바에 없지만 개발자가 직접 구현하기에 어려움이 없었고, 있다고 하더라도 오픈 마인드가 강한 자바 개발자들 끼리 서로 클래스를 공유하면서 자바의 부족한 부분을 채웠고 MS 제품은 비싸다는 인식이 강해서 납품 받는 기업입장에서는 입찰방식이라 납품하는 업체는 단가가 낮은 자바로 밀어 넣지 않았을까? 하는 생각입니다. 자바개발자분들 고생 많이 하셨습니다. (__)
이런 생태속에서 자연스럽게 자바쪽은 오픈소스 프로젝트가 성장하고, 닷넷쪽은 자체 기술력만으로 버텨왔던것 같습니다.


정리 하자면 .Net Framework 구조는 다음과 같습니다.

공통 언어 기반(Common Language Infrastructure)
CLI를 둔 목적은 compile-time과 run-time에 언어에 종속적이지 않은 플랫폼을 제공하기 위해서입니다. 예외처리, 가비지 콜렉션, 보안 등을 위한 소프트웨어 컴퍼넌트를 포함하고, CLI 가 구현된것이 CLR 입니다.


공통 언어 런타임(Common Language Runtime)
소스코드를 컴파일 하면 어셈블리가 되는데, 이 어셈블리가 CLR 위에서 동작합니다. 즉, CLR에 의해 관리되어 지는것이죠. CLR은 다음과 같은 구성요소가 있습니다.

 - 공통 타입 시스템(Common Type System)
 - 공통 언어  스펙(Common Language Specification)
 - JIT 컴파일러(Just-In-Time Compiler)
 - 가상 실행 시스템(Virtual Execution System)   


... 내용이 길어 조금씩 수정하고 있습니다.(현재 2012-03-07 두번 업데이트 하였습니다.)

혹시 위 글에 오류가 있으면 알려주시면 수정하도록 하겠습니다.



 
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower

티스토리 툴바