ASP.NET Core의 웹 서버 구현Web server implementations in ASP.NET Core

작성자: Tom Dykstra, Steve Smith, Stephen HalterChris RossBy Tom Dykstra, Steve Smith, Stephen Halter, and Chris Ross

ASP.NET Core 앱은 In-process HTTP 서버 구현을 사용하여 실행됩니다.An ASP.NET Core app runs with an in-process HTTP server implementation. 서버 구현은 HTTP 요청을 수신하고 HttpContext를 구성하는 요청 기능 집합으로 앱에 표시합니다.The server implementation listens for HTTP requests and surfaces them to the app as sets of request features composed into an HttpContext.

ASP.NET Core는 다음 두 가지 서버 구현을 제공합니다.ASP.NET Core ships two server implementations:

KestrelKestrel

Kestrel은 ASP.NET Core 프로젝트 템플릿에 포함된 기본 웹 서버입니다.Kestrel is the default web server included in ASP.NET Core project templates.

Kestrel을 단독으로 사용하거나 IIS, Nginx 또는 Apache 같은 역방향 프록시 서버와 함께 사용할 수 있습니다.Kestrel can be used by itself or with a reverse proxy server, such as IIS, Nginx, or Apache. 역방향 프록시 서버는 인터넷에서 HTTP 요청을 수신하고 몇몇 사전 처리 후에 Kestrel에 전달합니다.A reverse proxy server receives HTTP requests from the Internet and forwards them to Kestrel after some preliminary handling.

Kestrel은 역방향 프록시 서버 없이 직접 인터넷과 통신합니다.

Kestrel은 IIS, Nginx 또는 Apache 같은 역방향 프록시 서버를 통해 간접적으로 인터넷과 통신합니다.

—역방향 프록시 서버의 유무에 상관없이— ASP.NET Core 2.0 이상 앱에 대해 지원되는 유효한 호스팅 구성입니다.Either configuration—with or without a reverse proxy server—is a valid and supported hosting configuration for ASP.NET Core 2.0 or later apps. 자세한 내용은 Kestrel를 역방향 프록시와 함께 사용할 경우를 참조하세요.For more information, see When to use Kestrel with a reverse proxy.

Kestrel 또는 사용자 지정 서버 구현이 없으면 IIS, Nginx 또는 Apache를 사용할 수 없습니다.IIS, Nginx, and Apache can't be used without Kestrel or a custom server implementation. ASP.NET Core는 플랫폼 간에 일관되게 동작하도록 자체 프로세스로 실행되도록 고안되었습니다.ASP.NET Core was designed to run in its own process so that it can behave consistently across platforms. IIS, Nginx 및 Apache에서는 고유한 시작 프로시저 및 환경을 지정합니다.IIS, Nginx, and Apache dictate their own startup procedure and environment. 직접 이러한 서버 기술을 사용하려면 ASP.NET Core를 각 서버의 요구 사항에 맞게 적용해야 합니다.To use these server technologies directly, ASP.NET Core would need to adapt to the requirements of each server. ASP.NET Core는 Kestrel과 같은 웹 서버 구현을 사용하여 다른 서버 기술에서 호스팅될 경우 시작 프로세스 및 환경을 제어할 수 있습니다.Using a web server implementation, such as Kestrel, ASP.NET Core has control over the startup process and environment when hosted on different server technologies.

IIS 및 KestrelIIS with Kestrel

IIS 또는 IIS Express를 ASP.NET Core에 대한 역방향 프록시로 사용할 경우 ASP.NET Core 앱은 IIS 작업자 프로세스와 분리된 프로세스에서 실행됩니다.When using IIS or IIS Express as a reverse proxy for ASP.NET Core, the ASP.NET Core app runs in a process separate from the IIS worker process. IIS 프로세스에서 ASP.NET Core 모듈은 역방향 프록시 관계를 조정합니다.In the IIS process, the ASP.NET Core Module coordinates the reverse proxy relationship. ASP.NET Core 모듈의 기본 기능은 ASP.NET Core 앱을 시작하고, 작동 중단 시 앱을 다시 시작하고, 앱에 HTTP 트래픽을 전달하는 것입니다.The primary functions of the ASP.NET Core Module are to start the ASP.NET Core app, restart the app when it crashes, and forward HTTP traffic to the app. 자세한 내용은 ASP.NET Core 모듈을 참조하세요.For more information, see ASP.NET Core Module.

Nginx 및 KestrelNginx with Kestrel

Linux에서 Kestrel에 대한 역방향 프록시 서버로 Nginx를 사용하는 방법에 대한 자세한 내용은 Nginx를 사용하여 Linux에서 호스트를 참조하세요.For information on how to use Nginx on Linux as a reverse proxy server for Kestrel, see Host on Linux with Nginx.

Apache 및 KestrelApache with Kestrel

Linux에서 Apache에 대한 역방향 프록시 서버로 Nginx를 사용하는 방법에 대한 자세한 내용은 Apache를 사용하여 Linux에서 호스트를 참조하세요.For information on how to use Apache on Linux as a reverse proxy server for Kestrel, see Host on Linux with Apache.

