xe-core icon indicating copy to clipboard operation
xe-core copied to clipboard

DB 접속이 안정적이지 않은 경우 빈 값이 캐싱되는 문제

Open kijin opened this issue 7 years ago • 1 comments

DB 접속이 안정적이지 않은 경우 (호스팅 서버 장애, 서버 재부팅 직후 등) 빈 값이나 불완전한 데이터가 캐싱되는 문제가 있습니다. 그러면 DB 문제가 해소된 후에도 잘못 캐싱된 데이터를 계속 사용하게 되어 여러 가지 문제가 발생하는 것은 물론, 사용자가 문제의 원인을 찾기도 무척 어렵습니다.

특히 ModuleModel에서 이런 문제가 자주 발생합니다. 모듈 정보가 잘못 캐싱되면 홈페이지 전체가 404 오류를 뿜거나, 모듈 설정이 제대로 적용되지 않거나, 로그인이 되지 않는 등, 코어와 서드파티 전반에 걸쳐 다양한 부작용이 나타납니다.

if($oCacheHandler->isSupport())
{
    $oCacheHandler->put($cache_key, $output->data);
}

이런 구조로 되어 있는 코드가 많은데,

if($oCacheHandler->isSupport() && $output->toBool())
{
    $oCacheHandler->put($cache_key, $output->data);
}

이런 구조로 바꾸어서 잘못된 데이터가 캐싱되는 것을 방지해야 하겠습니다. 중간에 데이터를 가공하는 과정이 있는 경우에는 적당한 지점에서 $output->toBool()을 확인해 주고요.

kijin avatar Sep 26 '18 06:09 kijin

저도 비슷한 문제를 겪고 있습니다. 특정시간대 스토리지의 부하로 인해 DB Connection도 일시적으로 급격히 증가하는데 그때 로그인이 잘 안 되는 문제가 발생하고 있네요.

gaejabong avatar Oct 03 '18 15:10 gaejabong