Python/Python Flask

Python Flask 동적 라우팅 (URL 매개변수 사용법)

임베디드 친구 2025. 8. 27. 19:58
728x90
반응형

Python Flask 라우팅: 동적 라우팅 (URL 매개변수 사용법)

Flask는 Python 기반의 웹 프레임워크로, 간단한 코드만으로도 강력한 웹 애플리케이션을 개발할 수 있도록 도와줍니다. 그 중에서도 Flask 라우팅은 애플리케이션의 URL과 특정 함수(View)를 연결해 주는 중요한 역할을 합니다. 오늘은 Flask의 동적 라우팅, 즉 URL 매개변수를 사용하는 방법을 예제와 함께 자세히 살펴보겠습니다.

1. 동적 라우팅이란?

동적 라우팅이란 URL 경로에 변수를 포함하여, 요청 URL에 따라 다른 데이터를 처리하거나 결과를 반환하는 기능을 말합니다. 예를 들어, 다음과 같은 URL을 처리할 수 있습니다:

/user/1  -> 사용자 ID가 1인 사용자의 정보 출력
/user/2  -> 사용자 ID가 2인 사용자의 정보 출력

Flask에서는 동적 라우팅을 쉽게 구현할 수 있으며, URL 경로에 변수 이름을 포함하여 이를 처리할 수 있습니다.


2. 기본 동적 라우팅 예제

Flask에서 동적 라우팅을 사용하는 기본적인 방법은 아래와 같습니다:

from flask import Flask

app = Flask(__name__)

@app.route('/user/<username>')
def show_user_profile(username):
    return f"사용자 이름: {username}"

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

코드 설명

  1. @app.route('/user/<username>')
    • <username>은 동적 매개변수입니다.
    • URL의 특정 위치에 있는 값을 변수로 받아 처리합니다.
  2. show_user_profile 함수는 username 변수를 매개변수로 받아 해당 사용자 이름을 반환합니다.

실행 결과

애플리케이션을 실행한 후 브라우저에서 다음 URL로 접속해 보세요:

  • http://127.0.0.1:5000/user/John → 결과: 사용자 이름: John
  • http://127.0.0.1:5000/user/Jane → 결과: 사용자 이름: Jane

3. 여러 개의 URL 매개변수 사용

Flask는 하나의 URL에서 여러 개의 매개변수를 처리할 수도 있습니다. 아래는 예제입니다:

@app.route('/post/<int:post_id>/comment/<int:comment_id>')
def show_comment(post_id, comment_id):
    return f"포스트 ID: {post_id}, 댓글 ID: {comment_id}"

코드 설명

  • <int:post_id><int:comment_id>는 URL 매개변수가 각각 정수형 데이터임을 나타냅니다.
  • Flask는 매개변수를 자동으로 해당 데이터 타입으로 변환합니다.

실행 결과

다음과 같은 URL을 처리할 수 있습니다:

  • http://127.0.0.1:5000/post/10/comment/5 → 결과: 포스트 ID: 10, 댓글 ID: 5
  • http://127.0.0.1:5000/post/3/comment/8 → 결과: 포스트 ID: 3, 댓글 ID: 8

4. URL 매개변수 데이터 타입

Flask는 동적 매개변수의 데이터 타입을 지정할 수 있습니다. 기본적으로 문자열 타입이 사용되지만, 특정 타입을 명시할 수도 있습니다. 지원되는 데이터 타입은 다음과 같습니다:

  • <string>: 문자열 (기본값)
  • <int>: 정수
  • <float>: 부동 소수점 숫자
  • <path>: 슬래시(/)를 포함한 문자열
  • <uuid>: UUID 객체

예제: 다양한 데이터 타입

@app.route('/item/<int:item_id>')
def show_item(item_id):
    return f"아이템 ID: {item_id} (정수)"

@app.route('/price/<float:amount>')
def show_price(amount):
    return f"가격: {amount:.2f} (부동 소수점)"

@app.route('/files/<path:filepath>')
def show_file(filepath):
    return f"파일 경로: {filepath}"

실행 결과

  • http://127.0.0.1:5000/item/42 → 결과: 아이템 ID: 42 (정수)
  • http://127.0.0.1:5000/price/19.99 → 결과: 가격: 19.99 (부동 소수점)
  • http://127.0.0.1:5000/files/images/photo.jpg → 결과: 파일 경로: images/photo.jpg

5. 동적 라우팅에서 유효성 검사

동적 라우팅으로 전달받은 값이 항상 올바르다는 보장은 없습니다. 따라서 서버가 이를 안전하게 처리하려면 추가적인 유효성 검사가 필요합니다.

예제: 유효성 검사

@app.route('/square/<int:number>')
def square_number(number):
    if number < 0:
        return "양수만 입력 가능합니다.", 400
    return f"{number}의 제곱은 {number**2}입니다."

실행 결과

  • http://127.0.0.1:5000/square/4 → 결과: 4의 제곱은 16입니다.
  • http://127.0.0.1:5000/square/-3 → 결과: 양수만 입력 가능합니다. (HTTP 상태 코드: 400)

6. 동적 라우팅의 활용 예시

사용자 프로필 페이지

@app.route('/profile/<username>')
def profile(username):
    # 데이터베이스 조회 시뮬레이션
    user_data = {
        "John": "John의 프로필입니다.",
        "Jane": "Jane의 프로필입니다.",
    }
    return user_data.get(username, "사용자를 찾을 수 없습니다.")
  • http://127.0.0.1:5000/profile/John → 결과: John의 프로필입니다.
  • http://127.0.0.1:5000/profile/Unknown → 결과: 사용자를 찾을 수 없습니다.

7. 정리

Flask의 동적 라우팅은 URL에 매개변수를 포함하여 다양한 요청을 유연하게 처리할 수 있도록 도와줍니다. 이를 통해 애플리케이션의 확장성을 높이고 사용자 경험을 개선할 수 있습니다. 오늘 소개한 내용을 바탕으로 Flask 애플리케이션 개발에 동적 라우팅을 적극 활용해 보세요!

728x90
반응형