ASP.NET Core와 단축 URL 서비스 구현

  • 3 minutes to read

ASP.NET Core에서 단축 URL 기능 구현하기

기본 개념

ASP.NET Core에서 단축 URL(short-url) 기능은 사용자가 긴 URL을 입력하면 이를 짧은 버전으로 변환하고, 나중에 이 짧은 URL을 사용하여 원래 긴 URL로 리디렉션하는 기능을 포함합니다.

단계별 구현

  1. 프로젝트 설정

    • ASP.NET Core Empty 프로젝트 생성
    • 필요한 NuGet 패키지 설치 (예: Entity Framework Core, SQL Server)
  2. 데이터 모델 생성

    • URL 데이터를 저장할 모델 생성
  3. 데이터베이스 컨텍스트 설정

    • Entity Framework Core를 사용한 데이터베이스 컨텍스트 클래스 설정
  4. URL 변환 로직 구현

    • 긴 URL을 받아서 짧은 코드로 변환하는 로직 구현
  5. 컨트롤러 및 라우팅 설정

    • URL 변환 및 리디렉션을 처리할 컨트롤러 생성
  6. 데이터베이스 마이그레이션 및 초기화

    • Entity Framework Core의 마이그레이션 기능을 사용하여 데이터베이스 스키마 생성
  7. 프론트엔드 인터페이스 구현 (선택적)

    • 사용자가 URL을 입력하고 결과를 볼 수 있는 인터페이스 구현
  8. 테스트 및 디버깅

    • 시스템 테스트 및 필요한 경우 버그 수정

단순 리디렉션 코드 예제

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 기존 설정 코드 ...

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGet("/youtube", async context =>
        {
            context.Response.Redirect("https://www.youtube.com/channel/[채널ID]");
        });

        // 기타 엔드포인트 설정...
    });

    // 기타 설정 코드...
}

리디렉션 유형

  • 임시적 리디렉션 (302): 일시적인 변경이나 테스트에 적합
  • 영구적 리디렉션 (301): URL이 영구적으로 변경되었을 때 사용, SEO에 유리

ASP.NET Core 8.0에서의 리디렉션 설정

Program.cs에서의 리디렉션 설정 예제

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

app.UseRouting();

app.UseEndpoints(endpoints =>
{
    endpoints.MapGet("/youtube", async context =>
    {
        context.Response.Redirect("https://www.youtube.com/channel/[채널ID]", permanent: true);
    });
});

app.Run();

이 코드는 /youtube 경로로의 요청을 YouTube 채널 URL로 영구적으로 리디렉션합니다.

단축 URL 리디렉션 로직을 별도의 클래스로 분리

ShortUrlRedirector 클래스

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

namespace MemoEngine.Routings;

public class ShortUrlRedirector
{
    public void MapShortUrls(IEndpointRouteBuilder app)
    {
        app.MapGet("/youtube", async context =>
        {
            context.Response.Redirect("https://www.youtube.com/@VisualAcademy", permanent: true);
            await Task.CompletedTask;
        });

        // 다른 단축 URL들도 이런 식으로 매핑
        // 예: app.MapGet("/example", async context => 
        // {
        //     context.Response.Redirect("https://example

.com", permanent: true);
        //     await Task.CompletedTask;
        // });
    }
}

이 클래스를 사용하여 Program.cs 파일에서 다음과 같이 라우팅을 설정할 수 있습니다:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// 라우팅 설정
app.UseRouting();

var redirector = new ShortUrlRedirector();
redirector.MapShortUrls(app);

app.Run();
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com