.NET Framework의 개념적 개요

.NET Framework는 차세대 응용 프로그램 및 XML Web services를 만들고 실행하는 것을 지원하는 필수적인 Windows 구성 요소입니다. .NET Framework는 다음과 같은 목적을 달성하기 위해 디자인되었습니다.

  • 개체 코드가 로컬로 저장 및 실행되든, 로컬로 실행되지만 인터넷을 통해 분산되든, 원격으로 실행되든 상관 없이 일관된 개체 지향 프로그래밍 환경을 제공합니다.

  • 소프트웨어 배포 및 버전 관리 충돌을 최소화하는 코드 실행 환경을 제공합니다.

  • 알 수 없거나 일부 신뢰할 수 있는 타사에서 만든 코드를 포함하여 안전하게 코드를 실행할 수 있는 코드 실행 환경을 제공합니다.

  • 스크립트 또는 해석 환경의 성능 문제를 제거하는 코드 실행 환경을 제공합니다.

  • Windows 기반 응용 프로그램 및 웹 기반 응용 프로그램 같은 다양한 형식의 응용 프로그램에서 개발자가 일관된 경험을 가질 수 있도록 합니다.

  • .NET Framework를 기반으로 하는 코드가 다른 모든 코드와 통합될 수 있도록 모든 통신을 산업 표준을 토대로 빌드합니다.

.NET Framework에는 공용 언어 런타임과 .NET Framework 클래스 라이브러리라는 두 개의 주요 구성 요소가 있습니다. 공용 언어 런타임은 .NET Framework의 기초입니다. 런타임은 실행 시 코드를 관리하는 에이전트로서, 메모리 관리, 스레드 관리, 원격 서비스 등의 핵심 서비스를 제공하며 동시에 엄격한 형식 안전성 및 다른 형태의 코드 정확성을 유지하므로 보안과 견고성을 강화합니다. 사실, 코드 관리의 개념은 런타임의 기본 원칙입니다. 런타임을 대상으로 하는 코드는 관리 코드라고 하는 반면, 런타임을 대상으로 하지 않는 코드는 비관리 코드라고 합니다. .NET Framework의 다른 기본 구성 요소인 클래스 라이브러리는 다시 사용할 수 있는 형식의 광범한 개체 지향 컬렉션으로서, 기존 명령줄 또는 GUI(그래픽 사용자 인터페이스) 응용 프로그램에서부터 ASP.NET에서 제공하는 Web Forms 및 XML Web services 같은 최신의 혁신적인 기능을 기반으로 하는 응용 프로그램에 이르기까지 다양한 응용 프로그램을 개발하는 데 사용할 수 있습니다.

.NET Framework는 공용 언어 런타임을 해당 프로세스로 로드하고 관리 코드의 실행을 시작하는 관리되지 않는 구성 요소에 의해 호스팅되므로, 관리되는 기능과 관리되지 않는 기능을 모두 사용하는 소프트웨어 환경을 만들 수 있습니다. .NET Framework에서는 몇 가지 런타임 호스트를 제공할 뿐만 아니라 타사 런타임 호스트의 개발도 지원합니다.

예를 들어, ASP.NET에서는 런타임을 호스팅하여 관리 코드에 대해 확장 가능한 서버 쪽 환경을 제공합니다. ASP.NET은 런타임과 함께 직접 작동하여 ASP.NET 응용 프로그램 및 XML Web services를 활성화합니다. Web Forms 응용 프로그램과 XML Web services에 대한 내용은 이 항목의 뒷부분에서 설명합니다.

Internet Explorer는 MIME 형식 확장의 형식으로 런타임을 호스팅하는 관리되지 않는 응용 프로그램의 예입니다. Internet Explorer를 사용하여 런타임을 호스팅하면 HTML 문서에 관리되는 구성 요소 또는 Windows Forms 컨트롤을 포함시킬 수 있습니다. 이러한 방식으로 런타임을 호스팅하면 Microsoft® ActiveX® 컨트롤과 유사한 이식 가능한 관리 코드가 가능해지며, 관리 코드에서만 제공되는 일부 신뢰된 실행 및 격리된 파일 저장소 등의 크게 향상된 기능을 사용할 수 있게 됩니다.

다음 그림에서는 응용 프로그램 및 전체 시스템에 대한 공용 언어 런타임과 클래스 라이브러리의 관계를 보여 줍니다. 이 그림에서는 관리 코드가 보다 큰 아키텍처에서 작동하는 방식도 보여 줍니다.

컨텍스트에 있는 .NET Framework

더 큰 아키텍처 내의 관리 코드

다음 단원에서는 .NET Framework의 기본 구성 요소 및 기능에 대해 보다 자세히 설명합니다.

공용 언어 런타임의 기능

공용 언어 런타임에서는 메모리, 스레드 실행, 코드 실행, 코드 안전성 확인, 컴파일 및 기타 시스템 서비스를 관리합니다. 이러한 기능은 공용 언어 런타임에서 실행되는 관리 코드의 기본 기능입니다.

보안과 관련하여, 관리되는 구성 요소의 장점으로 인터넷, 기업 네트워크 및 로컬 컴퓨터 등을 포함하는 여러 요소에 따라 신뢰도를 다르게 부여할 수 있습니다. 이는 관리되는 구성 요소가 동일한 활성 응용 프로그램에 사용되는 경우에도 파일 액세스 작업, 레지스트리 액세스 작업 또는 기타 중요한 기능을 수행할 수 있을 수도 있고 수행할 수 없을 수도 있음을 의미합니다.

