Flask의 핵심 개념 중 하나인 URL 라우팅 시스템과 @app.route() 데코레이터의 역할, 동적 라우팅과 HTTP 메서드 처리 방식에 대해 정리합니다.
URL 매핑과 HTTP 메서드 처리
브라우저에 입력한 주소는 어디로 연결될까?
웹 브라우저에 "http://localhost:5000/hello"라고 입력하면 Flask 애플리케이션은 어떻게 이 요청을 처리할까요?
Flask는 라우터(Router)라는 내부 시스템을 통해, 들어온 URL을 미리 등록된 뷰 함수(view function)와 연결합니다. 이 연결 규칙을 "라우팅(Routing)"이라 부르며, 웹 서버의 주소창이 아닌 Flask 코드 내부에서 그 처리 과정을 구현합니다..
즉, Flask는 단순히 'HTML을 보여주는 도구'가 아니라, '어떤 주소에 어떤 동작을 실행시킬 것인가'를 미리 정의해 놓는 URL 매핑 시스템이라고 할 수 있죠.
@app.route()는 무엇을 하는가?
Flask는 데코레이터 @app.route() 를 통해 URL과 뷰 함수를 연결합니다. 이 데코레이터는 내부적으로 Flask 애플리케이션 인스턴스에 URL 패턴과 함수 이름을 등록하는 역할을 합니다.
from flask import Flask
app = Flask(__name__)
@app.route('/hello')
def say_hello():
return "Hello, Flask!"
위 코드를 보면 /hello 라는 주소로 접속하면 say_hello() 함수가 실행되고, 그 반환값이 브라우저에 표시됩니다. @app.route() 는 이 URL-함수 관계를 Flask에 “등록”하는 기능입니다.
이것은 마치 '전화번호부'처럼 작동합니다. 사용자가 /hello 로 요청을 보내면, Flask는 등록된 say_hello 를 찾아 해당 기능을 실행합니다.
URL과 뷰 함수 연결하기
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return '홈 페이지입니다.'
@app.route('/about')
def about():
return '이 사이트는 Flask로 만들어졌어요.'
- / 는 루트 URL입니다. 기본 홈페이지 역할을 합니다.
- /about 은 소개 페이지 역할을 합니다.
- 각 URL은 별도의 함수에 연결되며, 함수는 문자열, HTML, JSON 등 다양한 데이터를 반환할 수 있습니다.
동적 라우팅과 HTTP 메서드 처리
URL에 데이터를 담는 방법
정적인 라우팅( /about , /contact )만으로는 사용자마다 다른 데이터를 처리하기 어렵습니다. 예를 들어, 사용자의 프로필 페이지를 만들고 싶을 때 각각의 사용자 ID나 닉네임을 URL에 담아야겠죠?
이럴 때 사용하는 것이 동적 라우팅(Dynamic Routing)입니다. Flask에서는 URL 패턴 안에 <변수명> 을 사용하여 URL 일부를 변수로 받아 처리할 수 있습니다.
예를 들어 /user/john , /user/mary 같은 URL에서 john , mary 부분을 변수로 받아오는 방식입니다.
<variable> 구문과 methods 매개변수
1. <variable> 사용법
@app.route('/user/<username>')
def show_profile(username):
return f'{username}님의 프로필입니다.'
- <username> 은 URL의 일부를 변수로 받아옵니다.
- 사용자가 /user/john 으로 접속하면 show_profile('john') 처럼 함수가 실행됩니다.
2. 타입 지정도 가능하다
Flask는 기본적으로 문자열로 처리하지만, 정수 같은 다른 타입도 지정할 수 있습니다.
@app.route('/post/<int:post_id>')
def show_post(post_id):
return f'{post_id}번 게시글입니다.'
- /post/42 → post_id 는 int 형으로 자동 변환되어 show_post(42) 로 전달됩니다.
- 타입 옵션: string , int , float , path , uuid
3. HTTP 메서드별로 다른 처리하기
HTML 폼에서 데이터를 서버로 전송할 때 GET 또는 POST 메서드를 사용합니다. Flask에서는 같은 URL이라도 요청 방식에 따라 다른 처리를 할 수 있습니다.
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return '로그인 시도 중...'
else:
return '로그인 폼을 보여줍니다.'
- GET : 로그인 폼 페이지를 보여줌
- POST : 로그인 데이터를 받아 처리
여기서 request.method 는 Flask의 request 객체를 통해 현재 요청 방식을 확인하는 코드입니다.
'프로그래밍 언어 > Python' 카테고리의 다른 글
Flask 폼 처리, 사용자 입력, GET/POST 차이, CSRF 보안 설정 방법 - Flask #4 (0) | 2025.04.15 |
---|---|
웹 UI 개발을 위한 Flask 템플릿 엔진 Jinja2 조건문과 템플릿 구조 가이드 - Flask #3 (0) | 2025.04.10 |
Django vs Flask 파이썬 웹 프레임워크 비교 - Flask #1 (0) | 2025.04.01 |
파이썬 asyncio로 배우는 비동기 I/O 코루틴과 이벤트 루프 이해하기 - 고급 Python #8 (0) | 2025.01.20 |
파이썬 멀티스레딩과 멀티프로세싱의 차이와 활용 방법 - 고급 Python #7 (0) | 2025.01.15 |