Flask 요청(Request)과 응답(Response)

minho-log·2026년 2월 14일

Flask

목록 보기
6/7

<공부 주제>

Flask 요청(Request)과 응답(Response) 기본

<공부한 내용 정리>

Flask에서 웹 서버는 기본적으로 요청(Request)을 받고 응답(Response)을 반환하는 구조로 동작한다.
사용자가 브라우저에서 URL에 접속하거나, 클라이언트가 API 호출을 하면 서버에 요청이 들어오고 Flask가 이를 처리한 뒤 응답을 돌려준다.

요청에서 자주 다루는 요소는 다음과 같다.

  • 요청 방식(Method): GET, POST 등
  • URL 파라미터(Query String)
  • 경로 변수(Path Variable)
  • 요청 본문(Body): JSON, Form 데이터
  • 요청 헤더(Header)
    응답은 다음과 같은 형태로 반환할 수 있다.
  • 문자열(텍스트)
  • HTML 템플릿
  • JSON 데이터
  • 상태 코드(Status Code)

요청 방식(Method)
라우팅에 methods를 지정해서 어떤 요청을 받을지 설정한다.

@app.route("/test", methods=["GET", "POST"])
def test():
    return "ok"

GET은 조회에, POST는 데이터 전송/생성에 주로 사용한다.

Query String 받기 (URL 파라미터)
URL 뒤에 ?key=value 형태로 붙는 값이다.

from flask import request

@app.route("/search", methods=["GET"])
def search():
    q = request.args.get("q")
    return f"query={q}"

예시 URL

/search?q=flask

Path Variable 받기 (경로 변수)
URL 경로 자체에 변수를 포함한다.

@app.route("/users/<name>", methods=["GET"])
def users(name):
    return f"user={name}"

예시 URL

/users/minho

Body 데이터 받기 (POST)
Form 데이터와 JSON 데이터는 받는 방식이 다르다.
Form 데이터 받기 (HTML form)

from flask import request

@app.route("/login", methods=["POST"])
def login():
    username = request.form.get("username")
    return f"username={username}"

JSON 데이터 받기 (API)

from flask import request, jsonify

@app.route("/echo", methods=["POST"])
def echo():
    data = request.json
    return jsonify(data)

Header 확인하기
요청 헤더는 인증 토큰이나 Content-Type 확인에 자주 사용한다.

from flask import request

@app.route("/headers", methods=["GET"])
def headers():
    ua = request.headers.get("User-Agent")
    return f"User-Agent={ua}"

응답: 상태 코드와 함께 반환하기
Flask에서는 응답 데이터와 상태 코드를 함께 반환할 수 있다.

from flask import jsonify

@app.route("/notfound", methods=["GET"])
def notfound():
    return jsonify({"message": "not found"}), 404

<예제 / 실습 코드>

요청과 응답을 한 번에 연습할 수 있는 예제

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/api/users/<name>", methods=["GET"])
def get_user(name):
    age = request.args.get("age", type=int)
    return jsonify({"name": name, "age": age})

@app.route("/api/users", methods=["POST"])
def create_user():
    data = request.json
    if not data or "name" not in data:
        return jsonify({"message": "name is required"}), 400
    return jsonify({"message": "created", "user": data}), 201

if __name__ == "__main__":
    app.run(debug=True)

GET 테스트

curl "http://127.0.0.1:5000/api/users/minho?age=24"

POST 테스트

curl -X POST "http://127.0.0.1:5000/api/users" \
  -H "Content-Type: application/json" \
  -d '{"name":"minho","age":24}'

<헷갈렸던 점>

  • Query String은 request.args, Form 데이터는 request.form, JSON 데이터는 request.json으로 받는다는 점이 처음에 헷갈렸다.
  • 응답에 상태 코드를 붙이는 방식이 낯설었는데 return 데이터, 상태코드 형태로 쓸 수 있다는 점을 정리했다.

<오늘의 정리>

  • Flask는 요청을 받아 응답을 반환하는 구조로 동작한다.
  • Query String은 request.args, Form은 request.form, JSON은 request.json을 사용한다.
  • 응답은 문자열/HTML/JSON으로 만들 수 있고 상태 코드도 함께 반환할 수 있다.
profile
개발 공부를 하며 직접 부딪히고 공부한 것을 기록합니다.

0개의 댓글