장고 기본 캐싱은 프로덕션에 쓰면 망함
https://docs.djangoproject.com/en/5.0/topics/cache/#local-memory-caching
Azure 에서 가입하면 무료로 주는 (제일 싼 Linux VM + 제일 싼 Postgresql) 조합에 블로그와 웹 개발 연습용 사이트를 배포해 두었다. 메모리 1GB 짜리 머신에다가, 파이썬이 워낙 메모리 많이 쓰기도 하고, 이메일 보내는 것 때문에 redis + celery worker 도 돌리고 있어서 약간 불안한데... 요 며칠 꼭 자고 일어나면 서버가 먹통이 되어 있는 것이다. 그래서 Azure 콘솔에 들어가서 리붓 하기를 3일... 뭔가 잘못되었다고 생각하고 syslog 를 눈에 불키고 뒤지기 시작.
답은 로그에 있다!
메모리 부족이었다. 그냥 프로세스를 죽이고 끝나기만 하면 좋을텐데, 프로세스를 죽이지 않고 서버가 죽어버렸다... 아니 정확히는 OOM Killer 가 프로세스 저격하긴 했는데, 그래도 못버티고 죽는다. 시간이 지나면서 계속 메모리 사용량이 늘다 죽는 이유가 뭘까 생각했더니 뭐 뻔하다. 장고에서 기본으로 제공하는 캐싱이 메모리 처묵처묵하다가 죽은듯... 문서에 이렇게 쓰여있는거 보고 불안하다 싶었는데, 검색엔진 크롤러가 긁어가는 정도로도 이럴 줄이야.
Note that each process will have its own private cache instance, which means no cross-process caching is possible. This also means the local memory cache isn’t particularly memory-efficient, so it’s probably not a good choice for production environments. It’s nice for development.