HTTP.sysHTTP.sys

Windows에서 ASP.NET Core 앱을 실행할 경우 Kestrel 대신 HTTP.sys를 사용할 수 있습니다.If ASP.NET Core apps are run on Windows, HTTP.sys is an alternative to Kestrel. 최상의 성능을 위해 일반적으로 Kestrel을 사용하는 것이 좋습니다.Kestrel is generally recommended for best performance. 앱이 인터넷에 노출되고 필수 기능이 Kestrel이 아닌 HTTP.sys에서 지원되는 경우 시나리오에서 HTTP.sys를 사용할 수 있습니다.HTTP.sys can be used in scenarios where the app is exposed to the Internet and required features are supported by HTTP.sys but not Kestrel. HTTP.sys 기능에 대한 자세한 내용은 HTTP.sys를 참조하세요.For information on HTTP.sys features, see HTTP.sys.

HTTP.sys는 인터넷과 직접 통신합니다.

HTTP.sys는 내부 네트워크에만 노출되는 앱에도 사용할 수 있습니다.HTTP.sys can also be used for apps that are only exposed to an internal network.

HTTP.sys는 내부 네트워크와 직접 통신합니다.

ASP.NET Core 서버 인프라ASP.NET Core server infrastructure

Startup.Configure 메서드에서 사용할 수 있는 IApplicationBuilderIFeatureCollection 형식의 ServerFeatures 속성을 노출합니다.The IApplicationBuilder available in the Startup.Configure method exposes the ServerFeatures property of type IFeatureCollection. Kestrel 및 HTTP.sys(ASP.NET Core 1.x에서 WebListener)는 각각 단일 기능인 IServerAddressesFeature만을 노출하지만 다른 서버 구현은 추가 기능을 노출할 수 있습니다.Kestrel and HTTP.sys (WebListener in ASP.NET Core 1.x) only expose a single feature each, IServerAddressesFeature, but different server implementations may expose additional functionality.

IServerAddressesFeature를 사용하여 런타임 시 서버 구현이 바인딩된 포트를 확인할 수 있습니다.IServerAddressesFeature can be used to find out which port the server implementation has bound at runtime.

사용자 지정 서버Custom servers

기본 제공 서버가 앱의 요구 사항을 충족하지 않으면 사용자 지정 서버 구현을 만들 수 있습니다.If the built-in servers don't meet the app's requirements, a custom server implementation can be created. OWIN(Open Web Interface for .NET) 가이드에서는 Nowin 기반 IServer 구현을 작성하는 방법을 보여 줍니다.The Open Web Interface for .NET (OWIN) guide demonstrates how to write a Nowin-based IServer implementation. 앱이 사용하는 기능 인터페이스에는 구현이 필요합니다. 최소한 IHttpRequestFeatureIHttpResponseFeature이 지원되어야 합니다.Only the feature interfaces that the app uses require implementation, though at a minimum IHttpRequestFeature and IHttpResponseFeature must be supported.

서버 시작Server startup

Visual Studio, Mac용 Visual Studio 또는 Visual Studio Code를 사용하는 경우 IDE(통합 개발 환경)에서 앱을 시작할 때 서버가 실행됩니다.When using Visual Studio, Visual Studio for Mac, or Visual Studio Code, the server is launched when the app is started by the Integrated Development Environment (IDE). Windows의 Visual Studio에서 실행 프로필을 사용하여 IIS Express/ASP.NET Core 모듈 또는 콘솔에서 앱 및 서버를 시작할 수 있습니다.In Visual Studio on Windows, launch profiles can be used to start the app and server with either IIS Express/ASP.NET Core Module or the console. Visual Studio Code에서 Omnisharp로 앱 및 서버를 시작합니다. 그러면 CoreCLR 디버거를 활성화합니다.In Visual Studio Code, the app and server are started by Omnisharp, which activates the CoreCLR debugger. Mac용 Visual Studio를 사용하여 Mono Soft-Mode 디버거로 앱 및 서버를 시작합니다.Using Visual Studio for Mac, the app and server are started by the Mono Soft-Mode Debugger.

프로젝트의 폴더에 있는 명령 프롬프트에서 앱을 시작할 때 dotnet run은 서버 및 앱을 시작합니다(Kestrel 및 HTTP.sys만 해당).When launching an app from a command prompt in the project's folder, dotnet run launches the app and server (Kestrel and HTTP.sys only). Debug(기본값) 또는 Release로 설정되어 있는 -c|--configuration 옵션으로 구성을 지정합니다.The configuration is specified by the -c|--configuration option, which is set to either Debug (default) or Release. 실행 프로필이 launchSettings.json 파일에 있는 경우 --launch-profile <NAME> 옵션을 사용하여 실행 프로필(예: Development 또는 Production)을 설정합니다.If launch profiles are present in a launchSettings.json file, use the --launch-profile <NAME> option to set the launch profile (for example, Development or Production). 자세한 내용은 dotnet run.NET Core 배포 패키징 항목을 참조하세요.For more information, see the dotnet run and .NET Core distribution packaging topics.

추가 자료Additional resources