슈퍼 캐시 v1.3.3

조회 수 1025 추천 수 9 댓글 17

 

supercache.jpg

 

"로딩 속도가 안드로메다로 날아갑니다!"

 

 

변경내역 1.3.3

 

- Memcached 사용시 캐시를 비울 때 불필요한 에러 메시지가 표시되는 문제 수정

  (실제로 캐시를 비우는 데는 지장이 없었습니다. 잘 해놓고 에러를 뿜을 뿐...)

- XE 1.8.0에는 Mobile::isMobileEnabled() 함수가 존재하지 않아 치명적인 오류를 일으키는 문제 수정

  (여전히 XE 최신버전을 권장합니다.)

- 일부 위젯 캐시가 자동으로 갱신되지 않는 문제 수정

- 상자 위젯 사용시 디자인이 약간 달라지는 문제 수정

- 전체화면 캐시 사용시 로그인 실패 메시지 등이 다른 사용자에게도 표시되는 문제 수정

- 페이징 캐시 사용 기준을 최소 1건에서 0건으로 조정할 수 있도록 변경

 

변경내역 1.3.2

 

- 안전을 위해 대부분의 위젯은 캐싱하지 않는 것을 기본값으로 함

- 일부 모듈에서 위젯 캐시를 사용하지 않도록 설정할 수 있도록 함

 

변경내역 1.3.1

 

- 모바일 및 푸시앱 처리 개선

- 캐시 비우기 단추 추가

 

변경내역 1.3.0

 

- 모바일, 태블릿 및 푸시앱 처리 개선

- 서드파티 자료에서 연동할 수 있도록 트리거 제공

    - supercache.storeFullPageCache (before)

    - supercache.fetchFullPageCache (after)

- 새 글 등록시 해당 게시판을 참조하는 위젯이 자동으로 갱신되는 기능 추가
- 캐시 사용시 일부 모듈에서 commentItem 클래스가 존재하지 않는다고 오류를 뿜는 현상을 고침

  (슈퍼 캐시의 문제는 아니지만, 캐시 사용 환경에 적응하지 못하는 서드파티 자료가 많아서 ㅠ)

- SimpleXML이 설치되지 않은 환경에서 치명적인 오류 수정

- 모든 종류의 캐시에 스탬피드 방지 기능 기본 탑재

 

알려진 문제

 

안드로이드 푸시앱 모듈이 설치된 사이트에서 전체화면 캐시를 사용하면 모든 사용자의 알림 설정이 초기화된다는 제보가 있습니다. 원인을 알 수도 없고 특별한 대안도 없으니 이 문제가 해결될 때까지 푸시앱에서는 전체화면 캐시를 사용하지 않도록 설정해 주시기 바랍니다. (전체화면 캐시 설정 화면에서 PC, 모바일, 푸시앱, 로봇을 각각 따로 선택할 수 있습니다.)

 

캐시를 사용하는 환경에서 오작동하는 서드파티 모듈이나 애드온이 종종 발견되고 있습니다. 이것은 XE에 내장된 CacheHandler 기능을 잘못 사용하는 해당 자료의 버그이며, 슈퍼 캐시 모듈에서 고쳐줄 수 없습니다. 만약 이 문제 때문에 사이트 이용에 지장이 있다면 캐시 방식을 default로 변경하시기 바랍니다. default를 선택하면 슈퍼 캐시 이외의 모듈이나 애드온에서는 CacheHandler가 동작하지 않게 되므로 대부분의 버그를 차단할 수 있습니다.

 

깃허브에서 최신 버전 다운로드

 

기진곰

