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();
더 깊이 공부하고 싶다면
DevLec에서는 실무 중심의 C#, .NET, ASP.NET Core, Blazor, 데이터 액세스 강좌를 단계별로 제공합니다. 현재 수강 가능한 강좌 외에도 더 많은 과정이 준비되어 있습니다.
DevLec.com에서 자세한 커리큘럼을 확인해 보세요.
DevLec 공식 강의
C# Programming
C# 프로그래밍 입문
프로그래밍을 처음 시작하는 입문자를 위한 C# 기본기 완성 과정입니다.
ASP.NET Core 10.0
ASP.NET Core 10.0 시작하기 MVC Fundamentals Part 1 MVC Fundamentals Part 2
웹 애플리케이션의 구조와 MVC 패턴을 ASP.NET Core로 실습하며 익힐 수 있습니다.
Blazor Server
풀스택 웹개발자 과정 Part 1 풀스택 웹개발자 과정 Part 2 풀스택 웹개발자 과정 Part 3
실무에서 바로 활용 가능한 Blazor Server 기반 관리자·포털 프로젝트를 만들어 봅니다.
Data & APIs
Entity Framework Core 시작하기 ADO.NET Fundamentals Blazor Server Fundamentals Minimal APIs
데이터 액세스와 Web API를 함께 이해하면 실무 .NET 백엔드 개발에 큰 도움이 됩니다.
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com