Search
Duplicate

C# 6.0 완벽 가이드/ .NET Framework 개요

.NET Framework의 거의 모든 능력은 다종다양한 ‘관리되는 형식(managed type)’들을 통해 제공된다. 이 형식들은 계통구조(hierarchy) 형태의 이름공간들로 조직화되어 있으며, 일단의 어셈블리 파일들로 배포, 설치된다. 이들과 CLR(공용 언어 런타임)을 합친 것이 바로 .NET 플랫폼이다.
.NET Framework의 형식들 일부는 CLR이 직접 사용한다. 이들은 관리되는 호스팅 환경에 필수적인 형식들로, mscorlib.dll 이라는 어셈블리 안에 들어 있다.
C#의 내장 형식들과 기본 컬렉션 클래스들, 그리고 스트림 처리나 직렬화, 반영(reflection), 스레드 적용, 네이티브 상호운용성을 위한 형식들이 여기에 속한다.
이보다 한 수준 위에는 CLR 수준의 기능성에 살을 붙이는 추가적인 형식들이 있다. 이들은 이를테면 XML 처리나 네트워킹, LINQ 같은 기능을 제공한다.
.NET Framework의 그 나머지 부분은 응용 API 들로 구성되어 있는데, 이들 대부분은 크게 다음과 같은 3가지 기능 영역으로 분류된다.
사용자 인터페이스 기술
뒷단(backend) 기술
분산 시스템 기술
.NET Framework 4.6의 새로운 기능
쓰레기 수거기가 수거를 실행하는 시점을 좀 더 세밀하게 제어할 수 있는 새 메서드들이 GC 클래스에 추가되었다.
새롭고 더 빠른 64비트 JIT 컴파일러가 도입되었다.
System.Numerics 이름공간에 하드웨어 가속 행렬 및 벡터 형식들이 추가되었다.
라이브러리 작성자를 위해 System.AppContext라는 새로운 클래스가 추가되었다. 이를 이용해 라이브러리를 작성하면 라이브러리 사용자가 새로운 API 기능들을 선택적으로 전환할 수 있다.
Task 인스턴스 생성시 현재 스레드의 문화 설정과 UI 문화 설정이 반영된다.
더 많은 컬렉션 형식들이 IReadOnlyCollection<T>를 구현한다.
WPF가 개선되었다. (더 나은 터치 및 고 DPI 처리 등)
ASP.NET이 HTTP/2와 Window 10의 TBP(Token Binding Protocol)를 지원한다.
.NET Framework 4.5의 새로운 기능
Task를 돌려주는 메서드들을 통한 광범위한 비동기성 지원
ZIP 압축 프로토콜 지원
새로운 HttpClient 클래스를 통한 HTTP 지원 개선
쓰레기 수거기와 어셈블리 자원 조회 성능 향상
WinRT 상호운용성 및 Windows 스토어 모바일 앱 구축을 위한 API 지원
새로운 TypeInfo 클래스 추가
정규 표현식 부합시 만료 시간을 지정하는 능력 추가
병렬 컴퓨팅 부분에서 생산자-소비자 스타일의 네트워크 구축을 위한 Dataflow라는 특화된 라이브러리가 추가

CLR과 핵심 프레임워크

(기본적인 설명들 생략)

응용 기술

UI 기술

(기본적인 설명들 생략)

ASP.NET

ASP.NET으로 작성된 응용 프로그램은 Windows IIS에 호스팅되며, 임의의 웹브라우저를 통해 접근할 수 있다.
ASP.NET으로 웹 페이지를 작성할 때는 전통적인 Web Forms를 사용할 수도 있고 좀 더 최근의 MVC API를 사용할 수도 있다. 둘 다 ASP.NET 기반구조를 바탕으로 한다.

WPF (Windows Presentation Foundation)

WPF는 .NET Framework 3.0에서 도입되었다. WPF가 Windows Forms에 비해 갖는 장점은 다음과 같다.
임의 변환, 3차원 렌더링, 진짜 투명 등의 정교한 그래픽 기능을 지원한다.
기본 측정 단위가 픽셀이 아니라서 그 어떤 DPI(dots per inch) 설정에서도 응용 프로그램이 제대로 표시된다.
동적 레이아웃을 잘 지원한다. 덕분에 응용 프로그램을 현지화해도 UI 요소들이 겹칠 위험이 없다.
렌더링에 DirectX를 사용하기 때문에 속도가 빠르다. 그래픽 하드웨어 가속을 잘 활용한다.
사용자 인터페이스를 내부 코드 파일들과는 독립적으로 관리할 수 있는 XAML 파일에 선언적으로 서술할 수 있다.

