이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.24 11:18
공통 언어 런타임(Common Language Runtime, CLR)은 마이크로소프트의 닷넷 이니셔티브의 핵심 구성 요소이다. 이는 공통 언어 기반(CLI) 표준에 정의된, 프로그램 코드를 실행하기 위한 환경을 제공하는 가상 머신이다. 주된 역할은 공통 중간 언어(CIL, 이전 명칭 MSIL)로 작성된 바이트코드를 실행하는 것으로, 이 코드를 최종적으로 운영 체제가 이해할 수 있는 네이티브 코드로 변환하여 실행한다.
개발자는 C#이나 VB 닷넷과 같은 다양한 고급 언어로 애플리케이션을 작성하며, 각 언어의 컴파일러는 소스 코드를 플랫폼 중립적인 CIL 코드로 변환한다. 이 CIL 코드는 실행 시점에 CLR에 의해 처리된다. CLR은 JIT 컴파일 방식을 기본으로 사용하여 필요 시 CIL 코드를 네이티브 코드로 컴파일하며, AOT 컴파일 도구를 사용해 미리 컴파일하는 옵션도 제공한다.
CLR이 제공하는 핵심 서비스로는 메모리 관리, 스레드 관리, 예외 처리, 쓰레기 수집, 그리고 보안이 있다. 이러한 서비스들은 개발자가 하드웨어나 운영 체제의 복잡한 세부 사항에 깊이 관여하지 않고도 안정적이고 효율적인 애플리케이션을 구축할 수 있는 기반을 마련해 준다. CLR은 닷넷 프레임워크의 실행 엔진이며, 모노와 같은 다른 CLI 구현체에서도 그 기능이 구현되어 있다.
공통 언어 런타임의 역사는 마이크로소프트의 닷넷 이니셔티브와 밀접하게 연결되어 있다. 2000년대 초반, 마이크로소프트는 자바 가상 머신과 유사한, 다양한 프로그래밍 언어를 지원하는 통합 실행 환경을 구상했다. 이 비전의 핵심 구현체로서 공통 언어 런타임이 개발되었으며, 2002년 닷넷 프레임워크 1.0과 함께 처음 공개되었다. 이는 C#과 VB 닷넷 같은 언어로 작성된 코드를 공통 중간 언어로 컴파일하고 실행하는 환경을 제공했다.
초기 버전 이후 공통 언어 런타임은 지속적으로 발전해 왔다. 닷넷 프레임워크 2.0(2005년)에서는 제네릭 지원과 성능 개선이 이루어졌고, 이후 버전에서는 병렬 프로그래밍과 향상된 쓰레기 수집 알고리즘 등이 도입되었다. 마이크로소프트의 구현 외에도, 모노 프로젝트와 같은 오픈 소스 구현체가 등장하며 리눅스와 macOS 같은 다른 플랫폼에서도 공통 언어 런타임 기반 애플리케이션 실행이 가능해졌다.
닷넷 생태계의 중요한 전환점은 .NET Core의 등장이었다. 2016년에 발표된 .NET Core는 크로스 플랫폼, 오픈 소스, 모듈화를 지향하는 차세대 구현체였으며, 그 안에 포함된 공통 언어 런타임도 이러한 특성을 갖추게 되었다. 이후 마이크로소프트는 닷넷 프레임워크, .NET Core, Xamarin 등을 통합하는 단일 플랫폼인 .NET 5를 2020년에 출시하며 통합된 공통 언어 런타임의 진화를 이어가고 있다.
공통 언어 런타임의 메모리 관리 기능은 개발자가 명시적으로 메모리를 할당하고 해제하는 복잡한 작업에서 벗어나게 해주는 핵심 서비스이다. 이는 C++와 같은 언어에서 발생할 수 있는 메모리 누수와 댕글링 포인터 문제를 방지하는 데 중점을 둔다. 런타임은 가상 머신의 일부로 작동하며, 애플리케이션이 실행되는 동안 모든 메모리 할당을 투명하게 관리한다.
주요 관리 대상은 관리되는 힙 영역이다. 개발자가 new 연산자 등을 사용하여 객체를 생성하면, 공통 언어 런타임은 이 힙 영역에서 필요한 메모리 공간을 자동으로 할당한다. 이 과정에서 런타임은 메모리 공간의 배치를 최적화하고 단편화를 최소화하기 위해 연속된 공간을 유지하려고 노력한다. 할당된 메모리는 해당 객체에 대한 참조가 더 이상 존재하지 않게 되면, 쓰레기 수집 과정을 통해 자동으로 회수된다.
이러한 자동화된 메모리 관리 모델은 개발자의 생산성을 크게 향상시키고, 메모리 관련 오류로 인한 애플리케이션의 불안정성을 근본적으로 줄인다. 결과적으로 개발자는 비즈니스 로직 구현에 더 집중할 수 있으며, C#이나 VB 닷넷과 같은 닷넷 프레임워크 언어를 사용하는 프로그래머들은 메모리 관리의 복잡성 없이도 안정적인 애플리케이션을 개발할 수 있는 환경을 제공받는다.
공통 언어 런타임의 핵심 기능 중 하나는 쓰레기 수집(Garbage Collection, GC)이다. 이는 메모리 관리의 중요한 부분으로, 개발자가 명시적으로 메모리를 할당하고 해제하는 번거로움과 실수를 줄여준다. 공통 언어 런타임은 애플리케이션이 실행되는 동안 힙(Heap) 메모리를 모니터링하며, 더 이상 사용되지 않는 객체를 자동으로 식별하고 그 메모리를 회수하여 재사용 가능한 상태로 만든다. 이를 통해 메모리 누수를 방지하고 애플리케이션의 안정성을 높인다.
쓰레기 수집기는 일반적으로 세대별(Generation) 방식을 사용하여 효율성을 극대화한다. 새로 생성된 객체는 0세대(Gen 0)에 할당되며, 수집 주기가 짧다. 한 번의 수집 과정에서 살아남은 객체는 1세대(Gen 1)로 승격되고, 여기서도 오래 살아남은 객체는 결국 2세대(Gen 2)로 이동한다. 2세대는 가장 오래된 객체들을 담고 있어 수집 빈도가 가장 낮다. 이 방식은 수명이 짧은 임시 객체는 빠르게 처리하고, 장수하는 객체를 위한 수집 비용을 줄이는 최적화 전략이다.
수집 과정은 일반적으로 애플리케이션의 실행 스레드를 일시 중단시키는 "스톱 더 월드(Stop-the-world)" 현상을 동반한다. 공통 언어 런타임은 이 중단 시간을 최소화하기 위해 백그라운드 GC, 동시 GC 등 다양한 수집 모드를 제공하며, .NET Core 및 .NET 5 이상의 최신 구현에서는 더욱 개선된 성능을 보인다. 개발자는 특정 시나리오에 맞게 GC의 동작을 일부 제어할 수도 있다.
이 자동화된 메모리 관리 모델은 C#이나 VB 닷넷과 같은 관리 코드를 사용하는 개발자에게 큰 생산성 향상을 제공한다. 개발자는 비즈니스 로직 구현에 집중할 수 있으며, 복잡한 메모리 해제 문제에서 벗어날 수 있다. 이는 자바 가상 머신의 쓰레기 수집 기능과 유사한 개념으로, 현대적인 가상 머신 및 런타임 환경의 표준 기능으로 자리 잡았다.
공통 언어 런타임의 보안 시스템은 코드 액세스 보안과 역할 기반 보안을 포함한 다층적인 접근 방식을 제공한다. 이 시스템은 메타데이터에 포함된 증거 정보를 기반으로 어셈블리의 신뢰 수준을 평가하고, 해당 수준에 따라 파일 시스템, 레지스트리, 네트워크 등 특정 보호된 리소스에 대한 접근 권한을 부여하거나 제한한다. 이를 통해 관리 코드가 실행되는 환경을 격리하고, 악의적이거나 오류가 있는 코드가 시스템에 피해를 주는 것을 방지한다.
보안 정책은 사용자, 컴퓨터, 엔터프라이즈 수준으로 구성되어 있으며, 관리자는 이를 통해 세분화된 권한을 설정할 수 있다. 또한 공통 언어 런타임은 강력한 이름 서명과 디지털 서명을 통해 어셈블리의 무결성과 출처를 검증한다. 이러한 검증 과정은 코드가 로드되는 시점과 JIT 컴파일 시점에 수행되어 변조된 코드의 실행을 차단한다.
공통 언어 런타임은 애플리케이션 실행 중 발생하는 오류를 체계적으로 관리하기 위한 통합된 예외 처리 모델을 제공한다. 이 모델은 C#, VB.NET 등 공통 언어 기반을 따르는 모든 언어에서 일관되게 사용할 수 있으며, 런타임이 예외의 발생, 전파, 처리를 관리한다. 이를 통해 개발자는 구조화되고 안정적인 방식으로 프로그램의 비정상적인 조건을 처리할 수 있다.
예외가 발생하면 공통 언어 런타임은 예외 정보를 담은 객체를 생성하고, 실행 중인 코드 블록을 검색하여 적절한 예외 처리기를 찾는다. 처리기를 찾을 때까지 호출 스택을 거슬러 올라가며 검색을 계속한다. 이 과정에서 파이널리 블록의 실행을 보장하여 메모리나 파일 핸들 같은 리소스가 적절히 정리되도록 한다.
이 통합 모델은 언어 간 상호 운용성을 크게 향상시킨다. 한 언어로 작성된 코드에서 발생한 예외를 다른 언어로 작성된 코드에서 포착하고 처리하는 것이 가능하다. 또한 런타임은 처리되지 않은 예외를 최종적으로 포착하여 애플리케이션을 정상적으로 종료시키거나, 디버깅 정보를 제공할 수 있다.
공통 언어 런타임은 스레드의 생성, 실행, 동기화, 종료를 관리하는 서비스를 제공한다. 이를 통해 개발자는 운영 체제의 스레드 관리 세부 사항을 직접 다루지 않고도 멀티스레딩 애플리케이션을 보다 쉽게 작성할 수 있다. CLR은 관리 코드 내에서 스레드 풀을 제공하여 스레드 생성 및 관리의 오버헤드를 줄이고, 동기화를 위한 모니터와 같은 기본적인 동기화 개체를 지원한다.
CLR의 스레드 관리 서비스는 스레드 풀, 타이머, 잠금 메커니즘 등을 포함한다. 특히 스레드 풀은 작업 항목을 효율적으로 실행하기 위해 재사용 가능한 작업자 스레드 집합을 관리하여 성능을 최적화한다. 또한 공용 언어 사양을 준수하는 모든 언어에서 일관된 방식으로 스레드 관련 기능을 사용할 수 있도록 한다.
CLR은 스레드 로컬 저장소와 같은 고급 기능도 지원하여 각 스레드가 자신만의 데이터를 독립적으로 저장하고 접근할 수 있게 한다. 이는 병렬 처리나 비동기 프로그래밍 패턴을 구현할 때 데이터의 안전성을 보장하는 데 중요하다. 이러한 관리 서비스는 애플리케이션의 안정성과 확장성을 높이는 데 기여한다.
공통 중간 언어는 공통 언어 런타임이 실행하는 중간 표현 계층의 바이트코드이다. 이전에는 마이크로소프트 중간 언어라는 의미로 MSIL로 알려졌으나, 이후 공식적으로 CIL이라는 명칭을 사용한다. C#이나 VB 닷넷과 같은 고급 프로그래밍 언어로 작성된 소스 코드는 각 언어의 컴파일러에 의해 공통 중간 언어 코드로 변환된다. 이 과정은 플랫폼에 독립적인 중간 형태를 생성하는 것이 핵심이다.
공통 중간 언어 코드는 운영 체제에 직접 종속되지 않는 명령어 집합으로 구성된다. 이 코드는 JIT 컴파일 방식으로 실행 시점에 대상 CPU의 네이티브 코드로 변환되어 실행되거나, AOT 컴파일 방식을 통해 실행 전에 미리 네이티브 이미지로 컴파일될 수 있다. 이러한 설계는 자바 가상 머신의 바이트코드 개념과 유사한, "한 번 작성하고 어디서나 실행한다"는 철학을 구현한다.
공통 중간 언어는 단순한 명령어 이상으로 풍부한 메타데이터와 공통 형 체계 정보를 포함한다. 이는 런타임이 코드를 검증하고, 메모리를 안전하게 관리하며, 강력한 보안 정책을 적용할 수 있는 기반을 제공한다. 따라서 공통 중간 언어는 닷넷 프레임워크 및 모노와 같은 다양한 구현체에서 코드의 이식성과 안전한 실행을 보장하는 핵심 요소이다.
JIT 컴파일은 공통 언어 런타임이 공통 중간 언어로 작성된 코드를 실행하는 과정에서 실시간으로 기계어로 변환하는 핵심 기술이다. 이 방식은 애플리케이션이 실행될 때, 필요에 따라 메서드 단위로 CIL 코드를 해당 시스템의 네이티브 코드로 컴파일한다. 이는 자바 가상 머신의 JIT 컴파일 방식과 유사한 개념으로, 플랫폼 독립적인 중간 언어를 다양한 하드웨어 환경에서 효율적으로 실행할 수 있게 해준다.
JIT 컴파일의 주요 장점은 실행 시점의 정보를 활용한 동적 최적화가 가능하다는 점이다. 컴파일러는 프로그램이 실제로 실행되는 동안 수집된 프로파일링 데이터를 바탕으로, 가장 빈번히 호출되는 코드 경로를 식별하고 이를 고도로 최적화된 기계어로 생성할 수 있다. 이는 정적 AOT 컴파일로는 달성하기 어려운, 런타임 특화 최적화를 가능하게 한다.
그러나 이 방식은 애플리케이션의 초기 실행 시점에 컴파일 오버헤드를 발생시킨다. 사용자가 메서드를 처음 호출할 때 컴파일이 이루어지므로, 시작 시간이 지연될 수 있다. 이를 완화하기 위해 닷넷 프레임워크의 NGen과 같은 도구를 사용해 미리 네이티브 이미지를 생성할 수 있지만, 이 경우 동적 최적화의 이점은 사라진다.
따라서 JIT 컴파일은 빠른 시작 시간보다는 장기간 실행되는 서버 애플리케이션이나 반복적으로 호출되는 코드의 성능을 극대화하는 데 적합한 전략이다. 공통 언어 런타임은 이 기술을 통해 관리 코드의 이식성과 성능 사이의 균형을 효과적으로 유지한다.
AOT 컴파일은 공통 언어 런타임에서 공통 중간 언어 코드를 실행 시점 이전에 네이티브 코드로 변환하는 방식이다. 이는 일반적인 JIT 컴파일 방식과 대비되는 개념으로, 애플리케이션 배포 전이나 설치 과정에서 미리 컴파일을 수행한다. 마이크로소프트의 .NET Framework에서는 NGen(Native Image Generator)이라는 도구가 AOT 컴파일 기능을 제공한다.
AOT 컴파일의 주요 장점은 애플리케이션의 시작 시간을 단축할 수 있다는 점이다. 실행 시 매번 JIT 컴파일을 수행할 필요가 없기 때문이다. 또한 컴파일된 네이티브 코드는 여러 프로세스 간에 메모리를 공유할 수 있어 시스템 전체의 메모리 사용량을 줄이는 효과도 있다. 이 방식은 특히 자주 실행되고 빠르게 시작되어야 하는 데스크톱 애플리케이션에 유리하다.
그러나 AOT 컴파일에는 한계도 존재한다. 가장 큰 단점은 실행 시간 정보를 활용한 동적 최적화가 불가능하다는 것이다. JIT 컴파일러는 프로그램 실행 중에 수집된 프로파일 데이터를 바탕으로 코드를 최적화할 수 있지만, AOT 컴파일은 설치 시점의 정적 분석에만 의존한다. 따라서 장시간 실행되는 서버 프로그램에서는 JIT 컴파일이 제공할 수 있는 추가적인 성능 향상을 기대하기 어렵다.
.NET Core 및 통합된 이후의 .NET 플랫폼에서는 AOT 컴파일에 대한 접근 방식이 진화했다. .NET 네이티브나 이후의 ReadyToRun 컴파일 모드와 같은 기술을 통해, 크로스 플랫폼 환경에서도 AOT 컴파일의 이점을 활용할 수 있도록 지원 범위가 확대되었다. 이러한 발전은 모노 프로젝트의 사전 컴파일 기술 경험에도 기반을 두고 있다.
.NET Framework는 마이크로소프트가 개발한 최초의 공식 공통 언어 런타임 구현체이다. 이 프레임워크는 윈도우 운영 체제를 위한 통합 애플리케이션 개발 및 실행 플랫폼으로 설계되었다. .NET Framework는 공통 언어 런타임 실행 환경과 방대한 클래스 라이브러리를 함께 제공하여, 개발자가 C#이나 VB.NET과 같은 다양한 언어로 작성한 코드를 공통 중간 언어로 컴파일하고, 이를 윈도우에서 실행할 수 있게 한다.
이 구현체는 윈도우 폼, ASP.NET, 윈도우 커뮤니케이션 파운데이션과 같은 핵심 기술을 포함하며, 주로 데스크톱 애플리케이션, 웹 애플리케이션, 웹 서비스 개발에 널리 사용되었다. .NET Framework의 버전은 CLR 버전과 밀접하게 연동되어 발전했으며, 1.0, 1.1, 2.0, 3.0, 3.5, 4.0, 4.5부터 4.8까지 여러 버전이 출시되었다.
시간이 지나면서 .NET Framework는 윈도우에 강하게 종속되는 한계를 드러냈다. 이에 따라 마이크로소프트는 크로스 플랫폼 지원과 모듈화를 강화한 현대적인 구현체인 .NET Core를 출시하게 되었다. 이후 .NET Core는 .NET 5 이상의 통합 플랫폼으로 발전하면서, 새로운 애플리케이션 개발의 주류가 되었다. 그러나 수많은 기존 엔터프라이즈 애플리케이션은 여전히 .NET Framework 위에서 운영되고 있다.
.NET Core는 2016년에 출시된 마이크로소프트의 오픈 소스, 크로스 플랫폼 애플리케이션 프레임워크이다. 이는 기존 .NET Framework와 달리 윈도우, 리눅스, macOS 등 다양한 운영 체제에서 동작하도록 설계되었다. .NET Core의 핵심 실행 엔진은 공통 언어 런타임의 현대적이고 최적화된 구현체로, 모듈화와 높은 성능을 중점으로 개발되었다. 이 런타임은 서버, 클라우드, 및 컨테이너 기반 애플리케이션에 적합하도록 설계되었다.
.NET Core의 성공을 바탕으로 마이크로소프트는 .NET 생태계를 통합하는 방향으로 나아갔다. 2020년에 출시된 .NET 5는 .NET Core, .NET Framework, 모노, Xamarin의 기술을 하나의 통합된 플랫폼으로 합치는 과정의 첫 번째 버전이었다. 이후 .NET 6, .NET 7, .NET 8로 이어지는 연간 메이저 릴리스 체계가 정착되었다. 이 통합된 .NET 플랫폼은 모든 종류의 애플리케이션(웹, 데스크톱, 모바일, 클라우드, 사물인터넷)을 빌드하기 위한 단일 런타임과 프레임워크 클래스 라이브러리를 제공한다.
이 새로운 .NET 플랫폼에서 공통 언어 런타임은 계속해서 메모리 관리, 쓰레기 수집, 보안, 예외 처리, 스레드 관리 같은 핵심 서비스를 제공한다. 그러나 성능, 크로스 플랫폼 지원, 네이티브 AOT 컴파일 지원, 그리고 마이크로서비스 아키텍처에 대한 적합성이 크게 강화되었다. 런타임 자체도 오픈 소스로 개발되어 GitHub에서 그 발전을 지켜볼 수 있다.
결과적으로, .NET Core 및 이후의 통합 .NET(5 이상)은 공통 언어 런타임의 주요 구현체이자 미래 방향성이 되었다. 이는 기존 윈도우 중심의 .NET Framework 구현체와는 별개로, 더 넓은 범위의 개발 시나리오와 운영 환경을 지원하는 현대적인 런타임 환경을 제공한다.
모노는 공통 언어 기반 및 공통 언어 런타임의 오픈 소스, 크로스 플랫폼 구현체이다. 마이크로소프트의 .NET 프레임워크가 주로 윈도우 환경에서만 동작하는 것과 달리, 모노는 리눅스, macOS, 안드로이드 등 다양한 운영 체제에서 CIL 코드를 실행할 수 있는 런타임 환경을 제공한다. 이 프로젝트는 자마린 회사에 의해 주도적으로 개발되었으며, 닷넷 애플리케이션의 이식성을 크게 확장하는 데 기여했다.
모노의 핵심 구성 요소는 공통 언어 런타임 호환 런타임 엔진, 공통 중간 언어를 네이티브 코드로 변환하는 JIT 컴파일러, 그리고 .NET 프레임워크 클래스 라이브러리의 상당 부분을 재구현한 포괄적인 클래스 라이브러리이다. 이를 통해 개발자는 C샵이나 VB 닷넷 같은 언어로 작성된 코드를 수정 없이 다른 플랫폼에서 실행할 수 있는 가능성을 얻었다. 모노는 특히 리눅스 기반 서버 환경이나 모바일 앱 개발 분야에서 널리 활용되었다.
모노 프로젝트는 마이크로소프트가 공개한 ECMA 표준을 따르며, 상용 및 오픈 소스 애플리케이션 개발에 모두 사용된다. 모노의 발전은 이후 .NET Core 및 통합된 .NET 5 이상의 크로스 플랫폼 전략에 영향을 미쳤으며, 오늘날에도 특정 임베디드 시스템이나 레거시 크로스 플랫폼 프로젝트에서 중요한 역할을 하고 있다.
공통 언어 기반(Common Language Infrastructure, CLI)은 공통 언어 런타임의 동작을 정의하는 개방형 표준이다. 이 표준은 마이크로소프트가 제안하여 ECMA 인터내셔널과 ISO에서 표준으로 채택되었다. CLI는 C#이나 VB 닷넷과 같은 다양한 고급 언어로 작성된 코드가 공통 중간 언어(CIL)로 컴파일되고, 이를 실행하는 런타임 환경이 제공해야 할 핵심 기능들을 규정한다.
CLI 표준은 크게 네 가지 구성 요소로 이루어져 있다. 공통 형식 시스템(CTS)은 모든 언어가 공유하는 데이터 형식과 규칙을 정의하며, 공통 언어 사양(CLS)은 언어 간 상호 운용성을 보장하기 위한 최소 규칙 집합을 제공한다. 가상 실행 시스템(VES)은 CIL 코드를 실행하는 런타임 엔진의 요구 사항을 명시하고, 메타데이터 시스템은 어셈블리와 형식에 대한 정보를 설명하는 체계를 규정한다.
이 표준화의 핵심 목적은 언어 중립성과 플랫폼 독립성을 실현하는 것이다. 덕분에 서로 다른 프로그래밍 언어로 작성된 구성 요소들이 하나의 애플리케이션 내에서 원활하게 상호 작용할 수 있다. 또한 CLI 표준을 준수하는 런타임 구현체는 닷넷 프레임워크, 모노, 닷넷 코어 등 다양한 플랫폼에서 존재할 수 있어, 개발자는 동일한 CIL 코드를 여러 환경에서 실행할 가능성을 얻게 된다.
따라서 공통 언어 런타임(CLR)은 마이크로소프트의 닷넷 프레임워크에서 제공하는 CLI 표준의 구체적인 구현체라고 볼 수 있다. CLI는 실행 환경의 청사진을 제공하는 반면, CLR은 이를 마이크로소프트 윈도우 운영 체제에 맞게 구체화하고 확장한 실체이다.
.NET 프레임워크는 마이크로소프트가 개발한 소프트웨어 프레임워크로, 공통 언어 런타임을 핵심 실행 엔진으로 사용한다. 이 프레임워크는 주로 마이크로소프트 윈도우 운영 체제를 위한 응용 프로그램을 개발하고 실행하기 위한 플랫폼을 제공한다. .NET 프레임워크는 공통 중간 언어로 컴파일된 코드를 실행하는 공통 언어 런타임과 함께 방대한 클래스 라이브러리를 포함하고 있어, 개발자가 윈도우 폼, ASP.NET, 윈도우 커뮤니케이션 파운데이션과 같은 다양한 유형의 프로그램을 구축할 수 있게 지원한다.
.NET 프레임워크는 C#, VB.NET, F# 등 여러 프로그래밍 언어를 지원하며, 이들 언어로 작성된 코드는 모두 공통 중간 언어로 컴파일되어 공통 언어 런타임 위에서 동작한다. 이를 통해 언어 간 상호 운용성이 보장되고, 메모리 관리, 쓰레기 수집, 보안, 예외 처리 같은 핵심 서비스를 런타임이 일관되게 제공받을 수 있다. 이 프레임워크는 데스크톱 애플리케이션, 웹 애플리케이션, 웹 서비스 등 광범위한 개발에 사용되어 왔다.
주요 버전 | 출시 연도 | 포함된 CLR 버전 | 주목할 만한 특징 |
|---|---|---|---|
.NET Framework 1.0 | 2002년 | CLR 1.0 | 최초 정식 버전 |
.NET Framework 2.0 | 2005년 | CLR 2.0 | 제네릭 지원, ASP.NET 2.0 |
.NET Framework 3.0 | 2006년 | CLR 2.0 | WPF, WCF, WF, CardSpace 추가 |
.NET Framework 4.0 | 2010년 | CLR 4 | 동적 언어 런타임, 병렬 컴퓨팅 지원 |
.NET Framework 4.8 | 2019년 | CLR 4 | 마지막 주요 버전 업데이트 |
시간이 지나면서 마이크로소프트는 크로스 플랫폼 지원과 모듈화를 강화한 현대적인 구현체인 .NET Core를 출시했으며, 이후 이를 통합하여 단일 플랫폼인 .NET 5 이상의 버전으로 발전시켰다. 이 새로운 방향성에도 불구하고, 기존의 .NET 프레임워크는 수많은 레거시 윈도우 애플리케이션의 기반을 이루고 있으며, 여전히 마이크로소프트의 지원 하에 유지 관리되고 있다.
공통 언어 런타임은 마이크로소프트의 닷넷 생태계를 이루는 핵심 기술 중 하나이다. 이 기술은 자바 가상 머신과 유사한 개념으로, 다양한 프로그래밍 언어로 작성된 코드가 하나의 통일된 환경에서 실행될 수 있도록 한다. 이로 인해 C#이나 비주얼 베이직 닷넷과 같은 서로 다른 언어 간의 상호 운용성이 크게 향상되었다.
CLR의 존재는 닷넷 프레임워크, 닷넷 코어, 그리고 통합된 .NET 5 이후의 .NET 플랫폼 구현체들이 공유하는 기반이 된다. 또한 모노와 같은 오픈 소스 구현체를 통해 리눅스나 macOS와 같은 비마이크로소프트 윈도우 환경에서도 CLR 기반 애플리케이션의 실행이 가능해졌다.
이 런타임 환경은 개발자로 하여금 메모리 할당과 해제, 보안 정책 적용, 예외 처리와 같은 낮은 수준의 시스템 관리 작업에서 상당 부분 자유롭게 해준다. 대신 개발자는 비즈니스 로직 구현에 더 집중할 수 있게 되었으며, 이는 애플리케이션 개발 생산성 향상에 기여했다.