# 배포 시점에 급상승하는 API Latency 해결하기 — Django + Gunicorn 사례

> Clean Markdown view of GeekNews topic #16283. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16283](https://news.hada.io/topic?id=16283)
- GeekNews Markdown: [https://news.hada.io/topic/16283.md](https://news.hada.io/topic/16283.md)
- Type: news
- Author: [whatsup](https://news.hada.io/@whatsup)
- Published: 2024-08-12T10:32:53+09:00
- Updated: 2024-08-12T10:32:53+09:00
- Original source: [medium.com](https://medium.com/p/7f7a1da7b0aa)
- Points: 15
- Comments: 1

## Summary

배포 시점에 API Latency가 급상승하는 문제를 해결하기 위해 Django와 Gunicorn의 내부 코드를 분석하여 Cold Start와 preload 옵션 관련 문제를 발견하고 해결한 사례를 다룹니다. 이 과정에서 프레임워크를 맹신하지 않고 내부 코드를 깊이 이해하는 것이 중요하다는 점과, 문제 해결을 위해 증상 재현 환경을 세팅하는 것이 중요하다는 교훈을 얻었습니다. 또한, 집단 지성을 활용해 다양한 의견을 빠르게 취합하고 문제 해결에 집중할 수 있는 포인트를 찾는 방법도 강조됩니다.

## Topic Body

#### 배포 시점에 급상승하는 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와 관련한 문제를 조직에게 빠르게 공유했고, 다양한 엔지니어들이 문제라고 추정되는 의견들을 주었음  
  - 이런 의견들을 빠르게 취합하고 어디를 집중해서 보면 좋을지 지식들을 빠르게 습득할 수 있었음  
- 문제를 해결하기 위한 증상 재현 환경을 세팅하는 것은 중요하다  
  - 로컬에서 동일한 문제를 재현시키는것에 성공했고, 이를 통해 문제가 잘 해결되었는지 확인할 수 있었음  
  - 문제 해결을 위한 증상을 재현의 중요성을 인식할 수 있었음

## Comments



### Comment 27959

- Author: aer0700
- Created: 2024-08-12T22:40:09+09:00
- Points: 1

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