뒷단 기술들

ADO.NET

ADO.NET는 관리되는 자료 접근 API이다. 이름은 90년대의 ADO(ActiveX Data Objects)에서 비롯된 것이지만, 기술 자체는 ADO와 완전히 다르다.
ADO.NET에는 다음과 같은 주요 저수준 구성요소 두 가지가 들어 있다.
공급자 계층
ADO.NET의 공급자(provider) 모형은 데이터베이스 공급자에 대한 저수준 접근을 위한 공통의 클래스들과 인터페이스들을 정의한다.
데이터베이스 연결, 명령, 어댑터, 판독기를 위한 인터페이스들이 있다.
MS SQL Server에 대한 지원은 .NET Framework 자체에 내장되어 있고, 그 밖의 데이터베이스들에 대한 서드파티 드라이버들도 많이 있다.
DataSet 모형
DataSet은 구조화된 자료 캐시이다. 테이블, 행, 열, 관계, 제약, 뷰 같은 SQL 요소들을 정의한다는 점에서 기본적인 형태의 메모리 내부 데이터베이스(in-memory database)와 비슷하다. 프로그램에서 이런 자료 캐시를 활용하면 서버와의 자료 교환 횟수를 줄일 수 있으므로 서버의 규모 가변성과 리치클라이언트 UI의 반응성이 좋아진다. DataSet은 직렬화를 지원하며, 클라이언트와 서버 응용 프로그램이 연결을 통해 주고받을 수 있도록 설계되었다.
공급자 계층 위에는 다음 두 API가 놓여 있다. 이들은 LINQ를 통해 데이터베이스를 질의하는 기능을 제공한다.
Entity Framework
LINQ to SQL
두 기술 모두 ORM(object/relational mapping; 객체-관계형 데이터베이스 대응)을 포함한다.
이들은 자동으로 C# 프로그램 안의 객체들을 데이터베이스의 행들에 대응시킨다. 이 덕분에 SQL select 문을 작성할 필요 없이 LINQ를 이용해서 객체들에 대해 질의를 수행할 수 있으며, SQL insert/delete/update 문을 작성하지 않고 객체들을 갱신할 수 있다.
이를 활용하면 응용 프로그램의 자료 접근층의 코드를 줄ㅇ리 수 있으며, 강한 정적 형식 안전성도 얻을 수 있다. 또한 이 기술들을 이용하면 DataSet을 자료 저장소로 사용해야 하는 필요성도 없어진다.

Windows Workflow

Windows Workflow는 오랫동안 실행될 가능성이 있는 업무 프로세스의 모형화와 관리를 위한 프레임워크이다. 표준 런타임 라이브러리를 표방하는 Windows Workflow는 일관성과 상호운용성을 제공한다.
또한 Windows Workflow는 동적으로 제어되는 의사결정 트리(decision-making tree)를 좀 더 적은 양의 코드로 구현하는데 도움이 된다.
Windows Workflow가 전적으로 뒷단 기술인 것은 아니다. 다른 곳에도 (예컨대 UI의 페이지 흐름 등) 얼마든지 사용할 수 있다.

COM+과 MSMQ

.NET Framework의 System.EnterpriseServices 이름공간에 있는 형식들을 이용하면 분산 트랜잭션 같은 서비스를 COM+과 연동해서 구현할 수 있다.
또한 System.Messaging에 있는 형식들을 이용하면 비동기 단방향 메시징을 위한 MSMQ(Microsoft Message Queuing)도 사용할 수 있다.

분산 시스템 기술

WCF

WCF(Window Communication Foundation)는 .NET Framework 3.0에 도입된 정교한 통신 기반 구조이다.
WCF는 유연성과 구성 능력이 좋기 때문에 그 전신인 Remoting을 완전히 대체할 수 있으며, 또 다른 전신인 Web Services(.ASMX)도 거의 대체할 수 있다.

Web API

ASP.NET 위에서 실행되는 한 게층인 Web API는 구조가 Microsoft의 MVC API와 비슷하다. 단, 웹페이지가 아니라 서비스와 자료를 제공하도록 설계되었다는 점이 다르다.
WCF에 비한 강점은 대중적인 HTTP 기반 REST 규약을 따를 수 있다는 것이다. 그러면 최대한 많은 플랫폼과의 상호운용성을 손쉽게 얻을 수 있다.