수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1693982
  • Today | 333
  • Yesterday | 588

Programming/.NET2006/07/30 18:15

.NET Execution Model

그렇다면 먼저 .NET 코드의 실행 모델을 그림으로 우선 만나보자.

위의 그림은 코드 실행의 구조를 아주 잘 나타내 주고 있다. 모든 .NET 언어로 작성된 소스 코드는 언어에 따르는 컴파일러를 통해서 MSIL 이라는 중간언어로 만들어 진다. 여기까지를 우리는 Compilation 단계라고 부른다. 이 단계의 결과물로는 중간 언어인 MSIL과 그 중간 언어에 대한 여러가지 정보를 가지고 있는 MetaData 라는 것이 생긴다. 중간 언어로 존재한다고 하더라도 우리 눈에 보여지는 이 결과 파일의 확장자는 DLL 이나 EXE 이다. 조심할 것은 이 확장자로 인해 이 파일이 라이브러리 파일이거나 실행파일이라고 착각하는 것이다. 안타깝게도 이들은 단지 그러한 확장자를 가진 중간언어이다.  CLR의 도움 없이는 아무것도 할 수 없는...

이러한 중간적인 상태로 존재하던 파일들이 이제 실행시점에 들어가게 되면 CLR 내의 JIT(Jitter 라고도 호칭함)라는 컴파일러에 의해 다시금 컴파일되고, 그 결과 실제로 실행가능한 플랫폼 기반의 Native Code 가 생성되어지게 된다. 여기까지의 단계를 Execution 단계라고 부른다.

모든 .NET 코드들은 위와 같은 단계를 거쳐서 실행을 하게 된다. .NET 이전의 Windows 시절의 방식과 비교했을 경우에 오히려 거추장스러우면서, 성능의 저하를 가져올 것처럼 느껴지는 단계들이 존재한다고 보일 수도 있다. 하지만, 자못 그렇게 보일 수 있는 단계들이 .NET으로 하여금 여러가지의 막대한 잇점을 갖게 하는데, 그것은 언어 독립성, 교차 언어의 상속가능, 플랫폼 기반의 최적화된 코드의 생성등이다. 어떠한 점이 잇점인지, 그 외에 더 얼마나 많은 잇점을 제공해주기에 이러한 실행구조를 .NET이 갖는지등에 대한 더욱 구체적인 이야기들은 MSDN의 .NET Framework의 소개나, 여러 .NET 관련 언어 서적을 통해서 얻을 수 있을 것이다. .NET 구성과 관계된 서적을 한권쯤은 꼭 정독하여 Microsoft가 .NET이라는 것을 얼마나 면밀히 계획했는지 살며시 들여다보는 것도 개발에 도움이 되리라 생각한다. (태오의 개인적인 추천서적으로는 2002년 4월에 번역 출간되는 Wrox의 PROFESSIONAL .NET FRAMEWORK을 추천한다. 물론, Ms Press의 것은 말할 것도 없다.)

.NET의 실행 모델은 사실상 Java 것과도 비슷하다고도 볼 수 있지만, 진화된 환경이란 이전 환경의 좋은 점들을 모두 추출하여, 그 것을 기반으로 발전시켜 나가는 것이라고 볼 때, .NET은 Java의 진화 발전형이라고 볼 수도 있을 것이다.

위의 실행 모델은 ASP.NET 뿐 아니라 모든 .NET의 코드들에 적용된다. 사실 ASP.NET의 경우는 위의 기본적인 모델을 따르면서 약간은 자신만의 단계들이 존재하고 있지만, 여전히 기본은 위의 모델이다.

위에서 Execution 단계를 관할하는 것이 바로 CLR 이다. CLR은 누누히 강조했지만, 위처럼 코드의 실행을 관리하는 역할을 한다. 그래서 CLR이 .NET 프레임워크의 가장 중요한 부분중의 하나라고 이야기 했던 것이다. (사실, .NET 프레임워크의 가장 중요한 다른 하나는 .NET 프레임워크 클래스 라이브러리이지만, 이 둘이 바로 .NET 프레임워크 이니...  CLR이 가장 중요하네~ 라는 식의 말은 강조를 위한 말장난같아 보일 수 있음을 인정한다. ^^)

