닷넷 코어
1. 개요
1. 개요
닷넷 코어는 마이크로소프트가 개발한 오픈 소스, 크로스 플랫폼 애플리케이션 개발 프레임워크이다. 원래 윈도우 전용이었던 닷넷 프레임워크의 한계를 극복하기 위해 만들어졌으며, 리눅스와 macOS를 포함한 다양한 운영 체제에서 애플리케이션을 개발하고 실행할 수 있다. 닷넷 재단이 관리하는 이 프로젝트는 MIT 라이선스 하에 공개되어 있다.
이 프레임워크는 C#, 비주얼 베이직 닷넷, F#을 주력 언어로 지원하며, 그 외에도 여러 서드파티 언어를 통해 개발이 가능하다. 닷넷 코어는 웹 애플리케이션, 클라우드 서비스, 마이크로서비스, 데스크톱 애플리케이션 등 다양한 종류의 소프트웨어를 구축하는 데 사용된다.
닷넷 코어의 등장 이후, 마이크로소프트는 기존의 닷넷 프레임워크, 닷넷 코어, 자마린 등을 통합하는 단일 플랫폼 전략을 추진했다. 그 결과, 닷넷 코어 3.1 이후 버전부터는 명칭에서 '코어'가 제거되고 단순히 '.NET'으로 불리며, 통합된 플랫폼의 근간이 되고 있다. 이는 개발자에게 더욱 일관된 개발 경험과 광범위한 배포 유연성을 제공한다.
2. 지원 플랫폼
2. 지원 플랫폼
닷넷 코어는 크로스 플랫폼을 핵심 목표로 설계되어 윈도우, 리눅스, macOS 등 주요 운영 체제를 광범위하게 지원한다. 이는 기존 닷넷 프레임워크가 윈도우에만 국한되었던 한계를 극복한 중요한 특징이다.
지원되는 플랫폼별로 세부적인 버전 요구사항이 존재한다. 예를 들어, 윈도우의 경우 윈도우 10 이상의 최신 버전을 권장하며, 리눅스는 우분투, RHEL, 데비안 등 주요 배포판을 공식적으로 지원한다. macOS 역시 최신 버전의 OS X에서 원활히 동작한다. 이러한 광범위한 플랫폼 지원 덕분에 서버, 데스크톱, 클라우드 등 다양한 환경에서 동일한 애플리케이션을 배포하고 실행할 수 있다.
이러한 크로스 플랫폼 특성은 마이크로소프트가 주도하는 오픈 소스 프로젝트인 닷넷 재단을 통해 가능해졌으며, MIT 라이선스 하에 개발되고 있다. 결과적으로 닷넷 코어는 개발자에게 플랫폼에 구애받지 않는 유연한 프레임워크 선택지를 제공한다.
3. 지원 언어
3. 지원 언어
닷넷 코어는 C#, Visual Basic .NET, F#을 공식적으로 지원하는 언어이다. 이 세 언어는 마이크로소프트가 직접 개발하고 유지 관리하는 주력 언어로, 닷넷 생태계의 핵심을 이룬다. C#은 가장 널리 사용되는 언어로, 객체 지향 프로그래밍과 함수형 프로그래밍 패러다임을 모두 지원하는 현대적인 언어이다. Visual Basic .NET은 접근성이 높은 구문을 특징으로 하며, F#은 함수형 프로그래밍에 중점을 둔 언어이다.
이 외에도 닷넷 플랫폼은 다양한 서드파티 언어를 지원한다. 과거에는 C++/CLI나 J#과 같은 언어도 포함되었으나, 현재는 주류에서 벗어났다. 동적 언어 런타임(DLR)을 통해 IronPython이나 IronRuby와 같은 동적 언어를 실행할 수 있는 기반도 마련되어 있다. 또한 PowerShell과 같은 스크립팅 언어나 Q#과 같은 특수 목적 언어도 닷넷 환경에서 동작한다.
따라서 개발자는 프로젝트의 요구사항과 선호도에 따라 다양한 언어 중에서 선택할 수 있다. 그러나 장기적인 유지보수와 활발한 생태계 지원을 고려할 때, C#, Visual Basic .NET, F#과 같은 공식 지원 언어를 사용하는 것이 일반적이다.
4. 버전
4. 버전
4.1. .NET 5
4.1. .NET 5
.NET 5는 마이크로소프트가 2020년 11월에 출시한 .NET 플랫폼의 주요 버전이다. 이 버전은 .NET Core와 .NET Framework의 통합을 향한 첫 번째 단계로, 기존에 분리되어 개발되던 두 가지 주요 구현체를 하나의 통합된 플랫폼으로 합치는 과정의 시작점이 되었다. 이로써 개발자는 Windows, Linux, macOS 등 다양한 플랫폼에서 일관된 API와 도구 체인을 사용할 수 있게 되었다. 이 통합 전략은 향후 버전에서도 지속되어 단일 .NET 생태계를 구축하는 기반을 마련했다.
이 버전은 C# 9.0과 F# 5.0을 공식 지원하며, 새로운 언어 기능과 함께 성능 및 생산성 향상에 중점을 두었다. 또한 ASP.NET Core, Entity Framework Core, Windows Forms, WPF 등 핵심 라이브러리와 프레임워크가 통합된 단일 SDK와 런타임에 포함되어 개발 환경이 간소화되었다. MIT 라이선스 하에 완전한 오픈 소스로 개발되어 커뮤니티의 기여를 적극적으로 수용하고 있다.
.NET 5는 .NET Framework 4.x 버전의 상당한 API 표면을 포용하여 기존 윈도우 애플리케이션의 이전 경로를 제공했지만, .NET Core의 근간인 크로스 플랫폼 설계와 높은 성능을 유지하는 것을 목표로 했다. 이는 닷넷 재단이 관리하는 프로젝트로서의 발전 방향을 확고히 하는 버전이었다. 그러나 .NET 5는 장기 지원 버전이 아니며, 이후 출시된 .NET 6이 첫 번째 통합 LTS 버전으로 자리 잡았다.
4.2. .NET 6
4.2. .NET 6
.NET 6은 마이크로소프트가 2021년 11월 8일에 출시한 닷넷 코어 플랫폼의 장기 지원(LTS) 버전이다. 이 버전은 .NET 5의 통합된 기반 위에 구축되어, 윈도우, 리눅스, macOS를 포함한 다양한 플랫폼에서 애플리케이션 개발을 위한 통합된 프레임워크를 제공한다. 주요 목표는 개발자 생산성 향상, 플랫폼 범위 확장, 그리고 런타임 및 라이브러리 전반에 걸친 성능 개선이었다.
이 버전은 C# 10과 F# 6 언어 버전을 공식 지원하며, 최신 언어 기능을 활용할 수 있게 했다. 특히 애플 M1 칩을 포함한 ARM64 아키텍처에 대한 네이티브 지원이 강화되어, 최신 하드웨어에서의 성능과 호환성을 크게 향상시켰다. 또한, 새로운 크로스 플랫폼 UI 프레임워크인 .NET MAUI의 지원이 도입되어, 단일 코드베이스로 모바일 및 데스크톱 애플리케이션을 빌드할 수 있는 기반을 마련했다.
성능 면에서 .NET 6은 파일 입출력, JSON 직렬화, HTTP 스택, 가비지 컬렉션 등 핵심 영역에서 상당한 개선을 이루었다. 이러한 최적화는 웹 애플리케이션과 마이크로서비스의 처리량 증가 및 지연 시간 감소로 이어졌다. 개발자 경험 측면에서는 dotnet watch 도구를 통한 핫 리로드 기능이 유지되어, 코드 변경 사항을 즉시 적용하며 개발할 수 있는 환경을 제공했다.
지원 유형 | 기간 | 비고 |
|---|---|---|
장기 지원(LTS) | 3년 (2024년 11월 12일까지) | 주요 버전 중 짝수 버전에 적용 |
.NET 6은 이후 버전인 .NET 7과 .NET 8의 토대가 되었으며, 현대적이고 고성능의 닷넷 애플리케이션 개발을 위한 중요한 이정표로 평가받는다.
4.3. .NET 7
4.3. .NET 7
.NET 7은 마이크로소프트가 2022년 11월 8일에 출시한 닷넷 코어 플랫폼의 주요 버전이다. 이 버전은 .NET 6의 후속 버전으로, 성능 향상과 새로운 기능에 초점을 맞추었다. C# 11과 F# 7을 공식 지원하며, 개발자들에게 더욱 표현력이 풍부하고 효율적인 코딩 환경을 제공한다. 또한 .NET Native AOT 컴파일이 정식으로 도입되어 특정 시나리오에서의 애플리케이션 시작 성능과 배포 크기를 크게 개선했다.
주요 개선 사항으로는 성능 최적화가 두드러진다. JIT 컴파일러와 가비지 컬렉션이 개선되었으며, 새로운 API를 통해 메모리 처리와 텍스트 처리 성능이 향상되었다. .NET Native AOT 컴파일은 윈도우와 리눅스의 x64 및 ARM64 아키텍처를 대상으로 하는 콘솔 애플리케이션에 처음으로 도입되어, 런타임 설치 없이 실행 가능한 단일 파일을 생성하고 시작 시간을 단축하는 이점을 제공했다.
이 버전은 윈도우, 리눅스, macOS를 포함한 다양한 플랫폼을 계속 지원하며, MIT 라이선스 하에 오픈 소스로 개발되었다. ASP.NET Core, 엔티티 프레임워크 코어, .NET MAUI와 같은 주요 프레임워크들도 해당 버전으로 업데이트되어 개발자들이 최신 웹, 모바일, 데스크톱 애플리케이션을 구축할 수 있도록 했다.
4.4. .NET 8
4.4. .NET 8
.NET 8은 마이크로소프트가 2023년 11월 15일에 정식 출시한 닷넷 코어의 장기 지원(LTS) 버전이다. 이 버전은 C# 12 및 F# 8 언어 기능을 완전히 지원하며, 윈도우, 리눅스, macOS를 포함한 다양한 플랫폼에서 실행된다. 주요 목표는 성능 향상, 네이티브 AOT 컴파일 지원 확장, 그리고 개발자 생산성 개선에 중점을 두었다.
성능 면에서 .NET 8은 JIT 컴파일러와 가비지 컬렉터에 대한 개선이 이루어졌으며, AVX-512 명령어 세트를 활용한 벡터화 연산이 향상되었다. 특히 .NET Native AOT 컴파일의 지원 범위가 크게 확대되어, 기존의 데스크톱 애플리케이션뿐만 아니라 안드로이드, iOS, macOS용 애플리케이션도 사전 컴파일된 단일 실행 파일로 배포할 수 있게 되었다.
개발자 경험을 위해 ASP.NET Core는 최소 API의 성능을 더욱 개선했고, Blazor는 서버와 클라이언트 렌더링을 혼합할 수 있는 새로운 자동({{lang|en|Auto}}) 렌더링 모드를 도입했다. 또한 시스템 리소스 사용량을 자동으로 조절하는 가비지 컬렉터의 동적 조정 기능이 추가되어 클라우드 네이티브 환경에서의 효율성을 높였다.
지원 유형 | 지원 종료일 |
|---|---|
장기 지원(LTS) | 2026년 11월 10일 |
이 버전은 3년간의 장기 지원을 받는 LTS 릴리스로, 프로덕션 환경에서의 안정적인 사용에 적합하다. .NET 9는 이후에 출시된 단기 지원(STS) 버전이다.
4.5. .NET 9
4.5. .NET 9
.NET 9는 마이크로소프트가 개발한 .NET 플랫폼의 주요 버전으로, 2024년 11월 12일에 정식 출시되었다. 이 버전은 표준 기간 지원(STS)을 받는 릴리스로, 출시일로부터 약 18개월 동안 지원이 제공된다. .NET 9는 C# 13과 F# 9를 지원하며, 성능 향상, 클라우드 네이티브 애플리케이션 지원 강화, 개발자 생산성 개선에 중점을 두었다.
주요 개선 사항으로는 CLI 도구의 성능 최적화, ASP.NET Core의 효율성 향상, .NET MAUI를 통한 크로스 플랫폼 개발 경험 개선 등이 포함된다. 또한 클라우드 및 컨테이너 환경에서의 실행을 더욱 효율적으로 만들기 위한 여러 최적화가 이루어졌다. 이 버전은 Windows, Linux, macOS를 포함한 다양한 플랫폼에서 사용할 수 있다.
.NET 9는 이전 버전인 .NET 8과의 호환성을 유지하면서도, 현대적 애플리케이션 개발의 요구사항을 반영한 새로운 API와 기능들을 도입했다. 개발 생태계의 통합과 오픈 소스 개발 모델을 통해 지속적으로 발전하고 있는 .NET 플랫폼의 최신 구현체이다.
5. 주요 런타임
5. 주요 런타임
5.1. .NET Core / .NET 5 이상
5.1. .NET Core / .NET 5 이상
.NET Core는 마이크로소프트가 개발한 크로스 플랫폼, 오픈 소스 애플리케이션 프레임워크이다. 기존 윈도우에 종속된 .NET Framework의 한계를 극복하기 위해 설계되었으며, 리눅스와 macOS를 포함한 다양한 운영 체제에서 애플리케이션을 개발하고 실행할 수 있다. MIT 라이선스 하에 .NET Foundation이 관리하는 오픈 소스 프로젝트로 운영된다.
이 런타임은 C#, Visual Basic .NET, F# 등 여러 프로그래밍 언어를 지원하며, 웹 애플리케이션, 클라우드 서비스, 콘솔 애플리케이션 등 다양한 형태의 소프트웨어 개발에 사용된다. .NET Core 3.0 버전부터는 데스크톱 애플리케이션 개발을 위한 윈도우 폼과 WPF도 지원하기 시작했다.
버전 3.1 이후, 마이크로소프트는 통합된 미래 비전을 위해 'Core' 접미사를 제거하고 단순히 '.NET'으로 명명하기 시작했다. .NET 5 버전부터는 .NET Framework, .NET Core, Xamarin 등의 주요 분기를 하나의 플랫폼으로 통합하는 작업이 본격화되었다. 따라서 현재 '.NET'이라고 불리는 최신 버전들은 사실상 .NET Core의 진화된 형태라고 볼 수 있다.
이 기술은 모듈화된 설계, 높은 성능, 그리고 Docker와 같은 컨테이너 환경에서의 효율적인 운영을 주요 강점으로 삼고 있다. 개발자는 Visual Studio, Visual Studio Code 또는 명령줄 인터페이스를 통해 .NET Core 애플리케이션을 빌드하고 배포할 수 있다.
5.2. .NET Framework
5.2. .NET Framework
.NET Framework는 마이크로소프트가 개발한 애플리케이션 개발 및 실행 프레임워크이다. 이 프레임워크는 C#, Visual Basic .NET, F# 등 다양한 프로그래밍 언어를 지원하며, 공용 언어 런타임(CLR)과 방대한 클래스 라이브러리(FCL)로 구성된다. 주로 윈도우 운영 체제 환경에서 실행되도록 설계되었으며, 웹 애플리케이션(ASP.NET), 데스크톱 애플리케이션(Windows Forms, WPF), 서비스 등 다양한 종류의 프로그램 개발에 널리 사용되었다.
.NET Framework의 핵심 작동 원리는 공용 중간 언어(CIL)에 기반한다. 지원 언어로 작성된 소스 코드는 각각의 컴파일러를 통해 CIL로 컴파일된 후, 실행 시점에 JIT 컴파일러에 의해 기계어로 변환되어 실행된다. 이 구조는 언어 간 상호 운용성을 제공하며, 관리 코드 실행 환경을 통해 메모리 관리와 보안 등의 서비스를 제공한다.
버전 4.8을 마지막으로 .NET Framework는 새로운 기능 개발이 중단되었으며, 이후의 발전은 크로스 플랫폼을 지원하는 .NET Core 및 통합된 .NET 플랫폼으로 이어졌다. 그러나 수많은 기존 레거시 시스템과 엔터프라이즈 애플리케이션이 여전히 .NET Framework에 의존하고 있어, 마이크로소프트는 주요 윈도우 버전에 대한 보안 업데이트와 호환성 유지를 지속하고 있다.
5.3. Mono
5.3. Mono
Mono는 닷넷 프레임워크의 오픈 소스, 크로스 플랫폼 구현체이다. 마이크로소프트의 공식 구현체가 윈도우에만 국한되어 있던 시절에, 리눅스와 macOS 등 다른 운영체제에서 C# 및 .NET 애플리케이션을 실행할 수 있도록 개발되었다. 이 프로젝트는 닷넷 재단의 관리 하에 MIT 라이선스로 배포된다.
Mono는 공통 언어 런타임의 호환 구현체와 프레임워크 클래스 라이브러리의 핵심 부분을 포함하며, Visual Basic .NET 및 F#을 포함한 여러 .NET 언어를 지원한다. 이 런타임의 가장 주목할 만한 활용 사례는 유니티 게임 엔진과 자마린 모바일 애플리케이션 개발 프레임워크이다. 두 기술 모두 Mono를 기반으로 하여 각각 게임과 모바일 앱을 다양한 플랫폼에 배포할 수 있게 한다.
닷넷 코어가 등장하고 활발히 개발되면서 Mono의 전략적 중요성은 변화했다. 마이크로소프트가 자마린을 인수한 후, Mono는 점차 닷넷 코어에 통합되거나 특수한 용도로 활용되기 시작했다. 2019년 이후로 Mono의 독자적인 주요 개발은 사실상 중단된 상태이다. 2024년 8월부터는 와인 프로젝트 측이 Mono 런타임의 관리와 유지보수를 맡고 있다.
현재 Mono는 주로 레거시 닷넷 프레임워크 애플리케이션을 윈도우 이외의 플랫폼에서 구동하거나, 유니티 및 자마arin과 같은 특정 프레임워크의 런타임 엔진으로서 그 가치를 인정받고 있다. 공식적인 .NET의 미래 개발 경로는 닷넷 코어를 계승한 통합된 .NET 플랫폼에 집중되어 있다.
6. .NET Standard
6. .NET Standard
.NET Standard는 마이크로소프트가 정의한 공식 API 사양이다. 서로 다른 .NET 구현체들, 예를 들어 .NET Framework, .NET Core (이후 .NET 5 이상), Mono, Xamarin 등이 공통으로 지원해야 하는 기본 API 집합을 규정한다. 이를 통해 개발자는 하나의 .NET Standard 라이브러리를 작성하고, 이 라이브러리가 여러 .NET 플랫폼에서 호환되어 실행될 수 있도록 보장받을 수 있다. 이는 크로스 플랫폼 개발 시 발생할 수 있는 호환성 문제를 해결하는 핵심 메커니즘이었다.
.NET Standard는 버전별로 지원하는 API 범위가 다르며, 높은 버전일수록 더 많은 API를 포함한다. 예를 들어, .NET Standard 2.0은 .NET Framework 4.6.1, .NET Core 2.0, Mono 5.4 등에서 지원된다. 개발자는 대상으로 삼을 플랫폼들이 모두 지원하는 .NET Standard 버전을 선택하여 라이브러리를 빌드하면 된다. 이 접근 방식은 NuGet을 통한 재사용 가능한 라이브러리 생태계의 기반을 마련하는 데 크게 기여했다.
그러나 .NET 5부터는 .NET Core, .NET Framework, Xamarin 등의 주요 구현체가 단일 통합 플랫폼으로 수렴되기 시작했다. 이에 따라 마이크로소프트는 .NET Standard의 필요성이 줄어들었다고 판단하여, .NET Standard 2.1을 마지막으로 새로운 버전의 개발을 중단했다[1]. 기존에 출시된 .NET Standard 버전들은 이후의 통합된 .NET 버전(.NET 5 이상)에서 계속 지원되지만, 새로운 플랫폼 간 API 표준은 통합된 단일 .NET SDK와 런타임이 그 역할을 대신하게 되었다.
7. .NET Native AOT
7. .NET Native AOT
.NET Native AOT는 닷넷 코어 애플리케이션을 중간 언어인 CIL이 아닌, 대상 플랫폼의 네이티브 코드로 직접 컴파일하는 기술이다. 기존의 JIT 컴파일 방식은 실행 시점에 코드를 변환하기 때문에 초기 실행 속도가 느리고 런타임 설치가 필요했으나, AOT 컴파일은 이러한 단점을 해결한다. 애플리케이션이 완전한 네이티브 바이너리로 생성되므로 실행 속도가 빠르고 메모리 사용량이 적으며, 별도의 닷넷 런타임 설치 없이 독립 실행이 가능해진다.
이 기술은 .NET 7에서 처음 도입되어 윈도우 및 리눅스의 x86-64와 ARM64 아키텍처를 지원했다. .NET 8에서는 지원 범위가 크게 확장되어 안드로이드, macOS, iOS, tvOS 등 모바일 및 임베디드 플랫폼에서도 네이티브 AOT 컴파일이 가능해졌다. 이로 인해 IoT 장치나 성능이 중요한 클라우드 네이티브 애플리케이션 개발에 적합한 옵션이 되었다.
그러나 네이티브 AOT에는 몇 가지 제한 사항이 따른다. 가장 큰 제약은 실행 시점에 타입 정보를 동적으로 조사하는 리플렉션 기능의 사용이 크게 제한된다는 점이다. 또한, 일부 동적 코드 생성 기술이나 특정 Serialization 라이브러리의 사용에 어려움이 있을 수 있다. 현재 윈도우 폼과 WPF는 공식적으로 네이티브 AOT를 지원하지 않아, 이러한 GUI 애플리케이션을 AOT로 빌드하려면 Avalonia UI나 Uno Platform 같은 대체 프레임워크를 고려해야 한다.
프로젝트에서 네이티브 AOT를 사용하려면 .csproj 파일에 <PublishAot>true</PublishAot> 속성을 추가한 후 dotnet publish 명령을 실행하면 된다. 이는 특히 작은 컨테이너 이미지가 필요하거나 빠른 시작 시간이 중요한 마이크로서비스 및 서버리스 함수 배포 시나리오에서 큰 장점을 제공한다.
8. 사건/사고
8. 사건/사고
8.1. .NET 6.0 핫 리로드 기능 삭제 사건
8.1. .NET 6.0 핫 리로드 기능 삭제 사건
.NET 6.0 핫 리로드 기능 삭제 사건은 .NET 6 출시 직전에 발생한 논란이다. 핫 리로드는 소스 코드를 수정한 후 애플리케이션을 재시작하지 않고도 변경 사항을 즉시 적용할 수 있는 개발자 편의 기능으로, dotnet watch 명령을 통해 사용할 수 있었다. 2021년 10월, 마이크로소프트가 .NET의 공개 GitHub 저장소에서 해당 기능을 제거하는 병합 요청을 통과시켰다.
이 조치는 개발자 커뮤니티의 강한 반발을 불러일으켰다. 문제는 이 기능이 오픈 소스인 .NET SDK에서 제거된 반면, 유료 통합 개발 환경인 Visual Studio에만 동일한 기능을 유지하려는 의도로 보였기 때문이다. 당시 유출된 내부 메시지를 통해 이 같은 전략이 확인되며, 오픈 소스 생태계에 대한 신뢰를 훼손했다는 비판이 쏟아졌다.
커뮤니티의 거센 항의와 논란 끝에, 마이크로소프트는 사건 발생 3일 만에 결정을 번복했다. 핫 리로드 기능을 .NET 6 SDK에 복원하는 새로운 병합 요청이 승인되어, 정식 출시된 .NET 6에는 dotnet watch 명령어를 통한 핫 리로드 기능이 그대로 포함되게 되었다. 이 사건은 오픈 소스 프로젝트에서 커뮤니티의 목소리가 중요한 역할을 할 수 있음을 보여준 사례로 기록되었다.