profile
GitHub @kijin 사람을 위한 인터넷 생태계의 발전에 많은 관심을 갖고 있습니다.
우리가 만들어 가는 XE의 새 이름, 라이믹스(Rhymix) 프로젝트에 참여하고 있습니다.
오픈소스 도로명주소 검색서버 및 API Postcodify를 개발, 운영중입니다.
국내외 서버 및 클라우드서버 세팅, 이전, 튜닝해 드립니다.
  • ?
    짱입니다. 아직 공홈 쉬운설치에는 안왔네용 ㅎㅎ
  • ? profile
    공홈은 오늘 제가 다른 자료들도 왕창 업데이트하는 바람에 게시요청이 밀려서 시간 좀 걸릴 거예요 ㅋㅋ
  • ?
    아항 항상 감솨해요
  • ?

    오~ 재생성시에 에러 메세지 없이 수정되었습니다로 나오네요.. 감사합니다.

  • profile
    패치 감사합니다! ㅎㅎ
  • ?
    수고하셨습니다~
  • profile
    기진곰님 안녕하세요. xe푸시앱 개발자 단희아빠입니다. 웹지기님을 통해서 설정 초기화 문제에 대해 들었는데, 해당문제의 원인을 제 생각에는 찾은 것 같은데, 혹시 몰라서 문의드립니다.
    푸시앱 동작 방식은 다음과 같습니다.

    우선 앱단에서 웹뷰접속과 동시에 httpurlconnection으로 서버에 post접속하면서 fcm reg_id값을 서버로 넘겨주게 됩니다(api -> procAndroidpushappRegIn, type=controller). 그러면 푸시앱 모듈 procAndroidpushappRegIn에서 해당 reg_id값으로 각종 접속처리를 하고 다시 앱단으로 여러가지 정보를 넘겨주게(response) 됩니다.
    문제는 어떤 사용자가 앱을 처음으로 설치하여 실행했을 때, post접속하면서 reg_id값을 넘겨주면 서버측에서는 최초 실행이므로 db에 설정 초기값을 넣게 됩니다.
    그런데 문제는 이러한 과정을 (여기서부터는 제생각입니다.) 슈퍼캐시가 캐시로 저장해서 다른 회원이 접속할 때도 똑같이 동작하는 것 같아요. 그래서 앱을 처음실행한 회원 이후로 푸시앱을 실행하는 모든 회원에게 같은 동작이 이루어져서 db에 설정 초기값이 일괄적으로 저장되는 것이죠.

    결론은 제가 아직 숙련되지 못한 개발자라서 잘못 코딩한 것 같은데,
    혹시 슈퍼캐시가 웹의 프론트앤드 동작 곧 페이지 디자인과 컨텐츠만 캐시하는 것인지, 아니면 백앤드 동작까지 캐시하는 것인지 궁금합니다. 왜냐하면 위에서 언급한 초기post접속은 페이지 표시와는 상관이 없는 백앤드 동작이라고 생각해서요. 제가 잘못생각한 것일 수도 있구요...
    그리고 괜찮으시다면 위의 동작과정에서 제가 주의해야 할 점이나, 슈퍼캐시와 푸시앱이 충돌되지 않게 하려면 어떤 점을 주의해야 하는지 알려주시면 문제해결에 도움이 될 것 같습니다.
  • profile profile

    슈퍼캐시는 GET 요청만 캐싱합니다. GET이 아닌 요청은 건너뛰도록 되어 있으므로 DB에 설정값을 넣는 요청이 캐싱될 것 같지는 않습니다. 또한 위험하다고 경고가 붙어 있는 옵션을 일부러 선택하지 않으면 act값이 존재하는 요청도 모두 건너뜁니다. (주로 캐싱이 필요한 메인화면, 게시판 목록, 글읽기 화면 등은 act값이 없습니다.) 웹지기님이 이 위험한 옵션을 켜시지는 않았을 테니, act값이 있는 POST 요청으로 reg_id를 전달하는 백엔드 동작은 절대 캐싱되지 않는다고 보셔도 됩니다.

     

    따라서 다른 사용자의 정보가 잘못 전달된다면 웹뷰 최초 접속시 표시되는 HTML 메인화면 소스에 뭔가 캐싱되어서는 안 되는 내용이 들어 있기 때문일 것입니다. 혹시 메인화면 소스에 reg_id 값이나 그 밖의 설정이 박혀 있나요? 아니면 소스를 참조하지 않고 어플리케이션이 자체적으로 기억하고 있나요?

     

    한 가지 의문이 드는 점은 만약 엉뚱한 reg_id가 캐싱되어 전달되었다고 해도 왜 해당 reg_id를 가진 사용자뿐 아니라 다른 모든 사용자의 알림 설정이 초기화되었냐는 것입니다. 회원 계정과 reg_id가 연결되는 방식에 따라서는 이렇게 의도치 않은 동작을 할 수도 있겠지만, 저는 푸시앱의 작동 구조를 잘 모르니 단희아빠님이 좀더 살펴봐 주시면 좋겠습니다.

     

    처음 이 이슈를 들었을 때는 혹시 UPDATE (설정) WHERE regid = $regid 이런 종류의 쿼리에 $regid가 NULL로 들어가면서 WHERE절이 비어버려 모든 레코드가 일괄 업데이트된 게 아닐까 했는데, 관련 쿼리를 찾아보니 notnull로 되어 있더라구요. 그래서 이것도 아닌 것 같고...

  • profile profile

    저희 사이트 경험적으로는 아래쪽에 언급하신 것이 가장 유력해 보입니다. 저는 기술적으로는 잘 모르지만 정확히 해당 regid 만 해당 설정으로 db에 밀어 넣어야 하는데 특정한 순간(아마 비회원의 화면이 캐싱된순간) db로 밀어 넣을때 regid를 특정하지 못하거나 하는 등의 이유로 모든 회원에게 같은 db를 밀어 넣는 현상이 벌어지는 듯 합니다.

    단희아빠님께서 기진곰님을 비공개 깃허브에 초대를 해주시는건 어떨까요?

    사실 이제라도 이부분 검토해 주시는 것에 다행이라고 생각합니다. 이런 문제의 클레임은 생각하시는 것보다 운영자에게는 큰 부담으로 작용되는 클레임이라서 원인을 제거하고 가는 것이 맞다고 봅니다.

    지금은 슈퍼캐시에서 푸시앱일경우  동작 자체를 원천적으로 막아주어 이런 현상이 없지만 어떤 사이트에서 이러한 내용을 모른채 옵션에 푸시앱 사용을 제한 하지 않는 경우도 있을 수 있구요.

    또 지금 가장 큰 문제는
    로직이 버전별로 너무 다양하다는 것도 검토하는데 어려움이 계실지도 모르겠습니다. 제가 저희 회원들 혹은 비회원들 단말기를 분석해 보니 여러 버전이 혼재해 있고 비로그인으로 이용하고 있는 단말기도 몇 몇 있었습니다. 이러한 단말기들 중 특정 버전에서 캐싱될 경우 문제가 발생한다던지 이런 난해한 상황일 수도 있다는 가설도 생각하게 하구요.

    사실 저처럼 운영자가 앱을 매일 사용하면서 댓글알림을 수신하고 있는 상태라면 이러한 푸시알림 설정 초기화가 되어도 인지하기 쉽지만 그렇지 않은 경우는 이런 상황에 있는데 회원들 제보가 없어 모르는 경우도 있을 거라는 추측도 해봤습니다. 왜냐면 이게 특정한 랜덤한 시점에서 발생하는 문제라 모든 사이트에서 100% 발생하거나 자주 발생하지는 않기 때문입니다.

  • profile profile
    다시 보니 푸시앱 모듈 트리거 triggerBeforeDisplay에 $_SESSION["reg_id"] 를 사용하면서 설정값을 가져오는 로직이 있고, javascript 의 param에 표시하는 로직이 있는데, 이것때문에 문제가 발생한 듯 보입니다.
    이 부분은 사실상 (상당히) 이전 사용자들 호환을 위한 부분으로서 지금은 사용되지 않는 부분인데,
    이 부분을 없애버리면 아마도 슈퍼캐시 모듈과의 충돌이 없지 않을까 생각해봅니다.
  • profile profile

    그 부분도 의심이 되어서 전체화면 캐시 사용시 푸시앱의 display.before 트리거를 제거하도록 조치를 해두었습니다. 그러나 이 패치가 처음 들어갔을 때는 모바일 및 푸시앱 예외처리가 완벽하지 않던 시절이라 정확한 진단이 어려웠습니다. 해당 트리거만 제거하면 괜찮을지, 그리고 그 트리거가 아예 작동하지 않는 경우 또다른 문제가 생기지는 않을지 검토를 부탁드립니다.

  • ?
    수고하셨습니다.
  • profile
    정말 잘쓰고있어요~!! 빨라져서 놀랐습니다!
  • ?
    좋은 자료 감사합니다.
  • profile
    친절한 설명과 자료 잘받아갑니다 감사해요!!
  • ?
    검색 결과 캐시와 관련한 문제인 것 같아서 리포트 합니다.

    검색 결과 캐시 사용시
    1. 계속검색 버튼을 클릭하여 검색한 후에 다시 검색어 입력하여 검색하면 계속검색 버튼이 나타나지 않습니다. (아마도 계속검색 버튼이 없는 마지막 검색 결과 화면을 캐싱해서 그런듯 합니다.)

    2. 검색 결과 캐시 사용이 "예"인 경우 검색어 검색후 계속검색 버튼을 클릭하여 검색하면 계속검색 버튼이 사라집니다. 즉 계속검색 버튼이 한번만 나타나는데, 검색 결과 캐시 사용을 "아니오"로 하면 계속검색 버튼이 상당히 여러번 나타납니다. (게시물이 매우 많은 게시판입니다.)

    [Basic Information]
    rhymix_version : 1.8.34
    date : 2017-03-20 02:40:39 +0900
    php : 7.0.15-0ubuntu0.16.04.4 (64-bit)
    server : nginx/1.10.3
    os : Linux 4.4.0-62-generic
    [System Settings]
    db.type : mysqli (innodb, utf8mb4)
    db.version : 10.0.29-MariaDB-0ubuntu0.16.04.1
    cache.type : memcached
    [PHP Settings]
    session.auto_start : 0
    max_file_uploads : 50
    memory_limit : 128M
    post_max_size : 100M
    upload_max_filesize : 100M
    extensions : calendar, cgi-fcgi, curl, dom, exif, fileinfo, ftp, gd, gettext, hash, iconv, json, libxml, mbstring, memcache, memcached, mysqli, mysqlnd, openssl, pcre, pdo, pdo_mysql, phar, posix, readline, shmop, simplexml, sockets, sysvmsg, sysvsem, sysvshm, wddx, xml, xmlreader, xmlwriter, xsl, zend opcache, zlib
  • ?
    슈퍼캐시 모듈은 1.3.4 입니다.