Windows와 IIS 만 사용하더라도 Kestrel이 제공되는 이유를 이해할 수 있도록 몇 가지 이력이있는 대체 답변을 제공하고 싶습니다.
2000 년 이전 ASP.NET 개발 초기에 Microsoft는 ASP.NET WebForms 앱을 호스팅하기 위해 두 가지를 만들었습니다.
- Cassini는 나중에 Visual Studio에서 ASP.NET 개발 서버가되었습니다. C #으로 작성된 완전 관리 형 웹 서버입니다
HttpListener
. 물론 개발 전용이므로 많은 기능이 구현되지 않았습니다. Microsoft가 Cassini의 소스 코드를 공개 할 수있게되면서 코드 기반을 분기하고 더 많은 기능을 추가 한 Cassini 제품군을 시작한 타사가 있습니다.
- IIS에서 ASP.NET 지원 (개정 1). 당시에는 IIS가 4.0 및 5.0 / 5.1 이었으므로 응용 프로그램 풀과 같은 것은 없으므로 ASP.NET에는 자체 작업자 프로세스도 있습니다 (
aspnet_wp.exe
).
따라서 웹앱을 개발하려면 Cassini를 사용하고 IIS를 사용하여 배포하십시오.
IIS 6에 응용 프로그램 풀을 도입하려면 ASP.NET에서 약간의 변경이 필요하므로 aspnet_wp.exe
더 이상 사용되지 않고로 대체되었습니다 aspnet_isapi.dll
. 이는 IIS 개정 2에서 ASP.NET 지원으로 볼 수 있습니다. 따라서 ASP.NET 앱은 IIS 작업자 프로세스에서 호스팅됩니다 w3wp.exe
.
IIS 7 이상에 통합 파이프 라인을 도입하려면을 (를) 대체 aspnet_isapi.dll
한 추가 변경이 필요 했습니다 webengine4.dll
. 이는 IIS 개정 3에서 ASP.NET 지원으로 볼 수 있습니다. ASP.NET과 IIS 파이프 라인이 통합되었습니다.
ASP.NET이 IIS와 훨씬 더 복잡해지고 긴밀하게 통합되어 Cassini가 시대를 보이기 시작했으며 점차 IIS Express (사용자 모드 lite IIS)로 대체되었습니다.
따라서 많은 경우에 사람들이 IIS가 느리다고 비난 할 때 실제로 ASP.NET을 비난해야합니다. ASP.NET이없는 IIS 자체는 매우 빠르고 안정적이며 ASP.NET은 충분한 성능 메트릭을 염두에두고 개발되지 않았습니다 (WebForms는 많은 생산성과 RAD에 중점을두기 때문에).
그런 다음 2014 년 11 월에 ASP.NET 5 (나중에 ASP.NET Core로 이름이 바))가 발표되어 크로스 플랫폼 기술이되었습니다. 분명히 Microsoft는 Windows, macOS 및 Linux를 지원하기위한 새로운 디자인이 필요했습니다. 여기서 IIS 이외의 모든 주요 웹 서버, nginx / Apache (또는 다른 웹 서버)를 고려해야합니다.
나는 많은 사람들이 마이크로 소프트가 NodeJS로부터 많은 것을 배운 다음 Kestrel을 디자인하고 개발했다는 데 동의 할 것이라고 생각한다 libuv
. 처음에는 Cassini와 같은 경량 웹 서버이지만 나중에 더 많은 기능이 추가되고 있습니다 (다른 답변과 같이 더 많은 기능이 있으므로 전체 웹 서버로 취급 될 수 있음). 완전히 관리되지만 (일부 고유 종속성이 존재하지만) 더 이상 Cassini와 같은 장난감 웹 서버가 아닙니다.
그렇다면 왜 Kestrel을 사용할 수 없습니까? IIS Express와 IIS, nginx 또는 Apache가 여전히 필요한 이유는 무엇입니까? 그것은 주로 오늘날의 인터넷 관행의 결과입니다. 대부분의 웹 사이트는 리버스 프록시를 사용하여 웹 브라우저에서 요청을받은 다음 백그라운드에서 애플리케이션 서버로 전달합니다.
- IIS Express / IIS / nginx / Apache는 리버스 프록시 서버입니다
- Kestrel / NodeJS / Tomcat 등은 애플리케이션 서버입니다.
또 다른 대답은 이미 Microsoft 설명서에 대한 링크를 보여 주었으므로 살펴볼 수 있습니다.
Microsoft는 HttpPlatformHandler를 처음 개발하여 IIS를 Java / Python 등에 대한 충분한 역방향 프록시로 만들기 위해 ASP.NET Core에 사용할 계획이었습니다. 개발 과정에서 문제가 발생하기 시작하여 나중에 Microsoft는 ASP.NET Core를 위해 ASP.NET Core Module을 만들었습니다. IIS 개정판 4에 대한 ASP.NET 지원입니다.
ASP.NET Core 2.2부터 IIS 용 ASP.NET Core Module (버전 2)은 w3wp.exe
ASP.NET 2.x / 4.x와 매우 유사한 IIS 작업자 프로세스 ( ) 내에서 .NET Core 환경을 호스팅 할 수 있습니다 . 이 모드를 "IIS 인 프로세스 호스팅"이라고 합니다. IIS 개정판 5에서 ASP.NET 지원으로 간주 될 수 있습니다.
글쎄요, 꽤 길지만, 필요한 부분을 모두 모아서 읽는 것을 즐기시기 바랍니다.