본문 바로가기

Python/FastAPI

(4)
간단한 웹소켓 부하 테스트 비교 FastAPI vs Golang 서론현재 근무 중인 회사에서 수행하는 프로젝트로 LAN을 구축한 후 셀러론 N4505 CPU로 구동되는 서버로부터 클라이언트와 웹소켓 통신을 하는 서비스가 있다. 이 서비스의 가장 중요한 목표는 서버에서 브로드캐스트를 진행할 때 모든 클라이언트가 싱크를 맞춰 "동시에" 반응해야 한다는 것이다. 이를 위해 FastAPI를 사용해 웹소켓 연결을 관리했었는데 문제는 필드 테스트에서 싱크가 깨지는 것으로 체감이 되었기 때문이다. 환경이 제한적이라 현장에서는 모니터링을 제대로 할 수 없었는데, 혹시 파이썬 자체의 한계일까 싶어서 go와 비교를 하기로 했다.스크립트 준비웹서버 부하를 위해선 많은 도구들이 제공되고 있지만 이 포스트에서는 도구 없이 스크립팅으로 측정을 해볼 것이다.FastAPI 코드먼저 이 포스트의 ..
[FastAPI] 웹소켓을 다룰 때 주의점 - 공식 예제 개선하기 이 포스트에서는 FastAPI 공식 문서에서 보여주는 웹소켓 연결 예제를 보고 이를 개선하도록 한다. 이 세상 어딘가에서는 분명 FastAPI로 여러 클라이언트로부터 웹소켓 연결을 하려는 경우가 있을 것이다. FastAPI 공식 문서에서는 웹소켓 연결 방법에 대해 이런 예제가 우릴 반겨준다.  그리고 여러 웹소켓 연결을 관리하기 위해서 아래와 같이 웹소켓 연결을 모아두는 ConnectionManager를 정의하고 있다.  하지만 이 코드에는 여러 문제가 있다. 문제가 있는 코드를 공식 문서에 걸어놓다니 참 야속할 따름이다. 어떤 문제가 있는지 보고 개선해 보도록 하자.Race Condition이 발생함내가 생각하는 ConnectionManager의 가장 큰 문제점이다. 클래스에서는 active_conne..
나만의 STT 서버 만들기 feat. OpenAI Whisper 이 포스트에서는 OpenAI에서 제공하는 STT 모델인 whisper를 사용하여 FastAPI로 작성된 서버로 오디오 파일을 받아 STT 작업을 수행해 본다. Whisper Whisper는 Chat-GPT를 만든 OpenAI에서 오픈소스로 공개하는 STT 라이브러리이다. 오픈소스지만 OpenAI에서 만들어서 그런지 상당히 훌륭한 성능을 보여주고 있다.  https://github.com/rtzr/Awesome-Korean-Speech-Recognition GitHub - rtzr/Awesome-Korean-Speech-Recognition: 한국어 음성인식 STT API 리스트. 각 성능 벤치마크.한국어 음성인식 STT API 리스트. 각 성능 벤치마크. Contribute to rtzr/Awesome-..
FastAPI 서버와 다양한 서비스 비동기 처리하기 이 포스트에서는 하나의 앱에서 FastAPI와 다른 서비스를 같이 비동기로 처리하는 방법에 알아본다.예시 시나리오 센서를 제어하고 데이터를 처리하는 루틴이 있고 이 루틴에서 실시간으로 들어오는 데이터를 처리하여 FastAPI로 들어오는 클라이언트 요청에 대해 적절한 결과를 반환하려고 한다.첫 번째 시도 - 실패첫 시도는 다음과 같이 센서 처리와 API 서비스를 async 함수인 코루틴으로 만들어 __main__에서 asyncio.run()으로 묶어 실행하도록 했다. 하지만 결과는 기대와 달리 센서 코루틴이 먼저 호출되면 API가 호출되지 않았다. 무슨 문제가 있었을까?센서 서비스 로직 살펴보기일단 센서 코루틴은 완전하게 작동함을 파악할 수 있었다. 센서 코루틴은 실행하지만 API 코루틴은 실행되지 않는 ..