URL 축소 서비스 구축: Flask와 Redis를 활용한 초보자용 튜토리얼
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 초보자: 백엔드 개발, Python, Redis 기초 이해가 필요한 사람들
- 난이도: 기초적인 웹 프레임워크와 데이터베이스 연동 이해 수준
핵심 요약
- 기술 스택:
Flask
,Redis
,Base62 인코딩
을 사용한 고속 URL 축소 서비스 구현 - Redis 활용:
r.incr('next_short_id')
로 고유 ID 생성 및r.set()
으로 빠른 URL 매핑 저장/조회 - 모듈 설계:
Blueprint
기반 분리된 라우팅,services.py
로 비즈니스 로직 분리
섹션별 세부 요약
1. 프로젝트 개요
- 목적: Python과 Redis를 활용한 RESTful API 기반 URL 축소 서비스 구현
- 특징:
POST /shorten
요청으로 URL 축소GET /
로 원래 URL로 리디렉션- Redis를 사용한 고속 저장/검색
- Base62 인코딩으로 고유 코드 생성
- 설계 원칙: 모듈화, 에러 처리, 확장성
2. 사용 기술
- Python 3.x, Flask (가볍고 유연한 웹 프레임워크)
- Redis (인메모리 키-값 저장소,
redis-py
라이브러리 사용) - redis-py: Redis와의 동기적 상호작용 지원
3. 프로젝트 구조
- app.py: Flask 애플리케이션 초기화, Redis 연결,
Blueprint
등록 - routes.py:
Blueprint
기반 라우팅 정의 (/
,/shorten
,/
) - services.py: URL 생성/저장/검색 로직 (
r.incr
,Base62 인코딩
,r.set
) - templates/: 기본 HTML 템플릿 (
index.html
) - README.md: 프로젝트 문서
4. 동작 원리
- 애플리케이션 초기화 (
app.py
): create_app()
함수로 Flask 인스턴스 생성services.init_redis()
로 Redis 연결 설정routes.py
의main_bp
블루프린트 등록- URL 축소 (
routes.py
&services.py
):
POST /shorten
요청 수신,long_url
검증services.generate_and_store_url(long_url)
호출r.incr('next_short_id')
로 고유 ID 생성- ID를 Base62 문자열로 변환 (예:
A1a
) r.set(short_code, long_url)
로 Redis에 저장
- URL 리디렉션:
GET /
요청 시short_code
추출services.get_long_url(short_code)
로 Redis에서long_url
검색- 존재 시 HTTP 리디렉션, 없으면
404 Not Found
반환
결론
- 실무 팁: Redis의
incr
과set
명령어를 활용한 고속 ID 생성 및 저장이 핵심 - 구현 예시: GitHub 링크에서 단계별 코드 확인 가능
- 권장사항: Base62 인코딩 함수는 별도로 구현하거나
base62
라이브러리 사용 권장