[python] FastAPI pyCharm 에서 uvicorn으로 실행하는 방법

개요

 

주식 관련 정보를 키움증권api를 통해서 받아오는 서버를 운영중에 있는데 flask 로 end point를 제공하고 있습니다. 이번에 시스템 확장을 하면서 한국투자 KIS 에서 제공해주는 기능을 추가하기로 합니다. 그리고 flask를 걷어내고 FastAPI로 대체하기로 했습니다. 

 

Flask와 비슷한 구조를 가졌는데 기본적으로 비동기식으로 작성되어 있기에 웹 서버 구동시 빠른 성능을 보여준다고 합니다. 

이외에도 빠른 코드 작성, 적은 버그, 직관성, 쉬운 설계, 견고함, 표준을 기반으로 했다는 다양한 장점이 있다고 하는데 대세가 Flask 에서 FastAPI로 넘어간다고 하니 저도 넘어가려는 이유가 큽니다.

 

FastAPI에 대한 상세 설명은 공식 문서 페이지에서 확인하시기 바랍니다.

https://fastapi.tiangolo.com/ko/

 

FastAPI

FastAPI FastAPI 프레임워크, 고성능, 간편한 학습, 빠른 코드 작성, 준비된 프로덕션 문서: https://fastapi.tiangolo.com 소스 코드: https://github.com/tiangolo/fastapi FastAPI는 현대적이고, 빠르며(고성능), 파이썬

fastapi.tiangolo.com

본문

 

 

저의 파이썬 개발용 IDE 는 PyCharm을 사용중에 있습니다. 이외에도 훌륭한 IDE 툴들이 여럿있는데 다음에 한번 소개하는 시간을 가져보도록 하겠습니다. 지금까지 PyCharm 을 써왔었기 때문에 익숙해서 계속 사용중입니다.

 

Fast API 구동 뼈대를 만들고 이걸 실행시키려고 보니 서버를 통해서 구동되어야 하는 구조였습니다. 

uvicorn 은 매운 가벼운 ASGI 서버이고 FastAPI를 구동시켜줄 수 있습니다. 그리고 배포시 별도의 준비가 필요없이 실행만 시켜주면 되는데 빠르게 테스트를 하기 위해 PyCharm 안에서 바로 실행되는 방식을 알아보니 2가지가 있었습니다.

 

 

첫번째

 

먼저 선행되어야 하는 것은 uvicorn 라이브러리 설치해주는 것입니다. 

pip install uvicorn 을 통해 설치도 가능하지만 저는 IDE 상에서 제공해주는 설치 기능을 사용합니다. 궂이 이 화면을 띄우지 않아도 필요한 라이브러리가 없다는 메시지와 함께 설치 가능한 버튼이 나타나는게 PyCharm 의 장점입니다.

 

 

 

 

uvicorn 설치 후 실행 환경구성을 해줍니다. 작성된 코드 py 파일에서 마우스 우클릭 - Modify Run Configuration 을 통해 구성화면으로 이동합니다.

 

 

Choose target to run 에서 Script Path 대신 Module Name 을 선택해줍니다.

 

 

uvicorn 모듈을 선택해주고 Parameters 에 구동시킬 py 파일과 포트 정보를 넣어줍니다.

 

app 아래에 fastapiServer.py 파일이라면

 

app.fastapiServer:app --reload --port 8080 

 

이렇게 넣어주시면 8080 포트에서 FastApi 서버를 구동하게 되는 것입니다.

 

이렇게 정상적으로 구동된 모습을 확인하실 수 있습니다.

 

 

 

 

두번째

 

 

두번째는 main 을 통해 바로 수행시키는 방법입니다. 개발중에 단위 테스트용으로는 이 방식이 간편할수도 있습니다.

 

main 아래에 uvicorn 구동 코드를 작성해주면 됩니다.

 

import uvicorn

...

uvicorn.run(app, host="0.0.0.0", port=5000, log_level="info")

 

역시 정상적으로 구동되는 것을 확인하실수 있습니다.

 

 

마무리

기본적인 구성이 완료되었습니다. 주식, 증권 등 다양한 정보를 제공해주는 api들이 많고 또 이 정보를 통한 써드파티 앱들이 생겨나면서 저 또한 그 써드파티 앱을 만드는 주체이다 보니 빠르게 변해가는 환경에 적응하기가 어렵다는 생각입니다. 꾸준히 증진하고 구시대 유물들을 걷어내는 작업들을 계속해 나가면서 FastAPI 라는 신문물을 받아들이고 또 어떤 식으로 작성하면서 웹서버를 완성시켜 나가는지에 대해 꾸준히 포스팅해보도록 하겠습니다.