📌 개념 정리
Flask는 Python으로 웹 애플리케이션을 개발할 수 있게 해주는 가벼운 웹 프레임워크입니다. Flask를 사용하면 서버를 설정하고, 다양한 요청 방식에 따른 처리를 간단하게 할 수 있습니다. Flask 애플리케이션은 주로 @app.route 데코레이터를 사용하여 URL과 그에 대응하는 함수를 연결하여 다양한 동작을 정의합니다.
이번 예시 코드에서는 Flask 애플리케이션을 만들고, 여러 가지 URL 경로를 설정하여 요청을 처리하는 방법을 보여줍니다.
🚦 동작 원리 및 구조
- Flask 객체 생성:
- app = Flask(__name__)을 사용하여 Flask 객체를 생성합니다. 이 객체는 Flask 애플리케이션의 핵심으로, 모든 URL과 뷰 함수들이 연결됩니다.
- 경로 정의:
- 각 @app.route() 데코레이터로 특정 URL 경로를 설정하고, 그에 해당하는 함수가 요청을 처리합니다. 경로가 호출되면 해당 함수가 실행되고, 반환된 결과는 사용자에게 응답으로 전달됩니다.
- HTTP 요청 방식 처리:
- GET, POST, PUT, DELETE와 같은 HTTP 메서드를 처리할 수 있는 라우트가 설정됩니다. 예를 들어, @app.route('/submit', methods=['GET', 'POST', 'PUT', 'DELETE']) 라우트는 여러 가지 HTTP 메서드에 대해 다른 처리를 할 수 있도록 설정됩니다.
💻 코드 예시 및 흐름 분석
from flask import Flask, request
import requests
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, This is Main Page!"
@app.route('/about')
def about():
return "This is about page!"
@app.route('/user/<username>')
def user_profile(username):
return f"UserName : {username}"
@app.route('/number/<int:number>')
def number(number):
return f"UserName : {number}"
@app.route('/test')
def test():
url = "http://127.0.0.1:5000/submit"
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post(url=url, data=data)
return response.text
@app.route('/submit', methods=['GET', 'POST', 'PUT', 'DELETE'])
def submit():
print(request.method)
if request.method == 'GET':
print("GET method")
if request.method == 'POST':
print("POST method", request.data)
return 'sucess'
if __name__ == "__main__":
app.run()
1. @app.route('/') - 홈 페이지
- URL: http://127.0.0.1:5000/
- HTTP 요청이 이 URL로 들어오면, home() 함수가 실행되고 "Hello, This is Main Page!"를 반환합니다.
@app.route('/')
def home():
return "Hello, This is Main Page!"
2. @app.route('/about') - About 페이지
- URL: http://127.0.0.1:5000/about
- 이 경로로 요청이 들어오면, "This is about page!"라는 메시지를 반환합니다.
@app.route('/about')
def about():
return "This is about page!"
3. @app.route('/user/<username>') - 동적 URL 파라미터
- URL: http://127.0.0.1:5000/user/John
- <username> 부분은 동적으로 사용자가 입력한 값을 받아 처리할 수 있습니다. 예를 들어, username이 "John"이면 UserName : John이라는 메시지가 반환됩니다.
@app.route('/user/<username>')
def user_profile(username):
return f"UserName : {username}"
4. @app.route('/number/<int:number>') - 숫자 URL 파라미터
- URL: http://127.0.0.1:5000/number/123
- <int:number>는 숫자만 허용하는 파라미터입니다. 예를 들어, number가 123이면 "UserName : 123"을 반환합니다.
@app.route('/number/<int:number>')
def number(number):
return f"UserName : {number}"
5. @app.route('/test') - 외부 API 호출 (POST 요청)
- URL: http://127.0.0.1:5000/test
- 이 라우트는 requests 모듈을 사용하여 다른 URL (/submit)에 POST 요청을 보내고 그 응답을 반환합니다.
@app.route('/test')
def test():
url = "http://127.0.0.1:5000/submit"
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post(url=url, data=data)
return response.text
6. @app.route('/submit', methods=['GET', 'POST', 'PUT', 'DELETE']) - 다양한 HTTP 메서드 처리
- URL: http://127.0.0.1:5000/submit
- 이 라우트는 다양한 HTTP 메서드 (GET, POST, PUT, DELETE)를 처리합니다. 요청 방식에 따라 다른 처리를 할 수 있습니다. 예를 들어, GET 요청 시 "GET method"를 출력하고, POST 요청 시 "POST method"와 함께 요청 데이터를 출력합니다.
@app.route('/submit', methods=['GET', 'POST', 'PUT', 'DELETE'])
def submit():
print(request.method)
if request.method == 'GET':
print("GET method")
if request.method == 'POST':
print("POST method", request.data)
return 'sucess'
🧪 실전 사례
1. 동적 URL 파라미터 사용:
- 동적 URL을 사용하여 사용자 정보를 처리하는 경우 유용합니다. 예를 들어, /user/<username> 경로에서 특정 사용자의 프로필을 동적으로 보여줄 수 있습니다.
2. 외부 API와 연동:
- requests 라이브러리를 사용하여 Flask 애플리케이션 내부에서 다른 웹 애플리케이션에 POST 요청을 보내고 그 응답을 받을 수 있습니다. 이 방식은 다른 API와 연동하여 데이터를 주고받을 때 유용합니다.
🧠 고급 팁 or 자주 하는 실수
- 동적 URL 처리 시 주의:
- URL 경로에서 변수(예: <username>)를 사용할 때, 사용자가 입력하는 값이 예상치 못한 형식일 수 있으므로 입력값을 검증하는 로직을 추가하는 것이 좋습니다.
- HTTP 메서드 처리:
- 특정 HTTP 메서드에 대해 다르게 처리하려면 @app.route()의 methods 인자를 적절하게 설정해야 합니다. 예를 들어, POST 요청을 처리할 때는 반드시 methods=['POST']로 설정해야 합니다.
✅ 마무리 요약 및 복습 포인트
- Flask는 Python으로 웹 애플리케이션을 쉽게 개발할 수 있는 도구입니다.
- @app.route() 데코레이터로 경로를 설정하고, 각 경로에 대한 처리를 함수로 정의합니다.
- 다양한 HTTP 메서드(GET, POST 등)에 대해 응답을 설정할 수 있으며, 동적 URL 파라미터를 통해 사용자 입력을 처리할 수 있습니다.
- 외부 API와의 연동도 간단하게 구현할 수 있습니다.
'기술블로그' 카테고리의 다른 글
📌 Wappalyzer: 웹 기술 스택 분석 확장 프로그램 (0) | 2025.04.17 |
---|---|
Flask 라우팅 실습 오류수정(1-1) (0) | 2025.04.17 |
Tab Nine이란? VS코드용 자동완성도구 (0) | 2025.04.17 |
if name == 'main' 구문 정리 (0) | 2025.04.17 |
✅ GitHub Copilot 설치 및 설정 방법 (0) | 2025.04.17 |