Session 객체 생성
Flask Application 객체의 extensions에는 애플리케이션의 특정 상태 등을 저장할 수 있습니다.
다음 코드는 Session 객체를 저장하는 용도로 사용합니다.
extensions를 먼저 등록한 다음 Session을 추가합니다.
#flask_session.py
from requests import Session
def setup_connector(app, name='default', **options):
if not hasattr(app, 'extensions'):
app.extensions = {}
if 'connectors' not in app.extensions:
app.extensions['connectors'] = {}
session = Session()
if 'auth' in options:
session.auth = options['auth']
headers = options.get('headers', {})
if 'Content-Type' not in headers:
headers['Content-Type'] = 'application/json'
session.headers.update(headers)
app.extensions['connectors'][name] = session
return session
def get_connector(app, name='default'):
return app.extensions['connectors'][name]
setup_connector() 함수는 Session 객체를 생성해 app의 extensions에 저장합니다. 생성된 Session의 Content-Type 헤더 값은 application/json이 기본으로 지정되므로 JSON 기반의 마이크로서비스에 데이터를 보내는 데 쓸 수 있습니다.
이처럼 세션이 앱에 저장되면 뷰에서는 get_connector() 함수로 저장된 세션을 가져올 수 있습니다.
Flask app의 동기식 호출
다음 플라스크 애플리케이션은 5001 포트에서 요청을 기다리고 요청이 들어오면 응답을 만들기 위해 5000번 포트에서 실행되고 있는 또다른 마이크로서비스를 동기식으로 호출합니다. (5000번 포트에 서버가 실행 중이라고 가정합니다.)
# app.py
from flask import Flask, jsonify
from flask_session import setup_connector, get_connector
app = Flask(__name__)
setup_connector(app)
@app.route('/api', methods=['GET', 'POST'])
def my_microservice():
with get_connector(app) as conn:
sub_result = conn.get('http://localhost:5000/api').json() # 동기식 호출
return jsonify({'result':sub_result, 'Hello':'World'})
if __name__ == "__main__":
app.run(port=5001)
위의 서버를 실행시키고 curl을 이용하여 호출합니다.
$ curl localhost:5001/api
5001번 포트가 요청을 받아 5000번 포트 동기식 호출을 한 후 결과를 다시 응답하는 것을 확인할 수 있습니다.
Flask에서 Session 객체를 이용한 간단한 동기식 호출을 구현해보았습니다.
'About > Flask' 카테고리의 다른 글
[RabbitMQ] Python에서 Pika를 이용한 RabbitMQ 사용 (Topic Queue) (0) | 2022.01.05 |
---|---|
[Flask] 비동기 호출(태스크 큐, 토픽 큐, RabbitMQ) (0) | 2022.01.04 |
[Flask] Flask-SQLAlchemy 사용해보기 (1) | 2021.12.30 |
[Flask] 에러 처리 (사용자 정의 에러 핸들러, JSON 에러 핸들러) (0) | 2021.12.13 |
[Flask] Jinja2 템플릿을 이용한 이메일 생성 (0) | 2021.12.13 |