Flask 라우팅 기초 app.route 사용법과 methods GET POST 완벽 가이드
🚀 버튼 한 번으로 웹 요청을 다루는 법, app.route와 methods로 GET과 POST를 똑똑하게 설계해 보세요
Flask에서 가장 먼저 마주치는 질문은 주소를 어떻게 기능에 연결하느냐입니다.
주소창에 입력한 경로가 어떤 함수로 흘러가고, 화면을 만들거나 데이터를 돌려주는지의 흐름을 이해하는 순간 웹 개발의 문이 크게 열립니다.
특히 라우팅은 작은 실수 하나가 전체 동작을 막을 만큼 중요하고, 구조를 잡아두면 이후 확장이 매우 쉬워집니다.
이번 글은 Flask의 라우팅을 이루는 핵심 요소인 app.route와 methods를 중심으로, GET과 POST를 명확히 구분하고 안정적으로 처리하는 기본기를 다집니다.
개념 설명에만 그치지 않고 실제 코드에서 부딪히는 포인트들을 친근한 예제로 풀어내며, 초보자도 바로 따라 할 수 있도록 단계를 정리했습니다.
웹은 결국 요청과 응답의 연쇄입니다.
브라우저가 보내는 요청 방식에 따라 서버가 해야 할 일도 달라지죠.
폼 전송처럼 데이터를 바꿀 때는 POST가, 페이지를 읽어 올 때는 GET이 대표적입니다.
Flask에서는 app.route 데코레이터로 경로와 함수를 연결하고, methods 매개변수로 허용할 HTTP 메서드를 지정합니다.
즉, 같은 URL이라도 methods를 통해 GET과 POST를 구분해 처리할 수 있고, 실무에서는 폼 입력 처리와 JSON API를 모두 이 방식으로 구현합니다.
이 글에서 기본 문법과 옵션을 정리하고, 안전한 처리 순서와 에러를 줄이는 패턴을 실전 예제로 소개합니다.
📋 목차
🔗 Flask 라우팅이란 app.route 개념 이해
웹 프레임워크에서 라우팅은 특정 URL 경로를 지정된 함수와 연결해 주는 과정입니다.
Flask에서는 @app.route 데코레이터를 사용해 이 작업을 간단하게 처리할 수 있습니다.
예를 들어 사용자가 /home이라는 주소를 요청하면 Flask는 해당 URL에 연결된 함수를 실행하고, 그 결과를 브라우저에 응답으로 돌려줍니다.
이처럼 라우팅은 URL과 기능을 이어주는 다리 역할을 하며, Flask 개발의 출발점이 됩니다.
Flask의 라우팅은 단순히 경로와 함수를 매핑하는 것을 넘어서, 가독성과 유지보수에도 큰 영향을 줍니다.
짧고 명확한 경로는 사용자 경험을 개선하며, 개발자가 기능을 빠르게 찾을 수 있게 합니다.
또한 같은 함수에 여러 개의 경로를 매핑하거나, 경로에 변수를 포함시켜 동적으로 데이터를 전달받을 수도 있습니다.
이러한 유연성이 Flask가 경량 웹 프레임워크임에도 불구하고 널리 사용되는 이유 중 하나입니다.
📌 기본 라우팅 코드 예시
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello, Flask!"
위 코드에서 @app.route(“/”)는 루트 URL(/) 요청이 들어왔을 때 index() 함수를 실행하도록 지정합니다.
이처럼 @app.route는 Flask 라우팅의 핵심 도구이며, 프로젝트 전반에서 가장 많이 사용되는 기능 중 하나입니다.
💎 핵심 포인트:
라우팅은 사용자의 요청을 처리하는 첫 관문이며, Flask에서 모든 기능은 결국 라우팅을 통해 접근할 수 있습니다.
🛠️ GET과 POST 메서드 차이와 선택 기준
HTTP 요청에는 여러 가지 메서드가 있지만, Flask에서 가장 자주 사용하는 것은 GET과 POST입니다.
이 두 가지는 기능과 사용 목적이 뚜렷하게 구분되므로 상황에 맞게 선택하는 것이 중요합니다.
GET은 데이터를 요청하거나 단순히 페이지를 불러올 때 주로 사용되며, URL에 파라미터를 붙여 정보를 전달합니다.
반대로 POST는 서버의 상태를 변경하는 작업, 예를 들어 폼 제출이나 회원가입, 글 작성 같은 데이터 전송에 쓰입니다.
GET 요청은 브라우저 주소창에 파라미터가 노출되므로 민감한 정보를 전달하기에는 적합하지 않습니다.
또한 길이 제한이 있어 대량의 데이터를 전송하기 어렵습니다.
반면 POST 요청은 요청 본문(body)에 데이터를 담아 보내기 때문에 보안성이 높고, 데이터 크기 제한이 상대적으로 자유롭습니다.
따라서 로그인 정보, 파일 업로드, DB 저장과 같은 작업에는 POST가 권장됩니다.
📌 GET과 POST 비교 표
| 구분 | GET | POST |
|---|---|---|
| 데이터 위치 | URL 쿼리스트링 | 요청 본문(body) |
| 보안성 | 낮음 (주소창에 노출) | 높음 (본문에 숨겨짐) |
| 데이터 크기 | 제한적 | 상대적으로 자유로움 |
| 주요 활용 | 검색, 페이지 이동 | 폼 전송, 데이터 저장 |
⚠️ 주의: GET 요청에 비밀번호, 카드번호와 같은 민감한 정보를 담으면 보안 취약점이 발생할 수 있습니다.
정리하자면, 데이터를 조회하거나 링크 공유가 필요한 경우에는 GET을, 보안과 데이터 무결성이 중요한 경우에는 POST를 사용하는 것이 가장 안전하고 표준적인 선택입니다.
⚙️ app.route 데코레이터 기본 문법과 옵션
Flask의 라우팅은 @app.route() 데코레이터를 사용해 작성됩니다.
이 데코레이터는 특정 URL 경로와 그에 대응하는 뷰 함수를 연결합니다.
즉, 사용자가 지정한 경로로 요청을 보내면 Flask가 해당 함수를 실행하도록 만들어 주는 것입니다.
기본 문법은 다음과 같습니다.
@app.route("/경로", methods=["GET", "POST"])
def 함수명():
return "응답 내용"
여기서 “/경로”는 사용자가 접속할 URL 경로를 의미합니다.
또한 methods 옵션을 지정하면 해당 경로에서 허용할 HTTP 메서드를 제한할 수 있습니다.
기본값은 GET이므로, 별도로 지정하지 않으면 모든 요청은 GET 방식으로만 처리됩니다.
📌 옵션 활용 예시
- 🛠️methods : 허용할 HTTP 메서드 지정
- ⚙️strict_slashes : URL 끝에 슬래시(/) 허용 여부
- 🔌endpoint : 라우트에 이름을 부여해 관리 편의성 증가
예를 들어 @app.route("/about", strict_slashes=False)로 지정하면 /about과 /about/ 두 경로 모두 같은 함수로 연결됩니다.
또한 endpoint를 지정하면 URL 빌드 시 함수 이름 대신 endpoint를 사용할 수 있어 코드 유지보수성이 올라갑니다.
💬 @app.route는 Flask에서 가장 핵심적인 기능 중 하나이며, 다양한 옵션을 통해 유연하게 라우팅을 설계할 수 있습니다.
🔌 methods 매개변수로 다중 메서드 처리
Flask에서 methods 매개변수는 단일 라우트에서 여러 HTTP 메서드를 동시에 처리할 수 있도록 해줍니다.
예를 들어 로그인 페이지의 경우 GET 요청 시 로그인 폼을 보여주고, POST 요청 시 입력한 데이터를 검증하는 방식으로 동작합니다.
이처럼 하나의 URL 경로에서 상황에 따라 서로 다른 처리를 하려면 methods를 반드시 지정해야 합니다.
from flask import request
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
return "로그인 데이터 처리"
return "로그인 페이지 표시"
위 예제에서 GET 요청이 들어오면 로그인 폼을 보여주고, POST 요청이 들어오면 입력된 데이터를 처리하도록 구성했습니다.
즉, 동일한 URL 경로를 사용하되 메서드에 따라 역할을 분리하는 것입니다.
이는 RESTful API 설계에서도 자주 활용되는 중요한 패턴입니다.
📌 methods 활용 시 체크리스트
- 🛠️기본값은 GET만 허용됨
- ⚙️여러 메서드를 동시에 지정하려면 리스트 형식 사용
- 🔌request.method 속성을 활용해 분기 처리
- ✅보안이 필요한 요청은 반드시 POST로 제한
💎 핵심 포인트:
methods 매개변수를 활용하면 코드 중복을 줄이고, 하나의 라우트에서 요청 종류에 따라 유연하게 대응할 수 있습니다.
💡 실무 예제 폼 처리와 JSON API 패턴
실제 프로젝트에서는 GET과 POST를 단순히 구분하는 것만으로는 부족합니다.
사용자 입력을 받는 폼 처리나, 클라이언트와 데이터를 주고받는 JSON API 패턴이 필수적으로 활용됩니다.
Flask에서는 이 두 가지를 methods와 request 객체를 조합해 간단하게 구현할 수 있습니다.
📌 폼 데이터 처리 예제
from flask import request, render_template
@app.route("/register", methods=["GET", "POST"])
def register():
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
return f"{username}님, 회원가입이 완료되었습니다!"
return render_template("register.html")
이 예제는 회원가입을 위한 간단한 코드입니다.
GET 요청에서는 HTML 폼을 보여주고, POST 요청에서는 사용자가 입력한 데이터를 처리합니다.
request.form을 활용하면 폼 입력값을 손쉽게 가져올 수 있습니다.
📌 JSON API 처리 예제
from flask import jsonify
@app.route("/api/data", methods=["POST"])
def api_data():
data = request.get_json()
return jsonify({"received": data})
위 코드에서는 클라이언트가 JSON 데이터를 POST로 전송하면 Flask가 이를 파싱하고, 다시 JSON 형식으로 응답합니다.
이 방식은 React, Vue 같은 프론트엔드 프레임워크와 통신할 때 널리 쓰이는 패턴입니다.
💡 TIP: API를 설계할 때는 GET은 데이터 조회, POST는 데이터 생성, PUT은 수정, DELETE는 삭제로 구분하는 RESTful 패턴을 지키면 확장성과 협업 효율이 크게 향상됩니다.
❓ 자주 묻는 질문 FAQ
Flask에서 기본 라우팅 메서드는 무엇인가요?
같은 URL에 GET과 POST를 동시에 사용할 수 있나요?
라우트 경로에 변수를 포함할 수 있나요?
GET 요청에 민감한 데이터를 넣어도 되나요?
methods 옵션을 지정하지 않으면 어떻게 되나요?
JSON 데이터를 주고받으려면 어떤 메서드를 써야 하나요?
라우팅 함수 이름은 반드시 고유해야 하나요?
methods에 PUT이나 DELETE도 지정할 수 있나요?
📌 Flask 라우팅 기초와 methods 활용 정리
Flask에서 라우팅은 웹 개발의 가장 핵심적인 출발점입니다.
@app.route 데코레이터로 URL과 함수를 연결하고, methods 매개변수로 요청 방식을 지정함으로써 단순한 페이지 이동부터 복잡한 데이터 처리까지 모두 구현할 수 있습니다.
특히 GET은 데이터 조회, POST는 데이터 전송과 저장이라는 기본 원칙을 지키면 안정성과 보안성을 확보할 수 있습니다.
실무에서는 폼 처리와 JSON API 설계에서 이 개념이 그대로 활용되며, 하나의 라우트에서 여러 메서드를 처리해 코드 중복을 줄이고 유지보수성을 높일 수 있습니다.
이번 글에서 다룬 기본 문법과 예제는 Flask를 처음 접하는 사람에게 중요한 기초가 되며, 더 나아가 RESTful API를 설계하는 발판이 됩니다.
🏷️ 관련 태그 : Flask라우팅, 파이썬Flask, 웹개발기초, app.route, GETPOST요청, RESTAPI, 폼처리, JSONAPI, 백엔드개발, 프로그래밍학습