실행 모델의 간단한 구성에 대해서 알아보았다. 그러나, 역시 뭔가 부족한 느낌이 있다. 그렇다면, 조금 더 세분화하여 실행모델을 구체적으로 살펴보도록 하자. 이 실행 모델을 이해하는 것은 매우 중요하다. 지금 이를 확인하지 않고 넘어갈 수는 있겠지만, 그렇게 되면 차후에 쓸쓸히, 아주 외롭게 남들은 중급적인 내용을 공부할 때, 자신만이 다시 이 자리로 돌아와서 실행 모델을 확인하게 될지도 모른다.

다음은 구체적인 Execution Model 이다.

어떤가? 이전 그림보다는 구체적이다.

그럼 그림을 하나하나 살펴보도록 하자. 흐름은 좌측 상단에서부터 시작하여 우측 하단으로 흐른다. 먼저 소스코드가 컴파일러와 메타 데이터 엔진에 의해 중간언어인 IL 과 또한 그 IL을 설명하는 메타 데이터로 구성되는 것을 볼 수가 있다. 그렇게 구성되어진 MSIL 은 그 파일과 연결된 다른 어셈블리들이 있을 경우, Linker 라는 것을 통해서, 하나의 EXE 나 DLL 로 만들어지게 되며, 이것이 이전에 말했던 관리 코드이다.

좋다. 여기까지가 컴파일 단계이다.

어셈블리 (Assembly)란?

이는 컴파일된 관리 코드들이 저장되는 단위로써, 기존의 EXE 나 DLL 파일과 비슷하다고 볼 수 있지만, 어셈블리는 이전 EXE, DLL 과는 다르게 자신을 설명하는 메타 데이터를 가지고 있다. 이것이 중요한 차이점이다.

그리고, 하나의 EXE 나 DLL 로써 존재하고 있던 관리 코드들은 실행시가 되면 이제 CLR에 의해서 실행 파일이 되기 위한 다시 한번의 컴파일 과정을 거치기 위한 준비들을 하는데, 그 첫번째가 바로 CLR의 Class Loader 에 의해 클래스의 레이아웃이 잡히고, 로드되는 단계이다. 이 때, Base Class Library 로부터 여러가지 기본적인 클래스들도 같이 로드하는 것을 볼 수 있다.  이렇게 클래스가 로드되면 그것을 Jitter('지터'라고 발음함) 로 컴파일을 하게 되고 그로인해 원시코드는 탄생하게 되는 것이다. 그리고, 즉시 실행을 시작한다. 여기까지가 실행 단계이다.

이제 여러분은 .NET 언어로 제작한 특정 파일이 두번의 컴파일 단계를 거친다는 사실과, 전체적인 실행 구조에 대해서 알아보았다. 이 지식이 지금 당장 여러분에게 눈에 보이는 어떤 도움이 될 것으로 기대되지는 않지만, 차후 분명 도움이 될 지식임은 자명하다. 이해가 가지 않는다고 하더라도 가급적 기억은 하고 있기를 바란다.

출처 : http://www.taeyo.net/
".NET" 카테고리의 다른 글
  • .NET Framework의 강력한 이름 및 보안 (0)2007/01/09
  • 닷넷프레임 워크의 이해 (0)2006/11/24
  • .NET Execution Model (0)2006/07/30
  • .NET Framework 의 기본 구조 (0)2006/07/30
  • .NET 정의 (0)2006/07/30
2006/07/30 18:15 2006/07/30 18:15
Posted by webdizen
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/1860

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1 ... 1375 1376 1377 1378 1379 1380 1381 1382 1383 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 마주앙 스페셜
  • system()
  • WM_COPYDATA
  • Unicode
  • 유레일
  • Hyper-V
  • Delegate
  • 연구실
  • FTP
  • 클립보드
  • DB 래퍼 클래스
  • 여성
  • libpcap
  • 64비트 컴퓨팅
  • Game
  • 전쟁
  • 고급 명령
  • 집중
  • NetSH
  • OLTP

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.