본문 바로가기

About/Flask

[Python] Flask를 이용한 요청 처리

Flask 애플리케이션을 실행한다는 것은 Flask 클래스의 단일 인스턴스를 띄워 외부에서 들어오는 WSGI 요청을 다루고, 이를 적절한 코드로 전달하여 처리한 후 응답을 반환하는 것입니다. 즉 Flask 는 동기식 웹 프레임워크 입니다.

 

Flask 클래스는 함수를 데코레이트 하는route 함수를 제공합니다. route로 함수를 데코레이트하면 view가 되, Werkzeug의 라우팅 시스템에 등록됩니다. 

 

Flask를 설치하는 커맨드는 다음과 같습니다.

(파이썬 3.6.5, Ubuntu 16.04LTS에서 실행하였습니다.)

pip install flask

 

다음은 간단한 Flask Application 코드 입니다.

#flask_app.py
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api')
def my_microservice():
    return jsonify({'Hello' : 'World!'})
    
if __name__ == '__main__':
    app.run()

/api를 호출하면 응답으로 JSON 데이터를 리턴하며, 나머지 호출은 404 에러를 반환합니다. 셸에서 모듈을 실행하면 플라스크 애플리케이션은 웹 서버를 실행하고, 기본으로 5000번 포트에서 연결을 대기합니다.

 

 

위의 flask_app을 실행합니다.

python flask_app.py

실행 결과

터미널을 하나 더 생성하여 curl 명령어를 통해 5000번 포트의 /api에 요청을 보내봅니다.

 

curl -v http://127.0.0.1:5000/api

curl 요청을 보내면 HTTP 헤더와 JSON응답을 볼 수 있습니다. jsonify() 함수가 JSON 응답과 적절한 헤더를 사용하여 응답 생성합니다.

서버의 응답 : 
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)
> GET /api HTTP/1.1
> Host: 127.0.0.1:5000
> User-Agent: curl/7.60.0
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Type: application/json
< Content-Length: 19
< Server: Werkzeug/0.14.1 Python/3.6.5
< Date: Mon, 07 Jun 2021 06:31:30 GMT
<
{"Hello":"World!"}
* Closing connection 0

 

많은 웹 프레임워크가 명시적으로 request 객체를 코드로 전달하지만 Flask는 암시적인 전역 request 변수를 사용합니다. 따라서 위의 print(request)가 출력한 출력은 다음과 같습니다.(서버)  

<Request 'http://127.0.0.1:5000/api' [GET]>

전역 request 변수는 내부적으로 HTTP 요청을 WSGI 환경 변수 딕셔너리로 파싱하여 만든 Request 객체를 가리킵니다.


 

참조