Kestrel

Shy·2025년 3월 13일

ASP.Net Core9

목록 보기
1/4

Kestrel

1. Kestrel이란?

  • ASP.NET Core의 기본 내장 웹 서버이다.
  • 클라이언트의 HTTP 요청을 받아서 ASP.NET Core 애플리케이션으로 전달
  • 개발 환경에서는 단독 실행이 가능하지만, 운영 환경에서는 리버스 프록시(IIS, Nginx, Apache)와 함께 사용해야 한다.
  • 크로스 플랫폼을 지원한다. (Windows, Linux, macOS)

Kestrel의 특징은 다음과 같다.

특징설명
고성능비동기 I/O기반으로 빠른 요청 처리
경량 웹 서버별도 설정 없이 ASP.Net Core 에서 기본으로 제공한다.
크로스플랫폼Windows. Linux, macOS에서 실행 가능하다.
리버스 프록시 지원Nginx, IIS와 함께 사용할 수 있다.
보안 기능 부족운영 환경(Production server)에서는 Nginx/IIS를 통해 보호하는 것이 일반적이다.
포트 지정 가능기본적으로 5000 (HTTP), 5001 (HTTPS), 직접 설정 가능

2. Kestrel 설정 및 사용법

기본 실행 (개발 환경)

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();
  • 포트 6000(HTTP), 6001(HTTPS)에서 실행되도록 설정한다.

3. 운영 환경에서는 Kestrel을 단독 사용하면 안된다!!

Kestrel을 단독으로 운영 환경(Production Server)에서 사용하면 아래와 같은 문제가 발생할 수 있다.

  1. 보안 문제 → Kestrel 자체적으로 DDoS 방어, TLS 설정 기능이 부족
  2. 성능 문제 → 정적 파일 처리 최적화 부족
  3. 로드 밸런싱 기능 없음 → 여러 인스턴스를 효과적으로 관리하려면 리버스 프록시 필요
  4. 포트 제한 → 리눅스 환경에서는 80, 443 포트 실행 시 관리자 권한 필요

4. 운영 환경에서 Kestrel + 리버스 프록시 사용 방법

주로 Nginx, IIS와 같이 사용된다.

Nginx + Kestrel

리버스 프록시 구조는 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;
    }
}
  • Nginx가 요청을 받아 Kestrel(5000번 포트)로 전달
  • 정적 파일(이미지, CSS, JS)처리 최적화가 가능하다.

IIS + Kestrel (Windows)

리버스 프록시 구조는 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>
  • IIS가 요청을 받아 Kestrel로 전달
  • Windows 환경에서 HTTPS, 인증, 로깅 등의 보안 기능 활용 가능

Kestrel vs Apache Tomcat 비교

구분Kestrel (ASP.NET Core)Apache Tomcat (Java)
역할.NET Core 웹 서버Java Servlet 컨테이너 및 웹 서버
기반 기술.NET Core / C#Java / JSP / Servlets
동작 방식비동기 I/O 기반멀티스레드 기반
보안 기능없음 (리버스 프록시 필요)자체적으로 보안 기능 포함
배포 방식단독 실행 또는 리버스 프록시WAR 파일 배포 또는 리버스 프록시
profile
신입사원...

0개의 댓글