
Kestrel의 특징은 다음과 같다.
| 특징 | 설명 |
|---|---|
| 고성능 | 비동기 I/O기반으로 빠른 요청 처리 |
| 경량 웹 서버 | 별도 설정 없이 ASP.Net Core 에서 기본으로 제공한다. |
| 크로스플랫폼 | Windows. Linux, macOS에서 실행 가능하다. |
| 리버스 프록시 지원 | Nginx, IIS와 함께 사용할 수 있다. |
| 보안 기능 부족 | 운영 환경(Production server)에서는 Nginx/IIS를 통해 보호하는 것이 일반적이다. |
| 포트 지정 가능 | 기본적으로 5000 (HTTP), 5001 (HTTPS), 직접 설정 가능 |
기본 실행 (개발 환경)
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello from Kestrel!");
app.Run(); // Kestrel 실행
위 코드를 가지고 dotnet run을 실행하면 Kestrel이 자동으로 실행되며, 기본 포트는 http://localhost:5000, https://localhost:5001 이다.
운영 환경에서 Kestrel포트를 설정하려면 아래와 같이 코드를 바꾸면 된다.
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseKestrel(options =>
{
options.ListenAnyIP(6000); // HTTP 포트 6000
options.ListenAnyIP(6001, listenOptions =>
{
listenOptions.UseHttps(); // HTTPS 포트 6001
});
});
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Kestrel을 단독으로 운영 환경(Production Server)에서 사용하면 아래와 같은 문제가 발생할 수 있다.
주로 Nginx, IIS와 같이 사용된다.
리버스 프록시 구조는 Client → Nginx → Kestrel (ASP.NET Core) 이다.
Nginx 설정 파일 (/etc/nginx/sites-available/default)
server {
listen 80;
server_name mywebsite.com;
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
리버스 프록시 구조는 Client → IIS → Kestrel (ASP.NET Core) 이다.
IIS에서 실행하도록 설정 (web.config)
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<aspNetCore processPath="dotnet" arguments="MyApp.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
| 구분 | Kestrel (ASP.NET Core) | Apache Tomcat (Java) |
|---|---|---|
| 역할 | .NET Core 웹 서버 | Java Servlet 컨테이너 및 웹 서버 |
| 기반 기술 | .NET Core / C# | Java / JSP / Servlets |
| 동작 방식 | 비동기 I/O 기반 | 멀티스레드 기반 |
| 보안 기능 | 없음 (리버스 프록시 필요) | 자체적으로 보안 기능 포함 |
| 배포 방식 | 단독 실행 또는 리버스 프록시 | WAR 파일 배포 또는 리버스 프록시 |