카테고리 없음

URL 단축 서비스 만들기: Python Flask를 사용한 간단한 구현

idea9329 2024. 12. 30. 16:05
반응형

 

URL 단축 서비스는 긴 URL을 짧고 간결하게 변환하여 사용자 경험을 개선하는 유용한 도구입니다. Bitly.com 같은 URL 단축 서비스는 링크 공유와 클릭 추적에 유용합니다. 이 글에서는 Python과 Flask를 사용해 URL 단축 서비스를 만드는 방법을 설명합니다.


URL 단축 서비스란?

URL 단축 서비스는 긴 URL을 짧은 고유 키로 변환하는 시스템입니다. 사용자는 짧은 URL을 통해 원본 URL로 리다이렉션됩니다. 이 서비스는 소셜 미디어, 마케팅 캠페인, 데이터 분석 등 다양한 분야에서 사용됩니다.


서비스 구축 개요

기능:
1. URL 입력 및 단축.
2. 단축된 URL로 원본 URL 리다이렉션.
3. URL 저장 및 관리.

기술 스택:

  • Python: 백엔드 개발.
  • Flask: 웹 프레임워크.
  • SQLite: 데이터 저장소.
  • HTML/CSS: 간단한 사용자 인터페이스.

1. Python Flask 환경 설정

  1. Python 설치
    • Python 3.8 이상 설치.
  2. 필요한 패키지 설치
    pip install flask flask-sqlalchemy

2. URL 단축 서비스 코드 작성

아래 코드는 간단한 URL 단축 서비스의 기본 구조입니다.

from flask import Flask, request, redirect, render_template, jsonify
from flask_sqlalchemy import SQLAlchemy
import random
import string

# Flask 앱 생성
app = Flask(__name__)

# SQLite 데이터베이스 설정
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///urls.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)

# URL 데이터베이스 모델
class URL(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    original_url = db.Column(db.String(500), nullable=False)
    short_url = db.Column(db.String(10), unique=True, nullable=False)

# 데이터베이스 초기화
with app.app_context():
    db.create_all()

# 고유 키 생성 함수
def generate_short_url():
    characters = string.ascii_letters + string.digits
    return ''.join(random.choices(characters, k=6))

# 메인 페이지
@app.route('/')
def home():
    return render_template('index.html')

# URL 단축 요청 처리
@app.route('/shorten', methods=['POST'])
def shorten_url():
    original_url = request.form.get('original_url')
    if not original_url:
        return jsonify({"error": "URL is required"}), 400

    # 기존 URL 확인
    existing_url = URL.query.filter_by(original_url=original_url).first()
    if existing_url:
        return jsonify({"short_url": request.host_url + existing_url.short_url}), 200

    # 새로운 단축 URL 생성
    short_url = generate_short_url()
    while URL.query.filter_by(short_url=short_url).first() is not None:
        short_url = generate_short_url()

    # 데이터베이스 저장
    new_url = URL(original_url=original_url, short_url=short_url)
    db.session.add(new_url)
    db.session.commit()

    return jsonify({"short_url": request.host_url + short_url}), 201

# 단축 URL 리다이렉션
@app.route('/<short_url>')
def redirect_url(short_url):
    url = URL.query.filter_by(short_url=short_url).first()
    if url:
        return redirect(url.original_url)
    return jsonify({"error": "URL not found"}), 404

if __name__ == '__main__':
    app.run(debug=True)

3. HTML 템플릿 작성

index.html 파일을 작성하여 URL 입력 인터페이스를 제공합니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>URL Shortener</title>
</head>
<body>
    <h1>URL 단축 서비스</h1>
    <form action="/shorten" method="POST">
        <input type="url" name="original_url" placeholder="Enter your URL" required>
        <button type="submit">Shorten</button>
    </form>
</body>
</html>

4. 서비스 실행

  1. 애플리케이션 실행:
  2. python app.py
  3. 브라우저에서 실행:
    • http://127.0.0.1:5000으로 이동.
    • URL을 입력하여 단축 URL을 생성.

5. 배포

  • 로컬에서 개발한 URL 단축 서비스를 클라우드 플랫폼에 배포하세요.
    • AWS, Google Cloud, Heroku를 사용.
    • 도커(Docker)로 컨테이너화하면 배포가 더욱 쉬워집니다.

결론

이 글에서는 Python과 Flask를 사용해 간단한 URL 단축 서비스를 구축하는 방법을 배웠습니다. 이 서비스는 기본적인 URL 단축 기능을 제공하며, 이를 확장하여 클릭 추적, 사용자 계정 관리, 데이터 분석 등의 고급 기능을 추가할 수 있습니다.

Tip: 검색 최적화(SEO)를 위해 서비스를 홍보할 때 "URL 단축", "링크 관리", "짧은 URL 생성" 같은 키워드를 포함하세요.

지금 바로 시작해서 Bitly.com 같은 나만의 서비스를 만들어 보세요! 🚀

반응형