Python Flask 라우팅(Routing)의 개념
Flask는 Python으로 작성된 마이크로 웹 프레임워크로, 간단하면서도 유연한 방식으로 웹 애플리케이션을 개발할 수 있도록 돕습니다. Flask의 핵심 기능 중 하나는 라우팅(Routing)입니다. 라우팅은 웹 애플리케이션에서 URL과 실행될 함수(뷰 함수)를 연결하는 메커니즘으로, 사용자가 특정 URL로 요청을 보낼 때 어떤 로직을 실행할지 정의하는 역할을 합니다.
이 글에서는 Flask의 라우팅 개념과 이를 구현하는 방법을 예제와 함께 자세히 설명하겠습니다.
1. 라우팅의 기본 개념
라우팅은 사용자의 요청을 처리하기 위해 필요한 첫 번째 단계입니다. Flask에서는 @app.route
데코레이터를 사용하여 URL과 뷰 함수를 연결합니다. 사용자는 특정 URL에 요청을 보냄으로써 애플리케이션의 특정 동작을 트리거할 수 있습니다.
기본 예제
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Welcome to the Home Page!"
if __name__ == '__main__':
app.run(debug=True)
위 코드에서 @app.route('/')
는 루트 URL (/
)에 대한 요청을 처리하도록 home
함수를 연결합니다. 결과적으로 사용자가 http://127.0.0.1:5000/
로 접속하면 "Welcome to the Home Page!" 메시지를 확인할 수 있습니다.
2. 동적 라우팅
동적 라우팅은 URL의 일부를 변수로 받아 요청에 따라 동작을 다르게 처리할 수 있도록 합니다. 이를 통해 사용자 정의 데이터와 상호작용할 수 있습니다.
동적 라우팅 예제
@app.route('/user/<username>')
def show_user_profile(username):
return f"User: {username}"
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f"Post ID: {post_id}"
<username>
: 문자열 변수를 받습니다.<int:post_id>
: 정수형 변수를 받습니다.
사용 예시
http://127.0.0.1:5000/user/john
→User: john
http://127.0.0.1:5000/post/42
→Post ID: 42
3. HTTP 메소드와 라우팅
기본적으로 Flask의 라우트는 GET 요청만 처리합니다. 그러나 methods
매개변수를 사용하여 GET, POST, PUT, DELETE 등의 HTTP 메소드를 처리할 수 있습니다.
HTTP 메소드 예제
@app.route('/submit', methods=['GET', 'POST'])
def submit():
if request.method == 'POST':
return "Form Submitted via POST!"
return "Submit Page via GET!"
GET
: 페이지를 요청합니다.POST
: 데이터를 서버로 전송합니다.
사용 예시
- GET 요청 → "Submit Page via GET!"
- POST 요청 → "Form Submitted via POST!"
4. URL 빌딩
Flask에서는 url_for
함수를 사용하여 URL을 동적으로 생성할 수 있습니다. 이는 URL 경로가 변경되더라도 코드 수정을 최소화할 수 있도록 도와줍니다.
URL 빌딩 예제
from flask import url_for
@app.route('/about')
def about():
return "About Page"
@app.route('/home')
def home():
return f"Go to About Page: <a href='{url_for('about')}'>About</a>"
결과
http://127.0.0.1:5000/home
에 접속하면 "About Page" 링크가 표시됩니다.
5. 라우트의 고급 설정
5.1 라우트의 기본값 지정
defaults
매개변수를 사용하여 URL 변수의 기본값을 지정할 수 있습니다.
@app.route('/user/<username>/<int:age>', defaults={'age': 18})
def user_profile(username, age):
return f"Username: {username}, Age: {age}"
사용 예시
/user/john/25
→Username: john, Age: 25
/user/john
→Username: john, Age: 18
5.2 라우트에 별칭 적용
endpoint
매개변수를 사용하여 특정 함수에 별칭을 부여할 수 있습니다.
@app.route('/profile', endpoint='user_profile')
def profile():
return "User Profile Page"
url_for('user_profile')
로 동적으로 URL을 생성할 수 있습니다.
6. Flask 라우팅의 활용 사례
6.1 API 구현
@app.route('/api/data', methods=['GET'])
def get_data():
return {"key": "value", "message": "This is an API response"}
6.2 RESTful 구조
RESTful API는 자원을 명확하게 정의하고 HTTP 메소드를 활용합니다.
@app.route('/tasks', methods=['GET'])
def get_tasks():
return "List of tasks"
@app.route('/tasks', methods=['POST'])
def create_task():
return "Task created"
@app.route('/tasks/<int:task_id>', methods=['PUT'])
def update_task(task_id):
return f"Task {task_id} updated"
@app.route('/tasks/<int:task_id>', methods=['DELETE'])
def delete_task(task_id):
return f"Task {task_id} deleted"
7. 마무리
Flask의 라우팅은 간단한 웹 페이지부터 복잡한 API까지 다양한 애플리케이션을 손쉽게 개발할 수 있도록 돕습니다. 위에서 설명한 개념과 예제를 참고하여 Flask 애플리케이션의 라우팅을 설계하고 확장해 보세요.
'Python > Python Flask' 카테고리의 다른 글
Python 첫 번째 Flask 애플리케이션 만들기 (0) | 2025.08.25 |
---|---|
Python Flask란 무엇인가? (0) | 2025.08.24 |