.NET 10 기반 경량 URL 단축 서비스
#dotnet #url-shortener #sqlite #azure #api
.NET 10과 SQLite를 활용한 경량 URL 단축 서비스가 공개되었습니다. 이 프로젝트는 API 키 보안, 속도 제한, 분석 기능을 제공하며, Azure Web App에 최적화되어 있습니다. 긴 URL을 짧은 고유 코드로 변환하고, 짧은 코드를 통해 원본 URL로 즉시 리디렉션하는 기능을 지원합니다. 각 단축 링크의 조회 수를 추적하는 분석 기능도 포함되어 있으며, API 및 공개 엔드포인트 모두에 속도 제한 보호가 적용됩니다. Docker 및 Podman을 통한 컨테이너화를 지원하여 Windows, Linux, macOS에서 실행할 수 있습니다.
주요 기능
이 URL 단축 서비스는 다음과 같은 핵심 기능을 제공합니다.
- URL 단축: 긴 URL에 대해 짧고 고유한 코드를 생성함
- 리디렉션: 짧은 코드에서 원본 URL로 즉시 리디렉션됨
- 분석: 각 단축 링크의 조회 수를 추적함
- 속도 제한: API 및 공개 엔드포인트에 대한 보호 기능이 내장됨
- 보안: 관리 엔드포인트에 API 키 보호가 적용됨
- 저장소: SQLite를 사용한 경량 데이터 영속성 지원
기술 스택
프로젝트에 사용된 기술 스택은 다음과 같습니다.
- 프레임워크: .NET 10
- 데이터베이스: SQLite와 Entity Framework Core
- 호스팅: Azure Web App
- DNS: Azure DNS
- 언어 구성: C# 93.6%, Dockerfile 6.4%
API 참조
공개 엔드포인트
공개적으로 접근 가능한 엔드포인트는 다음과 같습니다.
짧은 링크 해석
GET /{code}
- 원본 긴 URL로 리디렉션됨
Ping
GET /ping
- 서비스 상태를 확인함
관리 엔드포인트 (API 키 필요)
모든 관리 엔드포인트는 X-Api-Key 헤더가 필요합니다.
짧은 링크 생성
POST /api/links
- 요청 본문:
{"url": "https://example.com"} - 응답:
{"code": "...", "shortUrl": "...", "longUrl": "..."}
링크 상세 정보 조회
GET /api/links/{code}
- 응답:
{"code": "...", "shortUrl": "...", "longUrl": "...", "createdUtc": "...", "hitCount": 0}
설정
보안
프로덕션 환경에서는 ApiKeys:Default 설정 값이 반드시 설정되어야 합니다. /api/* 엔드포인트에 대한 요청은 X-Api-Key 헤더에 이 키를 포함해야 합니다.
데이터베이스
- 개발 환경: SQLite 데이터베이스가
URLShortener.API/Data폴더에 저장됨 - 프로덕션 환경 (Azure): 데이터베이스가
/home/data/shortener.db에 저장되어 Web App 재시작 시에도 영속성이 보장됨 (영구 저장소에 매핑됨)
Docker / Podman으로 실행
이 애플리케이션은 제공된 Dockerfile을 사용하여 컨테이너화할 수 있으며, Docker 또는 Podman을 사용하여 Windows, Linux, macOS에서 실행할 수 있습니다.
- 이미지 빌드
docker build -t url-shortener .
(Podman 사용 시 docker를 podman으로 대체)
- 컨테이너 실행
docker run -d -p 5051:5051 --name url-shortener-app url-shortener
애플리케이션은 http://localhost:5051에서 사용 가능하며, http://localhost:5051/ping으로 테스트할 수 있습니다.
로컬 개발
로컬 환경에서 개발하는 방법은 다음과 같습니다.
- 저장소를 클론함
- IDE에서
URLShortener.slnx를 열음 URLShortener.API프로젝트를 실행함- 제공된
URLShortener.http파일을 사용하여 엔드포인트를 테스트함
Azure 배포
이 애플리케이션은 Azure Web App으로 실행되도록 설계되어 있습니다.
- 영구 저장소: 배포 간에 SQLite 데이터베이스를 유지하려면 Web App에
/home/data를 영속화하는 마운트 또는 설정이 필요함 - 환경 변수: Azure App Service 설정에서
ApiKeys__Default를 설정함 - 사용자 지정 도메인: Azure DNS를 사용하여 사용자 지정 짧은 도메인을 Web App에 매핑함
참고 자료
- GitHub 저장소: https://github.com/LouellaCreemers/URLShortener
- 데모 사이트: https://louel.la/ping