Flask 4

🚀 Google Cloud Run 비용 절감 및 서버 자동 종료 문제 해결

📌 상황: Cloud Run 인스턴스가 예상보다 많은 비용을 차지🔍 문제 발견Google Cloud Billing을 확인해보니 예상보다 많은 비용이 청구됨.사용자가 요청을 보낸 후 바로 서버가 종료되길 원했지만, Cloud Run 특성상 15분 동안 유지됨.즉, 1분만 사용해도 15분+ 추가 시간만큼 비용이 발생하는 상황 🚨예상보다 비용이 많이 나와서 서비스 지속 시 적자가 날 가능성이 있음.🔥 문제 원인: 서버가 즉시 종료되지 않음서버 종료를 명확히 하는 코드가 없었음.Cloud Run의 자동 스케일링 정책 때문에 사용자가 없어도 15분 동안 인스턴스가 유지됨.os._exit(0)을 사용하여 서버를 종료하려 했지만, Flask 프로세스만 종료되고 Cloud Run 컨테이너는 종료되지 않음.Clo..

Flask 서버 시작 시간 최적화하기: 지연 로딩(Lazy Loading) 전략

문제 상황  Flask 서버를 운영하면서 가장 큰 문제점 중 하나는 초기 시작 시간이 너무 오래 걸린다는 것입니다. 특히 AI 모델을 사용하는 서버의 경우, cv2, numpy, torch 등 무거운 라이브러리들의 import 시간이 상당합니다.      import cv2import numpy as npimport torchfrom PIL import Imagefrom openai import OpenAI# ... 기타 무거운 라이브러리들      이러한 방식은 서버가 시작될 때 모든 라이브러리를 로드하므로, 단순한 health check나 WebSocket 연결과 같은 가벼운 요청도 서버가 완전히 로드될 때까지 기다려야 했습니다.  해결 방안: 지연 로딩 전략  이 문제를 해결하기 위해 지연 로딩(L..

Socket.IO 클라이언트가 메시지를 일부만 수신하는 문제

문제 설명:Flask-SocketIO 기반의 서버와 Node.js 클라이언트를 사용하여 WebSocket으로 데이터를 송수신하는 시스템을 개발 중입니다. 서버는 클라이언트로부터 이미지를 업로드받고, 처리 후 각 클라이언트에 실시간으로 스트리밍 응답(gpt_response 이벤트)을 전송문제는 서버에서 각 클라이언트의 SID에 맞춰 메시지를 전송했음이 로그에서 확인되지만, 일부 클라이언트는 메시지를 수신하지 못하는 상황이 발생합니다. 예를 들어, 5개의 클라이언트를 실행했을 때 서버는 모두에게 메시지를 전송했지만, 클라이언트 로그에서는 2~3개만 응답을 받는 문제가 있다.서버 환경:Flask-SocketIO와 gevent를 사용 중이며, 메시지를 각 클라이언트의 SID에 맞춰 전송합니다.flask_serv..

flask 서버 Docker로 패키징

Flask 애플리케이션을 Docker로 패키징하기클라우드에 서버를 실제로 올리기 위해 여러 가지 방법이 있지만, 저는 Google Cloud Run을 선택했습니다. 그 이유는 Google Cloud Run이 서버리스 환경이어서 별도의 요청이 없으면 비용이 들지 않는다는 점이 가장 매력적이었기 때문입니다.Google Cloud Run에 배포하려면 먼저 Flask 코드를 Docker로 패키징해야 합니다. 여기서는 제가 사용한 Docker로 패키징하는 방법을 정리해보겠습니다.사전 준비Docker 설치Windows를 사용하는 경우 WSL2 설치Dockerfile 작성Docker로 패키징하기 위해서는 Dockerfile만 있으면 됩니다. 아래는 제가 작성한 Dockerfile의 내용입니다:dockerfile코드 ..