프로그래밍/C# & .NET

자바개발자가 본 .NET 프레임웍

Terry Cho 2010. 5. 11. 23:21
.NET 프레임웍이란?

MS에서 개발한 프레임웍으로
  • 개발 환경 : 다양한 컴파일 환경과, C#,VB등의 언어를 지원하고 있다.
  • 개발 프레임웍
    • 다양한 라이브러리들을 제공한다. ASP.NET과 같은 MVC기반의 웹개발환경
    • WebForm과 같은 웹 UI환경
    • WPF와 같은 클라이언트 UI개발
    • WCF와 같은 통신 프레임웍
    •  ADO.NET과 같은 DB 접근용 개발 프레임웍등을 제공한다.
  • 런타임 프레임웍 : 자바와 유사하게, Virtual Machine과 같은 런타임환경을 지원한다.

이다.


.NET 프레임웍의 런타임 동작 방식
.NET으로 만들어진 프로그램은 컴파일된후 .exe 파일로 존재하는데, 이 exe 파일은 실제 실행 파일이 아니라 자바의 .class 파일 처럼 Machine에 종속적이지 않은 byte code와 같은 형태로 존재한다.  .NET에서는 byte code와 같은 중간 컴파일된 코드를 Managed Code라고 한다. C++이나 C를 이용해서 Machine depedent된 Native Code를 UnManaged Code라고 한다.
이 Managed Code는 일종의 Assembly 코드 처럼 Instruction들로 이루어 지는데, 이 Instruction을  MSIL (Microsoft Intermediate Language)라고 한다. C#,COBOL,VB등의 다양한 언어로 애플리케이션을 작성했다 하더라도, 1차 컴파일이 되면, 이 MSIL로 구성된 Managed Code로 컴파일이 되는 것이다. 이런 특징 때문에, .NET에서 제공되는 모든 라이브러리는 .NET 프레임웍을 사용하는 모든 언어에 공통적으로 재사용될 수 있다.

이 IL은 런타임에 JIT 컴파일러에 의해서 Machine code로 바뀌어서 실행이된다. .NET이 일종의 Runtime 실행환경(JVM처럼)이 되는 것인데, 이런 .NET의 Runtime 실행환경을 CLR (Common Lnauage Run-time)이라고 한다.
CLR은 JIT 컴파일러 이외에도 자체적인 가상 메모리 관리,Garbage Collection, Thread관리와 같이 .NET 애플리케이션에 대한 전반적인 실행환경을 제공하는데, 이러한 Runtime 환경이 있기 때문에, 이 포스트에 앞서 설명한 Application Domain같은 것이 구현이 가능하다.

전체적으로 구성을 보면 자바와 매우 유사하다. JVM과 같은 CLR 런타임 환경이 있고, CLR이 GC를 수행하는것도 상당히 유사하다. 또한 컴파일된 코드가 자바에서 byte code로 컴파일되는것 처럼 Managed Code라는 형태로 컴파일 된후에, Runtime에서 JIT에 의해서 Machine 코드로 컴파일되는 것도 유사하다.

아키텍쳐 상으로만 봤을때는 앞서 설명한(이전 포스트) Application Domain과 같은 Runtime 환경은 .NET쪽이 좀더 진보적인 형태같고, Hotspot 방식의 컴파일러를 사용하는 자바가 Runtime 컴파일 환경에서는 조금더 발전하지 않은가 싶다.

조금 의문이 있는 것은 자바의 경우 GC 타임에 대한 성능적 이슈가 크기 때문에, GC 튜닝이 매우 중요한데 반해서, GC를 사용하는 .NET에서는 GC 타임이나 튜닝에 대해서 들어본적이 없다. GC 성능이 매우 좋을 경우에나 가능한 일인데.. 이건 좀 더 찾아봐야 할듯..

참고 자료
http://www.devhood.com/training_modules/dist-a/Intro.NET/Intro.NET_pres_files/frame.htm


그리드형

'프로그래밍 > C# & .NET' 카테고리의 다른 글

.NET 튜닝 옵션  (0) 2010.05.12
CLR 메모리 구조 (노트)  (0) 2010.05.12
ApplicationDomain  (0) 2010.05.11
Microsoft Sync Framework (MSF)  (1) 2010.05.10
ildasm (C# 디컴파일러)  (3) 2010.05.10