플러팅 AI/Flask Server

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

Solo.dev 2024. 12. 13. 04:53

문제 상황

 
 

Flask 서버를 운영하면서 가장 큰 문제점 중 하나는 초기 시작 시간이 너무 오래 걸린다는 것입니다. 특히 AI 모델을 사용하는 서버의 경우, cv2, numpy, torch 등 무거운 라이브러리들의 import 시간이 상당합니다.

 
 
 
 
 
 

이러한 방식은 서버가 시작될 때 모든 라이브러리를 로드하므로, 단순한 health check나 WebSocket 연결과 같은 가벼운 요청도 서버가 완전히 로드될 때까지 기다려야 했습니다.

 
 

해결 방안: 지연 로딩 전략

 
 

이 문제를 해결하기 위해 지연 로딩(Lazy Loading) 전략을 도입했습니다.

 
 

 

  • 글로벌 변수 선언:
     
     
     

 

 
 

 

  • 라이브러리 로드 함수 분리:
     
     
     

 

 
 

 

  • 서버 초기화 로직 개:
     
     
     

 

 
 

 

  • WebSocket 연결 시 초기화:
     
     
     

 

 
 

개선 효과

 
 

 

  • 빠른 서버 시작

 

 
 

 

  • 서버는 필수적인 컴포넌트만 로드하여 빠르게 시작됩니다.

 

 
 

 

  • Health check와 같은 기본적인 API는 즉시 응답 가능합니다.

 

 
 

 

  • 효율적인 리소스 관

 

 
 

 

  • 실제로 필요한 시점에 라이브러리를 로드합니다.

 

 
 

 

  • 모리 사용을 최적화할 수 있습니다.

 

 
 

3. 개선된 사용자 경험

 
 

 

  • WebSocket 연결이 즉시 이루어집니다.

 

 
 

 

  • 클라이언트는 서버 준비 상태를 실시간으로 확인할 수 있습니다.

 

 
 

주의사항

 
 

 

  • 기화 상태 관리

 

 
 

 

  • 라이브러리와 모델의 초기화 상태를 잘 관리해야 합니다.

 

 
 

 

  • 타임아웃 처리가 필요합니다.

 

 
 

 

  • 러 처리

 

 
 

 

  • 연 로딩 중 발생할 수 있는 예외를 적절히 처리해야 합니다.

 

 
 

 

  • 클라이언트에게 현재 상태를 알려주어야 합니다.

 

 
 

결론

 
 

지연 로딩 전략을 통해 서버 시작 시간을 크게 단축하고, 사용자 경험을 개선할 수 있었습니다. 특히 AI 모델을 사용하는 서버에서 이러한 최적화는 매우 중요합니다. 필요한 시점에 필요한 리소스만 로드함으로써, 더 효율적인 서버 운영이 가능해졌습니.