.NET 소개

.NET은 다양한 유형의 애플리케이션을 빌드하기 위한 무료 크로스 플랫폼 오픈 소스 개발자 플랫폼입니다. 이는 여러 언어로 작성된 프로그램을 실행할 수 있으며, 그 중 가장 인기 있는 언어는 C#입니다. 이는 많은 대규모 앱 프로덕션에서 사용되는 고성능 런타임에 의존합니다.

.NET을 다운로드하고 첫 번째 앱 작성을 시작하는 방법을 알아보려면 시작하기를 참조하세요.

.NET 플랫폼은 생산성, 성능, 보안 및 안정성을 제공하도록 설계되었습니다. 가비지 수집기(GC)를 통해 자동 메모리 관리를 제공합니다. GC 및 엄격한 언어 컴파일러를 사용하기 때문에 형식이 안전하며 메모리가 안전합니다. async/awaitTask 프리미티브를 통해 동시성을 제공합니다. 여기에는 광범위한 기능을 갖추고 여러 운영체제 및 칩 아키텍처의 성능에 최적화된 대규모 라이브러리 집합이 포함되어 있습니다.

.NET에는 다음과 같은 디자인 포인트가 있습니다.

  • 생산성은 풀스택으로 런타임, 라이브러리, 언어 및 도구가 모두 개발자 사용자 경험에 기여합니다.
  • 안전 코드는 기본 컴퓨팅 모델이며, 안전하지 않은 코드 추가 수동 최적화를 사용하도록 설정합니다.
  • 정적 및 동적 코드 모두 지원되어 광범위한 고유 시나리오 집합을 사용할 수 있습니다.
  • 네이티브 코드 interop 및 하드웨어 내장 함수는 비용이 처렴하고 충실(원시 API 및 명령 액세스)합니다.
  • 코드는 플랫폼 간에 이식 가능하며(OS 및 칩 아키텍처), 플랫폼 대상을 지정하여 전문화 및 최적화가 가능합니다.
  • 범용 프로그래밍 모델의 특수 구현을 통해 프로그래밍 도메인 전반에 걸친 적응성(클라우드, 클라이언트, 게임)을 구현할 수 있습니다.
  • OpenTelemetry 및 gRPC와 같은업계 표준은 맞춤형 솔루션보다 선호됩니다.

.NET은 Microsoft와 커뮤니티에서 유지 관리합니다. 사용자가 안전하고 신뢰할 수 있는 애플리케이션을 프로덕션 환경에 배포할 수 있도록 정기적으로 업데이트됩니다.

구성 요소

.NET에는 다음 구성 요소가 포함됩니다.

  • 런타임 -- 애플리케이션 코드를 실행합니다.
  • 라이브러리 -- JSON 구문 분석과 같은 유틸리티 기능을 제공합니다.
  • 컴파일러 -- C#(및 기타 언어) 소스 코드를 (런타임) 실행 코드로 컴파일합니다.
  • SDK 및 기타 도구 -- 최신 워크플로를 사용하여 앱을 빌드하고 모니터링할 수 있습니다.
  • 앱 스택 -- ASP.NET Core 및 Windows Forms와 같이 앱을 작성할 수 있습니다.

런타임, 라이브러리 및 언어는 .NET 스택의 핵심 요소입니다. .NET 도구와 같은 상위 수준 구성 요소 및 앱 스택(예: ASP.NET Core)은 이러한 핵심 요소를 기반으로 합니다. C#은 .NET의 기본 프로그래밍 언어이며 대부분의 .NET은 C#으로 작성됩니다.

C#은 개체 지향이며 런타임은 개체 방향을 지원합니다. C#에는 가비지 컬렉션이 필요하며 런타임은 추적 가비지 수집기를 제공합니다. 라이브러리(및 앱 스택)는 개발자가 직관적인 워크플로에서 알고리즘을 생산적으로 작성할 수 있도록 하는 개념 및 개체 모델로 이러한 기능을 형성합니다.

핵심 라이브러리에는 수천 개의 형식이 노출되어 있으며, 이 중 상당수는 C# 언어와 통합되어 있습니다. 예를 들어 C#의 foreach 문을 사용하면 임의의 컬렉션을 열거할 수 있습니다. 패턴 기반 최적화를 통해 List<T> 컬렉션과 같은 작업을 간단하고 효율적으로 처리할 수 있습니다. 리소스 관리는 가비지 컬렉션에 맡길 수 있지만, using 명령문에서 IDisposable 및 직접 언어 지원을 통해 신속한 정리가 가능합니다.

여러 작업을 동시에 수행하는 기능은 거의 모든 워크로드의 기본입니다. UI 응답성을 유지하면서 백그라운드 처리를 수행하는 클라이언트 애플리케이션, 수천 개의 동시 요청을 처리하는 서비스, 수많은 동시 자극에 응답하는 디바이스, 컴퓨팅 집약적인 작업을 병렬 처리하는 고성능 머신 등이 이에 해당할 수 있습니다. 비동기 프로그래밍 지원은 C# 프로그래밍 언어의 최고급 기능으로, 이 언어가 제공하는 모든 제어 흐름 구조의 이점을 최대한 활용하면서 비동기 연산을 쉽게 작성하고 구성할 수 있는 asyncawait 키워드를 제공합니다.

