📌 개념 정리
이 코드는 Flask를 이용하여 간단한 웹 애플리케이션을 구축한 예제입니다. Flask는 Python 기반의 웹 프레임워크로, 웹 서버를 쉽게 구축할 수 있게 도와줍니다. 이 코드는 여러 URL 라우트를 정의하고, 요청을 처리하는 방법을 보여줍니다. 주로 GET과 POST 메서드를 사용하여 데이터 전송 및 응답을 처리하는 방법을 포함하고 있습니다.
🚦 동작 원리 및 구조
- Flask 객체 생성:
- app = Flask(__name__)로 Flask 객체를 생성하여 애플리케이션을 시작합니다. 이 객체는 URL 라우팅과 요청/응답 처리를 담당합니다.
- 라우트 설정:
- @app.route() 데코레이터를 사용하여 URL 경로와 해당 경로로 들어오는 HTTP 요청을 처리하는 함수들을 설정합니다.
- 예를 들어, / 경로는 홈페이지로, /about 경로는 about 페이지로 설정됩니다.
- HTTP 요청 처리:
- GET 요청, POST 요청을 처리하는 라우트를 설정하고, requests 라이브러리를 사용하여 외부 서버에 POST 요청을 보내고 응답을 처리합니다.
- 동적 URL 파라미터:
- @app.route('/user/<username>') 처럼 동적으로 URL 파라미터를 처리합니다. <username>은 사용자가 URL에 입력하는 값에 따라 다르게 처리됩니다.
- JSON 데이터 처리:
- POST 요청에서 JSON 데이터를 받아 처리합니다. request.json을 사용하여 JSON 데이터를 처리하고, 해당 데이터를 출력합니다.
💻 코드 예시 및 흐름 분석
from flask import Flask, request
import requests # pip install requests
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, This is Main Page!" # 홈페이지에 접속 시 출력되는 메시지
@app.route('/about')
def about():
return "This is about page!" # /about 경로에 접속 시 출력되는 메시지
@app.route('/user/<username>')
def user_profile(username):
return f"UserName : {username}" # /user/이름 경로에서 동적으로 사용자 이름 출력
# POST 요청을 날리는 방법 (1) Postman, (2) requests
@app.route('/test')
def test():
url = "http://127.0.0.1:5000/submit" # POST 요청을 보낼 URL
data = {'key1': 'value1', 'key2': 'value2'} # 전송할 데이터
response = requests.post(url, json=data) # JSON 형식으로 요청 보내기
return response.text # 서버의 응답 본문 출력
@app.route('/submit', methods=['GET', 'POST', 'PUT', 'DELETE'])
def submit():
print(request.method) # 요청된 HTTP 메서드를 출력
if request.method == 'GET':
print("GET method") # GET 요청 시 처리
if request.method == 'POST':
print("POST method", request.json) # POST 요청 시 JSON 데이터 출력
# 예시: JSON 데이터 처리
key1 = request.json.get('key1') # JSON 데이터에서 key1 값 가져오기
key2 = request.json.get('key2') # JSON 데이터에서 key2 값 가져오기
print(f"Received: key1={key1}, key2={key2}")
return 'success' # 처리 완료 후 'success' 반환
if __name__ == "__main__":
app.run(debug=True) # 디버그 모드 활성화
1. 홈페이지 경로 (/)
- URL: http://127.0.0.1:5000/
- 동작: 홈페이지로 접속하면 "Hello, This is Main Page!"라는 메시지를 반환합니다.
@app.route('/')
def home():
return "Hello, This is Main Page!"
2. About 페이지 (/about)
- URL: http://127.0.0.1:5000/about
- 동작: /about 경로로 접속하면 "This is about page!"라는 메시지를 반환합니다.
@app.route('/about')
def about():
return "This is about page!"
3. 동적 사용자 프로필 경로 (/user/<username>)
- URL: http://127.0.0.1:5000/user/John
- 동작: URL에서 <username> 부분을 동적으로 받아 UserName : {username} 형식으로 출력합니다. 예를 들어, username이 "John"이라면 "UserName : John"이 출력됩니다.
@app.route('/user/<username>')
def user_profile(username):
return f"UserName : {username}"
4. 외부 POST 요청 테스트 (/test)
- URL: http://127.0.0.1:5000/test
- 동작: /test 경로로 접속하면 requests 라이브러리를 사용하여 같은 서버의 /submit 경로로 POST 요청을 보내고, 서버의 응답을 출력합니다.
@app.route('/test')
def test():
url = "http://127.0.0.1:5000/submit"
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post(url, json=data)
return response.text
5. 서버의 /submit 경로 (GET, POST, PUT, DELETE)
- URL: http://127.0.0.1:5000/submit
- 동작: 다양한 HTTP 메서드를 처리합니다.
- GET: 요청 시 "GET method"를 출력합니다.
- POST: 요청 시 JSON 데이터를 출력하고 처리합니다. 예를 들어, {"key1": "value1", "key2": "value2"} 데이터를 받으면 이를 출력합니다.
@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.json)
key1 = request.json.get('key1')
key2 = request.json.get('key2')
print(f"Received: key1={key1}, key2={key2}")
return 'success'
🧪 실전 사례
- 외부 API 호출: requests.post()를 사용하여 Flask 애플리케이션 내에서 다른 URL에 POST 요청을 보내는 방식은 외부 서비스와의 연동에 유용합니다.
- 동적 URL 처리: /user/<username>처럼 동적 URL을 사용하면, URL에 따라 변동하는 사용자 데이터를 쉽게 처리할 수 있습니다.
🧠 고급 팁 or 자주 하는 실수
- POST 요청에서 JSON 처리:
- request.json은 자동으로 application/json 형식의 요청만 처리합니다. 다른 형식의 데이터는 request.form 또는 request.data 등을 사용하여 처리해야 합니다.
- 디버깅 활성화:
- app.run(debug=True)를 설정하면, 애플리케이션에서 오류가 발생할 경우 에러 메시지와 함께 디버깅 정보를 확인할 수 있어 빠르게 문제를 해결할 수 있습니다.
✅ 마무리 요약 및 복습 포인트
- Flask를 사용하면 간단하게 웹 애플리케이션을 만들 수 있으며, URL 경로와 요청을 쉽게 매핑할 수 있습니다.
- GET과 POST 요청을 처리하는 방법과 외부 API와의 연동 방법을 배웠습니다.
- 동적 URL 파라미터를 통해 유동적인 데이터를 처리할 수 있습니다.
'기술블로그' 카테고리의 다른 글
Visual Studio Code 추천 확장프로그램 (0) | 2025.04.17 |
---|---|
📌 Wappalyzer: 웹 기술 스택 분석 확장 프로그램 (0) | 2025.04.17 |
Flask 라우팅 실습(1) (0) | 2025.04.17 |
Tab Nine이란? VS코드용 자동완성도구 (0) | 2025.04.17 |
if name == 'main' 구문 정리 (0) | 2025.04.17 |