반응형

오류 확인 배경

 django를 배포하고 프런트와 합치면서 테스트하는 과정에서 신기한 현상을 발견했다. 임시로 접속할 수 있는 페이지를 만들기 위해 local memory cache를 사용해 권한을 확인하고 있었고 해당 페이지 테스트하고 있었다.  

 

 그런데 페이지를 새로고침 할 때마다 인증이 잘 될 때도 있고 안 될 때도 있는 것이다. 정확히는 서버 cache에 쿠키의 cache가 없어서 권한이 없다는 경우와 정상적으로 있어서 잘 동작하는 경우, 이 두 경우가 새로고침 할 때마다 랜덤으로 반복되었다. 보통 동작이 되면 되고 아니면 아닌데 어떻게 새로고침할 때마다 랜덤으로 오류가 발생하는일이 벌어지는 걸까?

 

왜 이런 일이 벌어진 걸까?

 LocMemCache는 django를 동작하는 프로세스의 메모리에만 접근이 가능하다. 따라서 하나의 프로세스에선 문제가 없고 당연히 테스트 환경에서도 문제가 없다.

 

 하지만 우리가 배포하는 환경은 다르다. 보통 django를 배포할 때 gunicorn으로 worker를 1이상으로 세팅하여 배포하게 된다, 이러면 worker마다 mem이 다르기 때문에 cache가 있는 worker에서만 정상 작동하게 되는 문제가 발생한다.

 

마치 슈뢰딩거의 cache 랄까?

 

따라서 LocMemCache를 쓰지 말고 db cache를 사용하도록 하자. 

 

db cache로 변경하기

 먼저 cache 세팅을 변경해준다

# settings.py
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table',
    }
}

 

 그 다음 terminal에서 캐시 db 테이블을 생성해준다.

python manage.py createcachetable

 

반응형

+ Recent posts