ASP(Active Server Pages)

 

ASP는 개념적인 기술이다!!

ASP를 서버 사이드 스크립트라고 말하는 사람이 많은데 절대 그렇지 않다. ASP는 단지 기술일 뿐이다. ASP는 개념적인 것이며, ASP 를 나타내기 위해 여러 서버 스크립트들과 컴포넌트들을 사용해 왔던 것이다.

 

다시 말하자면, ASP 에서는 주로 VBScript를 서버 사이드 스크립트로써 사용하여 ASP 페이지를 꾸미고는 하였을 것이다. ASP.NET 에서는 이제 VBScript가 아닌 좀 더 강력한 컴파일 언어(.NET 언어) Visual C#.NET, Visual Basic.NET, Visual C++.NET, Java.NET(아마도) 등등을 사용하게 된다.(인터프리트 언어인 VBScript나 Jscript는 지원되지 않는다. 확실하게 미련을 버려라.)

 

이제는 .NET을 지원하고, 중간언어인 MSIL을 생성할 수 있는 컴파일 언어라면 어떤 언어이던지 사용할 수가 있게 되었으며, 뿐만 아니라 여러 언어를 교차적으로 사용할 수도 있다.

참고 : 그러나, 하나의 ASP.NET 페이지에서는 하나의 .NET 언어만을 사용할 수 있다는 것 또한 기억하자.

 

ASP.DLL 이 여러분의 ASP 페이지의 실행과 관리를 담당해 주었었던 것처럼 ASP.NET 에서는 .NET 프레임워크의 주(主)라고 볼 수 있는 C.L.R(Common Language Runtime) 이 보다 나은 방법으로 메모리를 관리하고, 나은 수행성과 보안성을 제공해 준다. 여러분은 C.L.R 의 내부에 대해서 깊이 알지 않아도 안정적인 새로운 개발환경을 마음껏 사용할 수 있다. (물론, C.L.R의 내부에 대해서 이해하고 있다면 개발에 더욱 도움이 되기는 할 것이다. 만일, 고급 프로그래밍으로 들어가고자 한다면 C.L.R의 이해는 필수라고 볼 수 있다)

 

 .NET 이란 전략에 대해서 개념적으로는 이렇게 표현하기도 한다.

- Microsoft의 새로운 네트워크 전략

- 제 3세대 인터넷에 대한 마이크로소프트의 비전

- 인터넷 환경을 혁신적으로 바꿀 MS의 제품군과 기술의 총칭

- 서비스로서의 소프트웨어 (Software as Service)

- 차세대 인터넷 환경을 사용자에게 제공하는 Software Platform

- 인터넷 자체를 OS의 개념으로 확장한 개념

 


.NET의 기술은 그러한 OS와 서비스의 기반위에 자리하고 있는 것을 볼 수가 있다. 이는 .NET 프레임워크가 독립적으로 존재하는 OS 가 아닌, 플랫폼(Windows OS)기반 위에서 제공되어지는 프레임워크(골격), 구조라는 것이다.

 

 

개념적으로 .NET 프레임워크를 설명하자면 다음처럼 나타내 볼 수도 있다.

- Application을 개발, 배치하는 것을 단순화, 현대화 시킨 새로운 플랫폼.

- 공개표준 프로토콜을 사용, 지원하는 인터넷 지향 어플리케이션 제작을 위해 설계.

- 풍부한 클래스 라이브러리를 제공.

- 모든 언어를 사용 가능하게 하는 언어 중립적인 플랫폼.

- COM, DLL으로 제작된 기존 컴포넌트를 상호운용하도록 지원.

- 새로운 운영체제(Operating System)가 아닌, 관리된 런타임 환경을 의미.

- 독립적인 관리 환경인 Common Language Runtime을 통해 코드실행을 지원.

 

 

.NET 프레임워크는 크게는 두 부분으로 이야기할 수 있다.

- 공통 언어 런타임(Common Language Runtime)

- .NET 프레임워크 클래스 라이브러리(.NET Framework class library)

다시 위의 그림에서 .NET 프레임워크 부분을 살펴보면,  Common Language Runtime과 Base Class library 그리고, Data & XML 과 ASP.NET & Web Services, Windows Forms 로 구성되어져 있음을 확인할 수도 있다.

 

 

