Flask 라우팅 실습(1)

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

📌 개념 정리

Flask는 Python으로 웹 애플리케이션을 개발할 수 있게 해주는 가벼운 웹 프레임워크입니다. Flask를 사용하면 서버를 설정하고, 다양한 요청 방식에 따른 처리를 간단하게 할 수 있습니다. Flask 애플리케이션은 주로 @app.route 데코레이터를 사용하여 URL과 그에 대응하는 함수를 연결하여 다양한 동작을 정의합니다.

이번 예시 코드에서는 Flask 애플리케이션을 만들고, 여러 가지 URL 경로를 설정하여 요청을 처리하는 방법을 보여줍니다.

🚦 동작 원리 및 구조

  1. Flask 객체 생성:
    • app = Flask(__name__)을 사용하여 Flask 객체를 생성합니다. 이 객체는 Flask 애플리케이션의 핵심으로, 모든 URL과 뷰 함수들이 연결됩니다.
  2. 경로 정의:
    • 각 @app.route() 데코레이터로 특정 URL 경로를 설정하고, 그에 해당하는 함수가 요청을 처리합니다. 경로가 호출되면 해당 함수가 실행되고, 반환된 결과는 사용자에게 응답으로 전달됩니다.
  3. 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
'기술블로그' 카테고리의 다른 글
  • 📌 Wappalyzer: 웹 기술 스택 분석 확장 프로그램
  • Flask 라우팅 실습 오류수정(1-1)
  • Tab Nine이란? VS코드용 자동완성도구
  • if name == 'main' 구문 정리
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)
상단으로

티스토리툴바