본문 바로가기

FastAPI, Flask 등등 웹서버를 써야하나 말아야 하나 고민중이라면 한번 읽어보시길~~

FastAPI 개발환경 셋팅으로 배우는 nginx와 웹서버의 관계

 

nginx와 웹서버의 관계를 이해하기 위해서는 먼저 nginx가 무엇인지 알아야 합니다. nginx는 웹서버 소프트웨어로, 클라이언트의 요청을 받아서 처리하거나 다른 서버에 전달하는 역할을 합니다. nginx는 reverse proxy라고도 불리는데, 이는 nginx가 클라이언트와 실제 서버 사이에 위치하여 요청과 응답을 중계해주는 것을 의미합니다¹.

 

FastAPI는 파이썬으로 작성된 웹 프레임워크로, 비동기적이고 빠르게 API를 개발할 수 있습니다. FastAPI는 ASGI라고 부르는 웹 서버 게이트웨이 인터페이스를 사용하는데, 이는 비동기적으로 요청을 처리할 수 있는 인터페이스입니다. FastAPI의 ASGI 서버로는 uvicorn이라는 것을 사용합니다¹.

 

nginx와 FastAPI를 함께 사용하려면, nginx가 클라이언트의 요청을 받아서 uvicorn에 전달하고, uvicorn이 FastAPI의 로직을 실행하여 결과를 nginx에 반환하고, nginx가 다시 클라이언트에게 응답을 보내주는 과정이 필요합니다. 이를 위해서는 nginx의 설정 파일에 FastAPI 서버의 주소와 포트를 지정해주어야 합니다¹.

 

예를 들어, 다음과 같은 설정 파일을 사용한다면, nginx는 80번 포트로 들어오는 요청을 docker-fastapi라는 이름의 upstream 서버에 전달하고, upstream 서버는 fastapi:7000이라는 주소와 포트를 가진 컨테이너에서 uvicorn과 FastAPI가 실행되고 있는 것입니다².

http {
  upstream docker-fastapi {
    server fastapi:7000;
  }

  server {
    listen 80;
    listen [::]:80;
    server_name example.com;

    location / {
      proxy_pass http://docker-fastapi/;
      proxy_buffering off;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Host $server_name;
      proxy_set_header X-Forwarded-Proto $scheme;
    }
  }
}

nginx와 FastAPI를 사용하는 장점은 다음과 같습니다.

  • nginx는 reverse proxy로서 보안상의 이점을 제공합니다. 클라이언트는 실제 서버의 위치나 상태를 알 수 없으며, 서버도 클라이언트의 실제 IP를 알 수 없습니다¹.
  • nginx는 event driven 방식으로 작동하기 때문에, 많은 요청을 빠르게 처리할 수 있습니다. nginx는 요청을 받아서 다른 작업자에게 전달하기만 하고, 바로 다른 요청을 받을 수 있습니다¹.
  • FastAPI는 ASGI 방식으로 작동하기 때문에, 비동기적으로 요청을 처리할 수 있습니다. FastAPI는 요청을 받아서 파이썬 코드를 실행하고, 결과를 반환합니다¹.
  • FastAPI는 자동 문서화 기능을 제공합니다. FastAPI는 파이썬 타입 힌트와 OpenAPI 스키마를 사용하여 API 문서를 생성합니다³.

FastAPI 개발환경 셋팅으로 배우는 nginx와 웹서버의 관계에 대해 간단히 설명드렸습니다. 더 자세한 내용은 다음의 링크를 참고해주세요.

 

(1) FastAPI 개발환경 셋팅으로 배우는 nginx와 웹서버의 관계 - 벨로그. https://velog.io/@ddhyun93/FastAPI-개발환경-셋팅으로-배우는-nginx와-웹서버의-관계.
(2) window 에서 nginx + FastAPI 서버 환경 구축하기 - 벨로그. https://velog.io/@3436rngus/window-에서-파이썬-서버-환경-구축하기.
(3) 1-06 Svelte 개발환경 준비하기 - 점프 투 FastAPI - WikiDocs. https://wikidocs.net/175833.

(4) 가장 빠른 머신러닝 앱 배포하기 | fastapi, gunicorn, nginx https://roseline.oopy.io/dev/gunicorn-nginx-fastapi-deploy-on-lightsail

 

B로그0간

개발 관련 글과 유용한 정보를 공유하는 공간입니다.