ASP.NET Core의 웹 서버 구현
- 본 번역문서의 원문은 Web server implementations in ASP.NET Core docs.microsoft.com 입니다.
ASP.NET Core 응용 프로그램은 In-Process HTTP 서버 구현을 통해서 실행됩니다.
서버 구현은 HTTP 요청을 수신한 다음, 이를 요청 기능(Request Features)들의 집합으로 구성한 HttpContext
의 형태로 응용 프로그램에 노출합니다.
ASP.NET Core는 두 가지 기본 서버 구현을 제공합니다:
-
Kestrel은 크로스 플랫폼 비동기 I/O 라이브러리인 libuv를 기반으로 한 크로스 플랫폼 HTTP 서버입니다.
-
HTTP.sys는 Http.Sys 커널 드라이버를 기반으로 한 Windows 전용 HTTP 서버입니다.
Kestrel
Kestrel은 ASP.NET Core의 새 프로젝트 템플릿에 기본으로 구성되는 웹 서버입니다.
단독으로 Kestrel만 사용할 수도 있고, IIS, Nginx 또는 Apache 같은 역방향 프록시 서버(Reverse Proxy Server)와 함께 사용할 수도 있습니다. 역방향 프록시 서버는 인터넷에서 HTTP 요청을 수신해서 사전 처리를 수행한 다음 Kestrel에 전달합니다.
내부 네트워크에서만 Kestrel이 노출될 경우, 역방향 프록시 서버를 사용하는 구성과 사용하지 않는 구성을 모두 적용할 수 있습니다.
역방향 프록시와 Kestrel을 함께 사용해야 하는 경우에 대한 더 자세한 정보는 ASP.NET Core의 Kestrel 웹 서버 구현 살펴보기 문서를 참고하시기 바랍니다.
Kestrel 또는 사용자 지정 서버 구현 없이, IIS, Nginx 또는 Apache만 단독으로 사용할 수는 없습니다.
ASP.NET Core는 자체 프로세스에서 실행되도록 설계되었으며, 바로 그렇기 때문에 다양한 플랫폼에서 일관되게 작동할 수 있는 것입니다.
IIS, Nginx 및 Apache는 각각 자체적인 시작 프로세스와 환경을 요구하기 때문에, 이를 직접 사용하려면 ASP.NET Core가 필요한 모든 요구사항에 대응할 수 있어야만 합니다.
그러나 Kestrel 같은 웹 서버 구현을 사용하면 ASP.NET Core가 시작 프로세스와 환경을 통제할 수 있습니다.
따라서 IIS, Nginx 또는 Apache에 일일이 ASP.NET Core를 대응하려고 노력하는 대신, 해당 웹 서버가 Kestrel에 프록시 요청을 하도록 설정하기만 하면 됩니다.
이런 배치로 인해서 배포 위치에 상관없이 Program.Main
클래스와 Startup
클래스를 본질적으로 동일하게 유지할 수 있습니다.
IIS와 Kestrel
IIS나 IIS Express를 ASP.NET Core의 역방향 프록시로 사용할 경우, ASP.NET Core 응용 프로그램과 IIS의 작업자 프로세스는 각각 별도의 프로세스로 실행됩니다. 그리고 IIS 프로세스 내에서 특수한 IIS 모듈이 실행되어 역방향 프록시와의 관계를 제어하는데, ASP.NET Core 모듈(ASP.NET Core Module)이 바로 그것입니다. ASP.NET Core 모듈의 핵심 기능은 ASP.NET Core 응용 프로그램을 시작하거나 크래시가 발생할 경우 재시작하고, ASP.NET Core 응용 프로그램에 HTTP 트래픽을 전달하는 것입니다. 보다 자세한 정보는 ASP.NET Core 모듈 살펴보기 문서를 참고하시기 바랍니다.
Nginx와 Kestrel
Linux 상에서 Nginx를 Kestrel의 역방향 프록시 서버로 사용하는 방법에 대한 자세한 내용은 Publish to a Linux Production Environment 문서를 참고하시기 바랍니다.
Apache와 Kestrel
Linux 상에서 Apache를 Kestrel의 역방향 프록시 서버로 사용하는 방법에 대한 자세한 내용은 Using Apache Web Server as a reverse proxy 문서를 참고하시기 바랍니다.
HTTP.sys
Windows에서 ASP.NET Core 응용 프로그램을 실행할 경우, Kestrel 대신 HTTP.sys를 사용할 수도 있습니다. 주로 응용 프로그램이 인터넷에 노출되고 Kestrel이 지원하지 않는 HTTP.sys의 기능이 필요한 시나리오에서 HTTP.sys를 사용합니다.
내부 네트워크에만 노출되는 응용 프로그램도 HTTP.sys를 사용할 수 있습니다.
일반적으로 내부 네트워크 시나리오에서는 최상의 성능을 위해서 Kestrel이 권장됩니다. 그러나 일부 시나리오에서는 HTTP.sys만 제공하는 기능을 사용해야 할 수도 있습니다. HTTP.sys의 기능에 대한 보다 자세한 정보는 HTTP.sys 문서를 참고하시기 바랍니다.
ASP.NET Core 서버 인프라에 대한 참고 사항
Startup
클래스의 Configure
메서드에서 사용 가능한 IApplicationBuilder
는 IFeatureCollection
형식의 ServerFeatures
속성을 노출합니다.
Kestrel과 WebListener는 모두 IServerAddressesFeature
라는 단일 기능만 노출하지만 다른 서버 구현은 추가적인 기능들을 노출할 수도 있습니다.
이 IServerAddressesFeature
를 사용하면 런타임에 서버 구현이 바인딩 된 포트를 찾을 수 있습니다.
사용자 지정 서버
기본 제공 서버의 기능이 만족스럽지 못하다면 사용자 지정 서버를 구현할 수도 있습니다. Open Web Interface for .NET (OWIN) 가이드 문서에서는 Nowin-기반의 IServer 구현 작성 방법을 보여줍니다. 최소한 IHttpRequestFeature와 IHttpResponseFeature는 지원해야 하지만, 자유롭게 응용 프로그램에 필요한 기능 인터페이스만 구현하면 됩니다.
다음 단계
보다 자세한 내용은 다음 문서를 참고하시기 바랍니다:
- ASP.NET Core 기본 개요 2017-05-30 08:00
- ASP.NET Core와 응용 프로그램 Startup 클래스 2017-05-31 08:00
- ASP.NET Core 미들웨어의 기초 2017-06-01 08:00
- ASP.NET Core에서 정적 파일 서비스하기 2017-06-02 08:00
- ASP.NET Core의 오류 처리 살펴보기 2017-06-14 08:00
- 다양한 환경에서 작업하기 2017-08-21 08:00
- ASP.NET Core 구성하기 2017-08-28 08:00
- ASP.NET Core 파일 공급자 2017-09-04 08:00
- ASP.NET Core의 세션 및 응용 프로그램 상태 2017-09-11 08:00
- ASP.NET Core의 호스팅 살펴보기 2017-09-18 08:00
- ASP.NET Core의 웹 서버 구현 2017-09-25 08:00
- ASP.NET Core의 Kestrel 웹 서버 구현 살펴보기 2017-10-02 08:00
- ASP.NET Core 모듈 살펴보기 2017-10-09 08:00
- ASP.NET Core의 WebListener 웹 서버 구현 2017-10-16 08:00
- ASP.NET Core의 HTTP.sys 웹 서버 구현 2017-10-23 08:00
- ASP.NET Core의 요청 기능 2017-10-30 08:00
- ASP.NET Core와 URL 재작성 미들웨어 2018-05-07 08:00