Flask를 reverse proxy 서버로 사용하기

지금 만들고 있는 개인 프로젝트는 flask와 angular를 사용한 SPA 기반 프로젝트입니다.

프로젝트를 만들면서 SPA의 ajax 요청을 처리할 데이터가 필요했습니다. angular에서 service라는 기능으로 샘플 데이터를 넣어 테스트해볼 수 있지만, flask에서 전송되는 데이터를 직접 읽고 싶어서 proxy로 사용해 둘을 같이 동작시킬 방법이 없나 찾아보았고(물론 service로 구현하는게 테스트에 좋습니다), stackoverflow에서 requests를 이용해 구현하는 방법을 찾을 수 있었습니다.

제가 적용한 코드는 아래와 같습니다. stackoverflow와는 달리 replace로 포트만 변경합니다. flask의 기본 포트인 5000을 ng serve의 기본 포트인 4200으로 바꿔서 요청을 전송해줍니다.

import requests
from flask import request, Response

@web.route('/', defaults={'path': 'index.html'})
@web.route('/<path:path>')
def spa_apps(path):
    resp = requests.request(
        method=request.method,
        url=request.url.replace(':5000', ':4200'),
        headers={key: value for (key, value) in request.headers if key != 'Host'},
        data=request.get_data(),
        cookies=request.cookies,
        allow_redirects=False)
    excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
    headers = [(name, value) for (name, value) in resp.raw.headers.items()
               if name.lower() not in excluded_headers]
    response = Response(resp.content, resp.status_code, headers)
    return response