15P by whatsup 4달전 | favorite | 댓글 1개

배포 시점에 급상승하는 API Latency 해결하기 - Djagno + Gunicorn 사례

  • Backend 시스템이 Django + Gunicorn 으로 구성되어 있었음
  • 배포를 할 때마다 API Latency가 급격하게 상승하는 문제를 발견하게 되었음
  • Gunicorn의 원리를 살펴보니, Cold Start가 되는 부분들이 존재
  • Django 내부 코드를 분석해보니 master worker process에서 fork를 할 때, preload 옵션을 주었음에도 일부 사전 로딩이 안되는 요소들을 발견하여 문제를 해결

배운점

  • Django와 같이 많은 사용자들이 사용하는 웹 프레임워크는 대부분의 동작들이 높은 신뢰성을 가지고 있어, 실제로 사용하는 사용자도 그럴 것이라 예측하는 경향이 있음
    • 그러나 실제 코드를 보았을 때, 문제가 되는 코드가 있는 것을 발견하였고, 사용하는 프레임워크를 맹신하면 안된다는 점을 배울 수 있었음
  • API Latency 문제를 해결하는 과정은 적절한 문서 부족 + 내부 구조 및 동작에 대한 깊이 있는 이해 부족 + 오픈 소스 프로젝트의 코드 베이스를 깊이 파고드는 것을 꺼리는 점 때문에 손쉽게 파악하기 어려웠음
    • 이 과정에서 복잡한 문제가 여러가지 얽혀있어 손쉽게 파악하기 어려웠던 점도 존재
    • 결국 Django 내부 코드를 살펴보면서 해결할 수 있었음
    • 이 과정에서 사용하는 Django 도구에 대한 이해를 더 높일 뿐 아니라, 내부 코드를 살펴보는 것이 일부 어려운 문제 해결책을 찾는 데 도움 될 수 있다는 점을 배울 수 있었음
  • 문제의 근본 원인을 파악하는 것이 중요하다.
    • Health Check의 성공 조건을 더 여러 번 혹은 오랜 시간으로 조절하는 방법으로 API Latency 발생 빈도수는 낮출 수 있지만, 근본적인 문제 해결은 하지 못했을 것임
  • 집단 지성을 이용하면 조금 더 빠르게 집중해야 하는 포인트들과 다양한 지식을 얻을 수 있다
    • API Latency와 관련한 문제를 조직에게 빠르게 공유했고, 다양한 엔지니어들이 문제라고 추정되는 의견들을 주었음
    • 이런 의견들을 빠르게 취합하고 어디를 집중해서 보면 좋을지 지식들을 빠르게 습득할 수 있었음
  • 문제를 해결하기 위한 증상 재현 환경을 세팅하는 것은 중요하다
    • 로컬에서 동일한 문제를 재현시키는것에 성공했고, 이를 통해 문제가 잘 해결되었는지 확인할 수 있었음
    • 문제 해결을 위한 증상을 재현의 중요성을 인식할 수 있었음

링크 타고 들어가보니 포스팅 내용이 굉장히 좋네요.