.NET 플랫폼 정리: 플랫폼, Standard, 구현체, 그리고 변화
Post

.NET 플랫폼 정리: 플랫폼, Standard, 구현체, 그리고 변화

.NET은 Microsoft가 개발한 다양한 유형의 애플리케이션을 위한 개발 플랫폼입니다. 이 글에서는 다음 주제를 다룹니다.

  • .NET 플랫폼이란?
  • .NET의 다양한 구현체들
  • .NET Standard 사양이란?
  • .NET 5 이전과 이후의 변화

.NET 플랫폼이란?

.NET은 애플리케이션 개발을 위한 런타임 환경, 언어, 라이브러리를 제공하는 종합적인 개발 플랫폼입니다. 이를 통해 Windows, Linux, macOS, iOS, Android 등 다양한 환경에서 동작하는 프로그램을 만들 수 있습니다.

.NET 플랫폼은 크게 두 가지 주요 구성 요소로 이루어져 있습니다.

  • CLR(Common Language Runtime): 메모리 관리, 스레드 관리, 보안 등 런타임 기능을 제공합니다.
  • BCL(Base Class Library): 파일 입출력, 네트워크, 컬렉션 등 기본 기능을 제공하는 표준 클래스 라이브러리입니다.

.NET의 다양한 구현체들

.NET에는 여러 가지 구현체가 존재합니다. 각 구현체는 다양한 플랫폼을 지원합니다.

구현체지원 플랫폼지원 시작일지원 종료일.NET Standard 지원지원 언어
.NET Framework 1.xWindows 2000 이상2002년 1월OS 지원 종료 시까지-C#, VB.NET 등
.NET Framework 4.8.1Windows 10 이상2022년 10월OS 지원 종료 시까지2.0C# 7.1
.NET Core 1.0Windows, Linux, macOS2016년 6월2019년 6월 종료1.6C#, F#
.NET Core 3.1Windows, Linux, macOS2019년 11월2024년 12월까지 장기 지원2.1C#, F#
MonoWindows, Linux, macOS, iOS, Android 등2004년 6월계속 개발 중일부C#, F#
.NET 5.0Windows, Linux, macOS, iOS, Android 등2020년 11월2022년 5월 종료-C#, F#, VB.NET

.NET Standard 사양이란?

.NET Standard는 다양한 .NET 구현체에서 공통적으로 사용할 수 있는 API 규격입니다. 이를 통해 하나의 라이브러리로 여러 플랫폼을 지원할 수 있도록 합니다.

  • .NET Framework, .NET Core, Xamarin, Mono 모두가 이 표준을 준수하여 호환성을 유지합니다.
  • .NET Standard를 타겟팅하여 빌드하면, 다양한 플랫폼에서도 별도의 수정 없이 라이브러리를 재사용할 수 있습니다.

그러나 .NET 5 출시 이후, 모든 플랫폼을 단일 코드베이스와 런타임(CoreCLR)으로 지원하게 되면서, 플랫폼 간 API 차이를 조율할 필요 자체가 줄어들었고, 이에 따라 “.NET Standard처럼 사양-구현체를 분리하여 별도 규격을 유지할 필요성”도 사실상 사라지게 되었습니다.

.NET 5 이전과 이후

.NET 5부터는 기존의 .NET Framework, .NET Core, Xamarin, Mono 등 여러 개로 나뉘어 있던 .NET 구현체들을 하나의 통합된 플랫폼으로 재구성하는 전략이 적용되었습니다. 이전에는 운영체제나 용도에 따라 별도의 코드베이스와 런타임을 유지해야 했으며, 이는 다음과 같은 문제점을 야기했습니다.

  • 코드 중복: 유사한 기능을 각 구현체마다 별도로 개발하고 유지해야 했습니다.
  • API 버전 관리의 복잡성: 플랫폼마다 API 제공 여부나 동작 방식이 달라, 동일한 기능이라도 플랫폼에 따라 차이가 생겼습니다.
  • 호환성 문제: 개발자가 여러 플랫폼을 동시에 지원하려 할 때, 각 플랫폼에 맞는 별도 버전의 라이브러리나 코드를 작성해야 했습니다.
  • 개발 및 유지보수 비용 증가: 중복 코드와 플랫폼별 이슈로 인해 개발과 테스트, 유지보수에 드는 비용이 크게 증가했습니다.

이러한 문제를 완화하기 위해 Microsoft는 .NET Standard를 도입했습니다. .NET Standard는 여러 .NET 구현체에서 공통으로 사용할 수 있는 최소 API 집합을 규정하여, 라이브러리 개발자가 하나의 API 세트만 지원하면 다양한 플랫폼에서 재사용할 수 있도록 하는 사양(specification) 역할을 했습니다.

그러나 .NET 5부터는 모든 플랫폼을 단일 코드베이스와 런타임(CoreCLR)으로 지원하게 되면서, 플랫폼 간 API 차이를 조율할 필요 자체가 줄어들었고, 이에 따라 “.NET Standard처럼 사양-구현체를 분리하여 별도 규격을 유지할 필요성”도 사실상 사라지게 되었습니다.

특성.NET Framework 4.x / .NET Core 3.x.NET 5+ (Unified Platform)
코드베이스플랫폼별 분리단일 소스 트리 통합
BCL(Base Class Library)별도 관리System.* 네임스페이스로 통합
런타임CLR(Windows), CoreCLR(Linux) 구분CoreCLR 기반 단일 런타임
컴파일JIT 중심기본 JIT, .NET 6+부터 Native AOT 지원
SDK 도구개별 SDK (netfx, dotnetcore-sdk)통합 SDK (dotnet) 사용

Reference

gitignore에서 디렉토리 무시와 파일 무시

.NET 컴파일 방식 비교: AOT vs JIT