형식 시스템은 안전성, 설명력, 역동성 및 네이티브 interop을 어느 정도 동일하게 충족하면서 상당한 폭을 제공합니다. 무엇보다도 형식 시스템은 객체 지향 프로그래밍 모델을 가능하게 합니다. 여기에는 형식, (단일 기본 클래스) 상속, 인터페이스(기본 메서드 구현 포함), 가상 메서드 디스패치가 포함되어 객체 지향이 허용하는 모든 타입 레이어링에 대해 합리적인 동작을 제공합니다. 제네릭 형식은 클래스를 하나 이상의 형식으로 전문화할 수 있는 범용 기능입니다.

.NET 런타임은 가비지 수집기를 통해 자동 메모리 관리를 제공합니다. 모든 언어에서 메모리 관리 모델은 그 언어의 가장 큰 특징일 것입니다. .NET 언어의 경우도 마찬가지입니다. .NET에는 자체 튜닝, 추적 GC가 있습니다. 일반적인 경우에는 “핸즈 오프” 작업을 제공하는 동시에 보다 극한의 워크로드를 위한 구성 옵션을 제공하는 것을 목표로 합니다. 현재의 GC는 다년간의 투자와 다양한 워크로드에서 얻은 학습의 결과물입니다.

값 형식과 스택 할당 메모리 블록은 .NET의 GC 관리 유형과 달리 데이터 및 네이티브 플랫폼 상호 운용에 대한 보다 직접적이고 낮은 수준의 제어를 제공합니다. 정수 형식과 같은 .NET의 기본 형식은 대부분 값 형식이며, 사용자는 비슷한 의미 체계로 자신만의 형식을 정의할 수 있습니다. 값 형식은 .NET의 제네릭 시스템을 통해 완벽하게 지원되므로, List<T> 같은 제네릭 형식은 값 형식 컬렉션에 대해 오버헤드 없는 플랫 메모리 표현을 제공할 수 있습니다.

리플렉션은 “데이터로서의 프로그램” 패러다임으로, 어셈블리, 형식 및 멤버 측면에서 프로그램의 한 부분이 다른 부분을 동적으로 쿼리하고 호출할 수 있게 해줍니다. 런타임에 바인딩된 프로그래밍 모델 및 도구에 특히 유용합니다.

예외는 .NET의 기본 오류 처리 모델입니다. 예외는 오류 정보를 메서드 서명에 표시하거나 모든 메서드에서 처리할 필요가 없다는 이점이 있습니다. 적절한 예외 처리는 애플리케이션 안정성에 필수적입니다. 앱이 충돌하지 않도록 하려면 코드에서 예상되는 예외를 의도적으로 처리할 수 있습니다. 크래시된 앱은 정의되지 않은 동작을 가진 앱보다 더 안정적이고 진단 가능합니다.

ASP.NET Core 및 Windows Forms와 같은 앱 스택은 하위 수준 라이브러리, 언어 및 런타임을 기반으로 빌드하고 활용합니다. 앱 스택은 앱이 구성되는 방식과 실행 수명 주기를 정의합니다.

SDK 및 기타 도구를 사용하면 개발자 데스크톱과 CI(연속 통합) 모두에서 최신 개발자 환경을 사용할 수 있습니다. 최신 개발자 환경에는 코드를 빌드, 분석 및 테스트할 수 있는 기능이 포함됩니다. .NET 프로젝트는 NuGet 패키지 복원 및 종속성 빌드를 오케스트레이션하는 단일 dotnet build 명령을 통해 빌드될 수 있습니다.

NuGet은 .NET의 패키지 관리자입니다. 여기에는 많은 시나리오에 대한 기능을 구현하는 수십만 개의 패키지가 포함되어 있습니다. 대부분의 앱은 일부 기능에 대해 NuGet 패키지를 사용합니다. NuGet 갤러리는 Microsoft에서 유지 관리합니다.

무료 및 오픈 소스

.NET은 무료 오픈 소스이며 .NET Foundation 프로젝트입니다. .NET은 여러 리포지토리의 Microsoft와 GitHub의 커뮤니티에서 유지 관리됩니다.

.NET 원본 및 이진 파일은 MIT 라이선스가 라이선싱합니다. Windows에 추가 라이선스가 적용됩니다.

지원

.NET을 여러 운영 체제에서 실행하고 최신 상태로 유지하기 위해 노력하는 여러 조직에서 .NET을 지원합니다. Arm64, x64 및 x86 아키텍처에서 사용할 수 있습니다.

.NET의 새 버전은 릴리스 및 지원 정책에 따라 매년 11월에 릴리스됩니다. 매월 Patch Tuesday(2주차 화요일)에 업데이트되며, 일반적으로 태평양 표준시 오전 10시에 업데이트됩니다.

.NET 에코시스템

.NET에는 여러 변형이 있으며 각각 다른 형식의 앱을 지원합니다. 다양한 변형이 존재하는 이유는 부분적으로는 역사적, 부분적으로는 기술적 이유 때문입니다.

.NET 구현:

  • .NET Framework -- 원래 .NET입니다. Windows 및 Windows Server의 광범위한 기능에 액세스할 수 있습니다. 유지 관리 면에서는 적극적으로 지원됩니다.
  • Mono - 원래 커뮤니티 및 오픈 소스 .NET입니다. .NET Framework의 플랫폼 간 구현입니다. Android, iOS 및 WebAssembly에 대해 적극적으로 지원됩니다.
  • .NET(Core) - 최신 .NET. 클라우드 시대에 맞게 재구상된 플랫폼 간 및 오픈 소스 구현으로, .NET Framework와 상당한 호환성을 유지하면서 .NET을 구현합니다. Linux, macOS 및 Windows에 대해 적극적으로 지원됩니다.

다음 단계