Python Flask

Flask 라우팅과 URL 리다이렉션 처리

PyExplorer 2025. 1. 21. 08:59
728x90

Flask 라우팅과 URL 리다이렉션 처리

웹 애플리케이션을 개발하다 보면 특정 URL에서 다른 URL로 사용자를 리다이렉션해야 하는 경우가 종종 있습니다. 예를 들어, 사용자가 오래된 URL에 접근했을 때 새로운 URL로 안내하거나, 로그인하지 않은 사용자를 로그인 페이지로 이동시키는 상황 등이 있습니다. Flask는 간단하고 강력한 방식으로 이러한 URL 리다이렉션을 지원합니다.

이번 포스팅에서는 Flask에서 URL 리다이렉션을 구현하는 방법을 다양한 예제와 함께 알아보겠습니다.

Flask에서 URL 리다이렉션이란?

URL 리다이렉션은 클라이언트(웹 브라우저)가 특정 URL에 요청을 보냈을 때, 서버가 응답을 통해 다른 URL로 요청을 변경하도록 안내하는 것을 의미합니다. Flask에서는 redirect() 함수와 HTTP 상태 코드를 사용하여 리다이렉션을 간단히 구현할 수 있습니다.

기본적인 리다이렉션

Flask의 redirect() 함수는 주어진 URL로 사용자를 리다이렉션합니다. 예제를 통해 알아보겠습니다.

from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/')
def home():
    return "<h1>홈 페이지</h1>"

@app.route('/old-page')
def old_page():
    # 오래된 URL을 새로운 URL로 리다이렉션
    return redirect(url_for('new_page'))

@app.route('/new-page')
def new_page():
    return "<h1>새로운 페이지입니다!</h1>"

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

실행 결과

  1. / URL에 접속하면 "홈 페이지"가 표시됩니다.
  2. /old-page URL에 접속하면 자동으로 /new-page로 리다이렉션됩니다.
  3. /new-page에 접속하면 "새로운 페이지입니다!"라는 내용이 표시됩니다.

리다이렉션과 HTTP 상태 코드

리다이렉션에는 HTTP 상태 코드가 중요합니다. 기본적으로 redirect() 함수는 302 상태 코드를 사용하지만, 필요에 따라 301, 307 등의 다른 상태 코드를 지정할 수도 있습니다.

예제: 301 리다이렉션 (영구 리다이렉션)

@app.route('/permanent-old-page')
def permanent_old_page():
    # 영구적으로 새로운 URL로 리다이렉션
    return redirect(url_for('new_page'), code=301)

URL 매개변수를 사용한 리다이렉션

리다이렉션 시 URL 매개변수를 전달할 수도 있습니다. 다음은 사용자의 이름을 기반으로 리다이렉션하는 예제입니다.

@app.route('/user/<username>')
def user(username):
    return f"<h1>안녕하세요, {username}님!</h1>"

@app.route('/login')
def login():
    # 로그인 후 특정 사용자 페이지로 리다이렉션
    username = "flask_user"
    return redirect(url_for('user', username=username))

실행 결과

  1. /login에 접속하면 /user/flask_user로 리다이렉션됩니다.
  2. /user/flask_user에서는 "안녕하세요, flask_user님!"이라는 메시지가 표시됩니다.

조건에 따른 동적 리다이렉션

동적 리다이렉션은 사용자의 상태나 입력에 따라 다른 URL로 이동하도록 설계할 수 있습니다. 다음은 로그인 상태에 따라 다른 페이지로 리다이렉션하는 예제입니다.

@app.route('/dashboard')
def dashboard():
    logged_in = False  # 예제에서는 False로 설정

    if not logged_in:
        return redirect(url_for('login'))
    return "<h1>대시보드 페이지입니다!</h1>"

실행 결과

  1. /dashboard에 접속하면 로그인이 되어 있지 않으므로 /login으로 리다이렉션됩니다.
  2. /login에서 로그인 절차를 거친 뒤 대시보드로 이동할 수 있습니다.

외부 URL로의 리다이렉션

Flask에서는 외부 웹사이트로 리다이렉션할 수도 있습니다. 이 경우, redirect() 함수에 절대 URL을 전달하면 됩니다.

@app.route('/external')
def external():
    return redirect("https://www.google.com")

실행 결과

  1. /external에 접속하면 Google 홈페이지로 리다이렉션됩니다.

결론

Flask에서 URL 리다이렉션은 redirect() 함수와 상태 코드를 활용하여 간단히 구현할 수 있습니다. 위에서 다룬 예제들을 활용하면 다양한 상황에서 효과적으로 리다이렉션을 구현할 수 있습니다.

리다이렉션을 잘 활용하면 사용자 경험을 향상시키고, 웹 애플리케이션의 논리 흐름을 더 명확하게 구성할 수 있습니다. 이제 여러분도 Flask에서 URL 리다이렉션을 활용해 보세요!

728x90