Flask 라우팅 실습 오류수정(1-1)

2025. 4. 17. 17:30·기술블로그

📌 개념 정리

이 코드는 Flask를 이용하여 간단한 웹 애플리케이션을 구축한 예제입니다. Flask는 Python 기반의 웹 프레임워크로, 웹 서버를 쉽게 구축할 수 있게 도와줍니다. 이 코드는 여러 URL 라우트를 정의하고, 요청을 처리하는 방법을 보여줍니다. 주로 GET과 POST 메서드를 사용하여 데이터 전송 및 응답을 처리하는 방법을 포함하고 있습니다.

🚦 동작 원리 및 구조

  1. Flask 객체 생성:
    • app = Flask(__name__)로 Flask 객체를 생성하여 애플리케이션을 시작합니다. 이 객체는 URL 라우팅과 요청/응답 처리를 담당합니다.
  2. 라우트 설정:
    • @app.route() 데코레이터를 사용하여 URL 경로와 해당 경로로 들어오는 HTTP 요청을 처리하는 함수들을 설정합니다.
    • 예를 들어, / 경로는 홈페이지로, /about 경로는 about 페이지로 설정됩니다.
  3. HTTP 요청 처리:
    • GET 요청, POST 요청을 처리하는 라우트를 설정하고, requests 라이브러리를 사용하여 외부 서버에 POST 요청을 보내고 응답을 처리합니다.
  4. 동적 URL 파라미터:
    • @app.route('/user/<username>') 처럼 동적으로 URL 파라미터를 처리합니다. <username>은 사용자가 URL에 입력하는 값에 따라 다르게 처리됩니다.
  5. 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
'기술블로그' 카테고리의 다른 글
  • Visual Studio Code 추천 확장프로그램
  • 📌 Wappalyzer: 웹 기술 스택 분석 확장 프로그램
  • Flask 라우팅 실습(1)
  • Tab Nine이란? VS코드용 자동완성도구
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (472) N
      • Python (31)
      • 프로젝트 (43)
      • 과제 (21)
      • Database (40)
      • 멘토링 (7) N
      • 특강 (18)
      • 기술블로그 (126) N
      • AI 분석 (4)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (34) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Flask 라우팅 실습 오류수정(1-1)
상단으로

티스토리툴바