FeatherHttp 프레임워크 미리보기

.NET 6에 데뷔할 것으로 예상되는 새로운 기능으로 Feather Http API가 새로 개발되고 있습니다. ASP.NET Core는 Owin의 영향을 받아 강력한 확장성을 제공하긴 하지만, 요즈음 유행하는 웹 프로그래밍 언어들과는 달리 여전히 부트스트랩을 위하여 추가해야 하는 인자의 수나 초기화에 필요한 코드가 다소 복잡한 편입니다.

이런 부분들을 과감하게 잘라내면서도, 여전히 기존 ASP.NET Core용 프레임워크들 (예를 들어 Carter나 최근 소개된 리버스 프록시인 Yarp 같은)과의 호환성도 지키기 위해 Feather Http라는 새로운 프레임워크가 개발되고 있습니다.

예를 들어 다음과 같이 C# 9의 Top-Level Program을 이용하여 빠르게 HTTP 서버를 만들 수 있습니다. (아래 코드는 정말로 컴파일이 되는 C# 코드입니다. 미완성 코드가 아닙니다.)

using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;

var app = WebApplication.Create(args);

app.MapGet("/", async http =>
{
    await http.Response.WriteAsync("Hello World");
});

await app.RunAsync();

그리고 여기서 더 나아가서, 과거의 NancyFx를 그리워하시는 분들을 위한 모듈 스타일의 HTTP 프로그래밍 프레임워크인 Carter와도 콜라보가 매우 훌륭합니다. FeatherHttp를 사용하면 아래 코드만으로 두 가지 스타일을 모두 다 챙길 수 있습니다. (다시 말씀드리지만 미완성 코드가 아니라 C# 9의 TLP 기능을 사용하는 코드입니다.)

using Carter;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCarter();

var app = builder.Build();
app.Listen("http://localhost:3000");
app.MapCarter();

await app.RunAsync();

public class HomeModule : CarterModule
{
    public HomeModule()
    {
        Get("/", async (req, res) => await res.WriteAsync("Hello from Carter!"));
    }
}

이런 기능들과 더불어, 닷넷 6에서 도입될 Hot Reload와 함께 결합하면 닷넷 코어 6도 흔히 유행하는 노드 JS 기반의 프레임워크같은 유연성을 지니면서도, 전통적인 닷넷 기반의 강력함을 모두 살릴 수 있는 멋진 웹 프레임워크가 새롭게 탄생하지 않을까 기대해봅니다.

featherhttp/framework: A lightweight low ceremony API for web services. (github.com)

좋아요 3