닷넷 생태계 발전 과정 개요

닷넷 생태계 발전 과정 개요

닷넷(.NET)은 마이크로소프트가 2000년대 초반에 처음 선보인 이래로, 데스크톱 애플리케이션 중심의 Classic .NET Framework(이하 “클래식 닷넷”) 시대를 거쳐, 오픈소스 및 크로스플랫폼 지향의 .NET Core, 이를 통합하여 사실상 단일한 .NET 런타임을 지향하는 .NET 5 및 .NET 6에 이르기까지 지속적으로 진화해 왔습니다.

D2 Diagram

클래식 .NET Framework 시대

초기 .NET Framework는 주로 Windows 환경에 특화되어 있었습니다. WinForms나 WPF를 활용한 데스크톱 애플리케이션 개발, 그리고 ASP.NET을 통해 서버 사이드 웹 애플리케이션을 구축할 수 있었습니다. 당시에는 .NET이 Windows 운영체제에 깊게 결합되어 있었기 때문에, 다른 플랫폼(예: Linux, macOS)에서의 활용이나 클라우드-네이티브 애플리케이션 개발 측면에서 제약이 있었습니다.

WinForms

역할

  • 데스크톱 애플리케이션 개발을 위한 최초의 .NET UI 프레임워크.
  • GDI+와 Win32 API를 기반으로 구현되어, 빠르고 간단한 GUI 애플리케이션 개발 가능.

특징

  • 이벤트 기반 프로그래밍 모델.
  • 초보자도 쉽게 접근할 수 있는 간단한 구조.

제한

  • 현대적 UI를 구현하기 어려움.
  • 고해상도 DPI 지원이 부족.

WPF (Windows Presentation Foundation)

역할

  • WinForms의 한계를 극복하고, 더 현대적인 UI 및 그래픽 애플리케이션 개발을 위한 플랫폼.
  • DirectX를 활용한 벡터 기반 렌더링.

특징

  • XAML을 통한 선언적 UI 정의.
  • 강력한 데이터 바인딩과 스타일링 지원.
  • 애니메이션, 3D 렌더링 등 고급 그래픽 기능.

제한

  • Windows 전용.
  • 복잡한 구조로 인해 학습 곡선이 가파름.

ASP.NET

역할

  • 웹 애플리케이션과 웹 API 개발을 위한 .NET Framework의 웹 기술.

주요 구성

  • Web Forms: 이벤트 기반의 웹 개발 모델, 데스크톱 애플리케이션 개발 방식과 유사.
  • MVC (Model-View-Controller): 강력한 구조적 웹 애플리케이션 개발을 위한 설계.
  • Web API: RESTful API 개발 지원.

특징

  • 강력한 서버 측 렌더링.
  • Web Forms는 초기에 빠른 개발에 유리했으나, 현대적 웹 개발 트렌드와는 다소 거리감이 있음.

기타 주요 구성 요소

ADO.NET

  • 데이터베이스 연결 및 조작을 위한 데이터 액세스 기술.
  • SQL Server 및 다른 관계형 데이터베이스와의 통합 지원.

Entity Framework

  • ADO.NET을 기반으로 한 ORMObject-Relational Mapping 기술.
  • 데이터베이스 모델링 및 쿼리를 객체 지향적으로 처리.

Windows Communication Foundation (WCF)

  • 분산 애플리케이션 개발을 위한 서비스 지향 아키텍처SOA, Service Oriented Architecture 기술.
  • SOAP Simple Object Access Protocol 기반의 서비스와 통신.

Windows Workflow Foundation (WF)

  • 비즈니스 프로세스 자동화 및 워크플로우 설계 도구.

.NET Core의 등장

이러한 한계를 극복하기 위해 .NET Core가 출현하였습니다. .NET Core는 오픈소스화되고 다양한 운영체제(Windows, Linux, macOS)에서 동작할 수 있으며, 경량화와 모듈화가 특징이었습니다. 이를 통해 개발자들은 특정 OS에 종속되지 않고 클라우드, 컨테이너 환경에서도 쉽게 .NET 애플리케이션을 활용할 수 있게 되었습니다. 또한, ASP.NET Core가 .NET Core와 함께 제공되면서 기존 ASP.NET의 복잡성과 무거움을 개선하였고, 뛰어난 성능과 유연성을 갖춘 웹 프레임워크로 자리매김하였습니다. .NET Core도 주요 요소와 기타 요소로 나눌 수 있습니다. 이 구분은 .NET Core의 핵심 런타임과 필수 구성 요소를 중심으로 주요 요소를 정의하고, 특정 요구 사항에 따라 사용되는 부가적 기능을 기타 요소로 분류하는 방식으로 이루어집니다.