Base Class Library는 I/O, 문자열, 네트웍 보안, 스레딩, 텍스트, 리플렉션, 컬렉션등의 기본적인 클래스를 제공하는 기본 클래스 라이브러리이며, DATA & XML은 데이터 액세스와 관계한 ADO.NET과 XML 부분을 제공하는 역할을 한다. ASP.NET과 웹 서비스는 분산 웹 어플리케이션을 구축하는 근간을 제공하며 또한, Windows Forms 는 윈도우즈 어플리케이션을 구축하는 기반이 되어준다. 이들 또한 매우 중요하지만, 이 들도 크게는 .NET 클래스 라이브러리에 포함되어진다고 볼 수 있다.

해서 필자는 .NET 프레임 워크를 크게 두 부분으로 나눌 수 있다.

 

CLR은 일종의 코드의 관리환경이다. 이러한 환경을 통해 여러분은 안정적이고, 확장성 있는 솔루션을 개발해 낼 수가 있다. 일종의 플랫폼의 실행 하부구조를 제공하는 의미라고 보면 되겠다.

 

Commmon Language Runtime

CLR을 이해하려면 그 구조를 먼저 살펴보아야 한다. 

 

CLR은 MFC나 ATL 같은 개발을 돕는 라이브러리가 아니라, 프로그램이 실행되고, 관리되는 환경이다. 

MFC나 ATL 같은 개발을 돕는 라이브러리의 역할은 .NET 프레임워크 클래스 라이브러리와 Windows Forms 쪽에서 담당한다. 이 둘을 헛갈리는 것은 곤란하다. CLR은 어플리케이션의 개발을 쉽게 하고, 튼튼하고 안전한 실행환경을 제공한다. 또한, 다중 언어들을 지원하며, 어플리케이션의 배포와 관리를 쉽게 해준다는 장점을 가지고 있다.

 

CLR의 가장 밑단에는 Class Loader가 위치하고 있다. 이는 메타 데이터(데이터를 나타내는 데이터, 차후 이야기될 것이다)를 관리하며, 클래스들의 레이아웃과 로드를 관리하는 역할을 한다.

그 위로는 IL to Native Compiler 가 위치하고 있는데, 이는 코드가 컴파일되어져 만들어진 중간언어를 Native 코드로 컨버트 시켜주는 역할을 담당한다.

 

 .NET 언어로 작성한 모든 코드들은 컴파일되어지면, 그 때 실행파일이 만들어지는 것이 아니라, Common Language Runtime내의 JIT(Just-In-Time) 라는 컴파일러에 의해 재 컴파일이 되어질 수 있는 중간적인 언어(IL 혹은 MSIL : Microsoft Standard Intermediate language) 로 만들어지게 된다. 여러분이 작성한 코드는 각 언어 컴파일러에 의해 중간 언어로 컴파일되며, 이 MSIL은 런타임에 의해 또는 처음 실행될 때 Just-In-Time(JIT)에 의해 원시 코드(native code)로 컴파일된다.

 

 

 관리 코드(Managed Code)란?

MSIL로 컴파일되어 CLR 에 의해 관리되는 코드를 관리 코드(managed code)라고 한다. 관리 코드는 런타임에 의해 개체의 생성과 초기화, 메모리 할당, 가비지 컬렉션과 같은 코드 실행이 전반적으로 관리되어 진다.

 

 Code Manager와 Garbage Collector가 존재하고 있다. 코드 매니저는 말 그대로 코드의 실행을 관리하는 역할을 하며, 가비지 컬렉터는 어플리케이션을 위해 자동으로 메모리를 관리하는 역할을 한다. 이는 매우 중요한 CLR의 역할 중에 하나인데, 이를 통해서 모든 메모리는 자동적으로 관리가 이루어지게 된다. 가비지 컬렉터의 제공으로 개발자들은 객체를 생성한 후에, 자원을 해제할 필요가 없어졌다. 이전 컴포넌트 개발시 자원을 미처 해제하지 못한 코드들로 인해 발생했던 메모리 누수를 겪어본 개발자들이라고 한다면 이 기능이 매우 반가울 것이다.

 CLR은 Security Engine과 Debug Engine를 제공하고 있다. 보안 엔진은 사용자뿐 아니라 코드 자체를 기반으로 하는 보안까지 제공하는 엔진을 나타내며, 디버그 엔진은 코드의 실행을 추적하거나 어플리케이션을 디버그할 수 있도록 해주는 엔진을 의미한다.

 Type Checker은 강력한 형의 안정성을 체크하는 기능을 제공하며, 초기화 되지 않은 변수나 불안전 형 변환을 막도록 해주는 역할을 하며, Exception Manager는 강력하게 예외 및 에러를 관리하는 기능을 제공한다.

 

 

 

 

 

 


+ Recent posts