런타임에서는 코드 액세스 보안을 적용합니다. 예를 들어, 사용자는 웹 페이지에 포함된 실행 파일이 화면에 애니메이션을 재생하거나 음악을 재생할 수는 있지만 자신의 개인 데이터, 파일 시스템 또는 네트워크에 액세스할 수는 없는 것으로 신뢰할 수 있습니다. 따라서 런타임의 보안 기능은 소프트웨어의 합법적인 인터넷 배포를 가능하게 하는 매우 강력한 기능을 수행합니다.

또한 런타임에서는 CTS(공용 형식 시스템)라고 하는 엄격한 형식 및 코드 확인 인프라를 구현하여 코드 견고성을 유지합니다. CTS는 모든 관리 코드가 자체 설명 방식이 되도록 합니다. Microsoft와 타사의 다양한 언어 컴파일러에서는 CTS에 맞는 관리 코드를 생성합니다. 따라서 관리 코드에서는 형식 준수성 및 형식 안전성을 엄격하게 유지하면서 다른 관리되는 형식 및 인스턴스를 소비할 수 있습니다.

또한 런타임의 관리되는 환경에서는 일반적인 소프트웨어 문제를 대부분 제거합니다. 예를 들어, 런타임에서는 개체가 더 이상 사용되지 않을 때 해당 개체를 해제하면서 자동으로 개체 레이아웃을 처리하고 개체에 대한 참조를 관리합니다. 이 자동 메모리 관리 기능은 응용 프로그램의 가장 일반적인 오류 중 두 가지인 메모리 누수와 잘못된 메모리 참조 문제를 해결합니다.

런타임에서는 개발자의 생산성도 향상시킵니다. 예를 들어, 프로그래머는 자신이 선택한 개발 언어로 응용 프로그램을 작성하면서도 다른 개발자가 다른 언어로 작성한 런타임, 클래스 라이브러리 및 구성 요소를 완전히 사용할 수 있습니다. 이는 런타임을 대상으로 하는 모든 컴파일러 공급업체에게 해당됩니다. .NET Framework를 대상으로 하는 언어 컴파일러에서는 기존 응용 프로그램에 대한 마이그레이션 프로세스를 매우 쉽게 함으로써 .NET Framework의 기능을 해당 언어로 작성된 기존 코드에서 사용할 수 있도록 합니다.

런타임은 미래의 소프트웨어를 위해 디자인되었지만 현재 또는 과거의 소프트웨어도 지원합니다. 관리 코드와 비관리 코드 간의 상호 운용성을 통해 개발자는 필요한 COM 구성 요소 및 DLL을 계속 사용할 수 있습니다.

런타임은 성능 향상을 목적으로 디자인되었습니다. 공용 언어 런타임에서는 다양한 표준 런타임 서비스를 제공하지만 관리 코드는 절대 해석되지 않습니다. JIT(Just In Time) 컴파일이라는 기능을 사용하면 모든 관리 코드는 해당 코드가 실행되는 시스템의 네이티브 기계어 코드로 실행될 수 있습니다. 동시에, 메모리 관리자는 조각화된 메모리가 발생할 가능성을 제거하고 메모리의 참조 집약성을 높여 성능을 더 향상시킵니다.

마지막으로, 런타임은 Microsoft® SQL Server™ 및 IIS(인터넷 정보 서비스)와 같은 고성능의 서버 쪽 응용 프로그램을 통해 호스팅될 수 있습니다. 이 인프라를 사용하면 관리 코드로 비즈니스 논리를 작성하면서, 런타임 호스팅을 지원하는 우수한 엔터프라이즈 서버의 뛰어난 성능을 경험할 수 있습니다.

.NET Framework 클래스 라이브러리

.NET Framework 클래스 라이브러리는 공용 언어 런타임과 강력하게 통합된 다시 사용할 수 있는 형식의 컬렉션입니다. 클래스 라이브러리는 개체 지향적이며, 사용자 고유의 관리 코드는 이 라이브러리에서 제공하는 형식에서 기능이 파생될 수 있습니다. 클래스 라이브러리를 사용하면 .NET Framework 형식을 사용하기가 쉬워질 뿐만 아니라 .NET Framework의 새로운 기능을 익히는 데 필요한 시간도 줄어듭니다. 또한 타사 구성 요소가 .NET Framework의 클래스와 쉽게 통합될 수 있습니다.

예를 들어, .NET Framework 컬렉션 클래스에서는 사용자 고유의 컬렉션 클래스를 개발하는 데 사용할 수 있는 여러 인터페이스를 구현합니다. 사용자의 컬렉션 클래스는 .NET Framework의 클래스와 쉽게 결합됩니다.

개체 지향 클래스 라이브러리에서와 마찬가지로, .NET Framework 형식을 사용하면 문자열 관리, 데이터 수집, 데이터베이스 연결, 파일 액세스 등의 작업을 비롯한 일반적인 범위의 프로그래밍 작업을 수행할 수 있습니다. 이러한 일반적인 작업 외에도 클래스 라이브러리에는 특수화된 다양한 개발 시나리오를 지원하는 형식이 포함되어 있습니다. 예를 들어, .NET Framework를 사용하면 다음과 같은 종류의 응용 프로그램 및 서비스를 개발할 수 있습니다.

예를 들어, Windows Forms 클래스는 Windows GUI 개발을 매우 단순하게 하는 다시 사용할 수 있는 형식의 포괄적인 집합입니다. ASP.NET Web Form 응용 프로그램을 작성하는 경우 Web Forms 클래스를 사용할 수 있습니다.

참고 항목

기타 리소스

.NET Framework 시스템 요구 사항

.NET Framework 핵심 개발

.NET Framework 고급 개발

.NET Framework Core Samples