포럼
DB로 포인트 업데이트시 실제 사이트에 적용되는 타이밍은 언제인가요?
2016.08.09 20:28
xe_point 테이블의 point를 mysql 쿼리로 갱신했을 때 실제 사이트에 적용되는 타이밍은 언제인가요? (포인트 수치와 레벨 아이콘 적용 타이밍)
예를들어 캐시파일 재생성이라든지 해당 유저가 로그인을 했다든지..
밤12시라든지 이런게 알고 싶습니다...
댓글 8
-
기진곰
2016.08.09 21:29
-
댑펑
2016.08.09 22:02
기진곰님 답변 감사드립니다. 사정상 여러 처리를 해야 해서 직접 DB수정을 하는 방법을 사용하고 있습니다.
캐시 파일 삭제시 갱신이 되는 군요. 다른 트리거는 없을까요? 유저가 로그인을 바뀌지 않는다면 유저가 로그인시에 바뀌게끔 하려면 어떻게 해야 할까요..?
아니면 크론탭으로 point 폴더 전체를 1분마다 지워도 괜찮을까요?
-
기진곰
2016.08.09 22:09
로그인시 포인트를 준다면 갱신되겠지요. 그러나 캐시파일을 그대로 두었다면 DB에서 새로 지정한 포인트는 무시하고 예전 포인트 기준으로 변동될 가능성이 높습니다.
가능하면 DB에 직접 쿼리하지 말고 getModel('point')->setPoint() 함수를 사용하세요. 아니면 그 함수에서 캐시파일을 갱신해 주는 코드를 참고하여 캐시파일을 직접 갱신해 주세요. 어떤 방법을 사용하든 DB와 캐시파일을 동시에 갱신하지 않으면 나중에 문제가 생길 겁니다.
-
댑펑
2016.08.09 22:30
답변 감사드립니다.
setPoint 같은 xe 내부함수를 일반 php 파일에서 사용 할 수 있을까요?
-
기진곰
2016.08.09 22:37
define('__XE__', TRUE);
require_once 'XE경로/config/config.inc.php';
Context::getInstance()->init();이렇게 넣어 주면 다른 파일에서도 XE 함수를 자유롭게 사용할 수 있습니다.
-
댑펑
2016.08.09 22:45
저 세줄만 넣으면 자유롭게 사용이 가능하군요! 감사합니다.
그런데 다시 생각해보니 remote 상태로 db 갱신 작업을 하기 때문에 로컬에 해당 유저의 캐시파일이 없었네요...
제 생각에는 db로 포인트 갱신을 시키고 해당 유저에게 포인트 변화가 일어나는 작업(글 작성 및 댓글 작성)을 시키는 방법밖에는 없을 듯 합니다. 이런경우에도 문제가 되나요//?
(늦은밤 질문을 많이 드려 죄송합니다..마지막질문일듯합니다.)
-
기진곰
2016.08.09 22:54
위에서 거듭 말씀드린 것처럼, 해당 유저에게 포인트 변화가 일어나는 작업을 했을 때 님이 DB에 입력해 놓은 포인트가 아니라 캐시파일에 저장된 포인트를 기준으로 변경될 위험이 있습니다.
즉,
1. 유저에게 100포인트가 있음
2. DB에서 200포인트로 변경해줌
3. 유저가 글을 써서 10포인트를 얻음
4. 210포인트가 되어야 하지만 사실은 110포인트가 될 수 있음 -
댑펑
2016.08.09 22:57
답변감사드립니다.
db 갱신 작업을 캐시 파일을 참조하여 하는거네요..;;
게시판을 잘못 선택하셨네요.
일반적인 방법으로 포인트가 변경되었다면 즉시 적용됩니다. (글쓰기, 댓글쓰기, 추천 등)
DB에서 직접 수정했다면 files/member_extra_info/point 폴더 아래에서 해당회원의 포인트가 기록된 파일을 찾아서 삭제하거나 새 포인트를 넣어주어야 합니다. 이것을 하지 않으면 아무리 기다려도 갱신되지 않고, 해당회원이 나중에 글을 쓰는 등 다른 행동을 해서 포인트를 얻더라도 계속해서 이상하게 집계될 수 있습니다.
결론: DB를 직접 건드리면 귀찮은 일이 생깁니다.