CoreCLR

  • .NET Core의 핵심 실행 엔진으로, 모든 .NET Core 애플리케이션의 런타임 역할을 수행.
  • 주요 기능:
    • JIT(Just-In-Time) 컴파일.
    • 메모리 관리(Garbage Collection).
    • 크로스플랫폼 지원.

CoreFX

  • .NET Core의 Base Class Library (BCL)로, 표준 라이브러리 집합.
  • 포함된 주요 기능:
    • 컬렉션, 파일 입출력, 네트워킹.
    • 암호화 및 보안.
    • 데이터 직렬화/역직렬화.

.NET CLI

  • 명령줄 인터페이스로, .NET Core의 프로젝트 생성, 빌드, 실행, 배포를 지원.
  • 개발자의 효율적인 워크플로를 위한 핵심 도구.

ASP.NET Core

  • 웹 애플리케이션 및 REST API 개발을 위한 고성능 웹 프레임워크.
  • Kestrel 웹 서버와 통합되어 동작.

Entity Framework Core

  • 데이터베이스와 애플리케이션 간의 ORM(Object Relational Mapping) 기술.
  • ADO.NET의 대체로 설계된 데이터 액세스 기술.

Roslyn

  • .NET Core의 기본 C# 및 VB.NET 컴파일러.
  • 코드 컴파일, 분석, 리팩토링 지원.

Kestrel

  • ASP.NET Core에서 기본적으로 사용하는 경량 내장 웹 서버.
  • 빠른 성능과 컨테이너화된 환경 지원.

.NET Core의 기타 요소

NuGet

  • .NET Core의 패키지 관리 시스템.
  • 필요에 따라 라이브러리를 추가하여 확장 가능.

MSBuild

  • .NET Core 애플리케이션의 빌드 및 프로젝트 구성 도구.
  • Visual Studio와 통합되며, 프로젝트 관리 자동화 지원.

Cross-platform Runtime

  • .NET Core의 크로스플랫폼 지원 요소로, Windows, macOS, Linux에서 동일한 런타임 환경 제공.
  • 컨테이너(Docker) 및 클라우드 환경과의 통합.

.NET Framework와 비교

유사점

  • 주요 요소: .NET Framework의 CLR, BCL(CoreFX), ASP.NET, WPF/WinForms와 유사하게 핵심 요소로 구성.
  • 기타 요소: 서드파티 라이브러리, NuGet 패키지 등을 통해 확장.

차이점

  • .NET Core는 경량화된 모듈식 설계로, 주요 요소와 기타 요소 간의 구분이 명확.
  • .NET Framework는 단일 설치 구조로 모든 기능이 포함되어 있지만 .NET Core는 필요한 요소만 선택적으로 포함 가능.

.NET 5로의 통합

마이크로소프트는 장기적으로 .NET Framework와 .NET Core를 하나로 통합하고, 단일한 개발 경험을 제공하고자 하였습니다. 그 결과물이 .NET 5입니다. .NET 5는 사실상 .NET Core를 기반으로 하면서 기존 WinForms, WPF 등 전통적인 기술 또한 지원하고, 새롭게 등장한 Blazor 등을 통해 C#만으로 풀스택 웹 개발(프론트엔드까지 포함)이 가능하도록 하였습니다. 이를 통해 개발자들은 다양한 애플리케이션 유형을 하나의 런타임, 하나의 SDK로 다룰 수 있게 되었습니다.

.NET 6 및 그 이후

.NET 6는 장기 지원(LTS)을 제공하며, 크로스플랫폼 UI 개발 프레임워크인 .NET MAUI를 도입하였습니다. MAUI는 기존 Xamarin.Forms를 발전시킨 것으로, Windows, macOS, iOS, Android 등 여러 플랫폼에서 네이티브 애플리케이션을 단일 코드베이스로 개발할 수 있게 합니다. 이를 통해 닷넷 생태계는 데스크톱, 웹, 모바일, 클라우드, 게임, IoT 등 거의 모든 영역을 포괄하는 범용 플랫폼으로 나아가고 있습니다.

이와 더불어, UWP(Universal Windows Platform) 기반 기술을 확장한 Uno Platform을 활용하면 XAML 기반 UI를 웹, 모바일을 포함한 다양한 환경으로 확장할 수 있습니다. 즉, 단일한 UI 기술 스택으로 멀티플랫폼 애플리케이션 개발이 수월해졌습니다.

D2 Diagram