ASP.NET Core의 웹 서버 구현

등록일시: 2017-09-25 08:00,  수정일시: 2017-10-23 01:40
조회수: 7,055
이 문서는 ASP.NET Core 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.
본문에서는 ASP.NET Core가 제공하는 두 가지 기본 서버 구현, Kestrel과 HTTP.sys/WebListener에 관해서 간단히 살펴봅니다.

ASP.NET Core 응용 프로그램은 In-Process HTTP 서버 구현을 통해서 실행됩니다. 서버 구현은 HTTP 요청을 수신한 다음, 이를 요청 기능(Request Features)들의 집합으로 구성한 HttpContext의 형태로 응용 프로그램에 노출합니다.

ASP.NET Core는 두 가지 기본 서버 구현을 제공합니다:

Kestrel

Kestrel은 ASP.NET Core의 새 프로젝트 템플릿에 기본으로 구성되는 웹 서버입니다.

단독으로 Kestrel만 사용할 수도 있고, IIS, Nginx 또는 Apache 같은 역방향 프록시 서버(Reverse Proxy Server)와 함께 사용할 수도 있습니다. 역방향 프록시 서버는 인터넷에서 HTTP 요청을 수신해서 사전 처리를 수행한 다음 Kestrel에 전달합니다.

Kestrel communicates directly with the Internet without a reverse proxy server

Kestrel communicates indirectly with the Internet through a reverse proxy server, such as IIS, Nginx, or Apache

내부 네트워크에서만 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 communicates directly with the Internet

내부 네트워크에만 노출되는 응용 프로그램도 HTTP.sys를 사용할 수 있습니다.

HTTP.sys communicates directly with your internal network

일반적으로 내부 네트워크 시나리오에서는 최상의 성능을 위해서 Kestrel이 권장됩니다. 그러나 일부 시나리오에서는 HTTP.sys만 제공하는 기능을 사용해야 할 수도 있습니다. HTTP.sys의 기능에 대한 보다 자세한 정보는 HTTP.sys 문서를 참고하시기 바랍니다.

ASP.NET Core 서버 인프라에 대한 참고 사항

Startup 클래스의 Configure 메서드에서 사용 가능한 IApplicationBuilderIFeatureCollection 형식의 ServerFeatures 속성을 노출합니다. Kestrel과 WebListener는 모두 IServerAddressesFeature라는 단일 기능만 노출하지만 다른 서버 구현은 추가적인 기능들을 노출할 수도 있습니다.

IServerAddressesFeature를 사용하면 런타임에 서버 구현이 바인딩 된 포트를 찾을 수 있습니다.

사용자 지정 서버

기본 제공 서버의 기능이 만족스럽지 못하다면 사용자 지정 서버를 구현할 수도 있습니다. Open Web Interface for .NET (OWIN) 가이드 문서에서는 Nowin-기반의 IServer 구현 작성 방법을 보여줍니다. 최소한 IHttpRequestFeatureIHttpResponseFeature는 지원해야 하지만, 자유롭게 응용 프로그램에 필요한 기능 인터페이스만 구현하면 됩니다.

다음 단계

보다 자세한 내용은 다음 문서를 참고하시기 바랍니다: