https://xetown.com/rxe_file/874593
위 위젯에서 api로 부터 받아온 값을 캐시에 저장해서 캐시만료시까지 api 에서 새로운 값을 받아오지 않고 계속 이용합니다.
아무리 찾아도 XE의 경로안에서 관련 파일을 못찾겠는데요.
어디에 저장을 해 두었다가 요청시 사용하는 것인가요??
https://xetown.com/rxe_file/874593
위 위젯에서 api로 부터 받아온 값을 캐시에 저장해서 캐시만료시까지 api 에서 새로운 값을 받아오지 않고 계속 이용합니다.
아무리 찾아도 XE의 경로안에서 관련 파일을 못찾겠는데요.
어디에 저장을 해 두었다가 요청시 사용하는 것인가요??
따로 있지 않다면 그럼 해당 파일에 정보를 제가 확인하고 싶을때 확인이 되지 않는 건가요?? 요즘 값이 NUll 로 출력되는 경우가 잦아서 매칭 되는 파일을 좀 열어보고 싶어서요. 저흰 mamcached 를 사용합니다.
$oCacheHandler = CacheHandler::getInstance('object');
개별 파일로 존재하는게 아니군요. 흠.. 그럼 위젯에서 불러온 값이 올바른 캐시값이라고 판단하는게 좋겠군요. 특정한 상황에서 값을 가져오지 못한 상태 Null 로 저장이 되었다고 봐야 겠습니다.
저는 파일 형태라면 혹시 제대로 저장된게 잘못 불러오는 건가 하는 것을 확인해 보고 싶었는데 그럴 필요는 없는 상황인 듯 하네요.
api에서 가져올때 api측에서 갱신된 시간과 그리고 공기지수 값이 가져오게 되는데 Null 값이 출력될때는
09:00 / Null / Null 의 값으로 출력이 되더라구요. 시간은 어찌 고정된 09:00시 를 표시하는지...
캐시에 저장하고 다시 불러오는 루틴은 매우 안정적입니다. 가끔씩 api에서 데이터를 제대로 못 가져올 때 캐시에 null이 저장되고, 그걸 그대로 불러다 쓰니까 한동안 null값이 유지될 가능성이 훨씬 높습니다. api에서 불러온 데이터를 가공하여 캐시에 저장하는 부분을 눈여겨보시기 바랍니다. null값이 있을 경우 캐시에 저장하지 않도록 조건을 걸어야 합니다.
한국 시간이 국제 표준시보다 9시간 빠르기 때문에, 0 또는 null을 시간 데이터로 취급하고 한국 시간으로 변환하면 09:00이 나옵니다.
제가 접속해 보면 x86과 웹지기님 사이트 모두 날씨가 정상적으로 나옵니다. 웹지기님 사이트는 위치까지 꽤 정확하게 나오고요. 혹시 특정 지역의 날씨만 못 불러오는 게 아닌지 의심이 되기도 하는군요.
x86은 카페24 가상서버인데, 요즘 카페24에서 외부 api 연동하는 것이 원활하지 않다는 제보가 있기는 합니다. 이것 때문에 오류 발생 확률이 늘어날 수도 있겠네요.
api.func.php 소스를 보니 1) api에서 데이터를 가져오는 데 실패하고 2) 기존에 캐시된 데이터가 없는 경우, 즉 처음 접속하는 시점에 api 연동이 제대로 되지 않으면 대부분 빈 값으로 캐시에 저장되고, 이후에도 계속해서 캐시에 저장된 빈 값을 그대로 쓰는 것 같습니다.
공기정보만 보시면 됩니다.
좋음 으로 표시되는 경우 실제 값이 있어 좋음일 수 있고 아닐수 있어서 클릭을 해 보셔야 합니다.
좋음 이라고 클릭해서 실제 값을 보면 Null 인 경우는 값이 없는 경우 입니다.
공기질 값이 0인 경우도 기준치 이하라서 좋음으로 표시가 되요.
지역하고 상관 없는 것은 제가 확인했습니다. 현위치를 사용치 않으면 중구 필동의 값을 가져오는데 마찬가지로 NULL 이 출력되는 경우가 굉장이 많습니다.
- 캐시파일을 재생성 하거나 , 해당위치의 값을 처음으로 가져오가나 하는 경우는 오히려 문제가 없는 것 같습니다.
- 이미 캐시된 값을 가지고 있다가 다시 갱신되는 시점에서 문제가 발생하는 것 같은 생각이 들고 있습니다.
X86은 지금 캐시가 길게 잡혀 있을 겁니다.
저희는 이를 극복하기 위해 10분으로 줄여 놓았습니다.
api.func.php파일 상단에 if(!defined('__XE__')) exit(); 이걸 넣으면 도움이 될지 모르겠지만
일단 넣어보려구요 ㅡㅡ;
이건 상관이 없네요. 이것 넣어도 값이 Null 이 되는 상황이 발생하네요.
일단 저희는 제작자분이 검토해주시기 전까지 극복을 해보려고 캐시 시간을 10분으로 해서 Null 값을 가지더라도 10분 후에 다시 제대로 된 값을 가져올 수 있게 해 놓았습니다.
5초로 늘렸는데 마찬가지더라구요. 캐시유지시간을 30분으로 길게 해 놓으면 null 상태의 빈도가 오히려 더 잦아지더라구요.
이게 단순 api 로 가져올때 통신 문제로 못가져온다는 느낌을 받지 못하는게.
캐시파일 재생성시는 실패하는 적이 한번도 없습니다.
그리고 일부러 수동으로 지역을 리스트에서 골라서 직접 api로 부터 받아오게 해보면 잘 받아옵니다.(물론 캐시된 지역이 아니라야죠..)
캐시 만료시점에 새로 뭔가 다시 가져올때 못가져오는건지 아니면 무엇때문인지 캐시 만료시 동작하는 순간 뭔가 좀 이상합니다.
아마도 정확한 경로가 위젯 소스에 박혀있지 않을까요?
만약 XE의 CacheHandler를 활용한다면 특정 경로에 캐시파일이 따로 있는 게 아니라 apc, memcached 등 XE에서 설정한 오브젝트 캐시에 저장될 수도 있습니다.