WP Discourse 댓글 웹훅이 WP Rocket 캐시 새로고침을 트리거하지 않음

Wordpress에서 페이지 캐시를 어떻게 처리해야 하나요?

저희 사이트에는 WP-Rocket을 사용하고 있는데, 페이지 캐싱 (Cloudflare APO만 사용하는 경우에도 동일한 문제 발생) 때문에 댓글 수가 갱신되지 않고 있습니다. WP-Rocket *(그리고/또는 APO)*을 비활성화하고 해당 포럼 게시글에 답글을 작성해 검증해 보았는데, 댓글 수는 갱신되긴 하지만 불규칙하게 나타났습니다. 즉, 즉시나 예상처럼 바로 갱신되는 것이 아니었습니다.

그래서 웹훅을 추가하는 팁을 찾아 적용해 보았는데, 이렇게 하면 댓글 수가 안정적으로 갱신되었습니다.

하지만 페이지 캐싱이 켜진 상태 *(WP-Rocket 또는 APO)*에서 해당 웹훅을 사용하더라도, 누군가 포럼에 새 답글을 작성할 때 댓글 수가 갱신되지 않습니다.

핵심은 웹훅이 WP 환경을 제대로 트리거하여 캐시된 페이지의 새로고침을 유도하지 못하는 것 같습니다. 마치 매트릭스에 버그가 있는 것 같습니다. :grinning_face_with_smiling_eyes:

수정: 한 가지 더 추가하자면, WP-Rocket을 설정해 두었기 때문에 제가 Wordpress에 로그인된 상태에서는 페이지가 캐시되지 않습니다. 방문객에게만 적용됩니다. Wordpress에 로그인된 상태에서는 댓글 수가 갱신되는 것을 볼 수 있지만, 프라이빗 브라우저 모드로 방문객으로 있을 때는 갱신되는 것을 볼 수 없습니다.

나는 답을 가지고 있지 않지만, 여러분도 아시다시피 WP Rocket은 정적 복사본을 생성하고 PHP 및 데이터베이스 호출을 제거하려 하고 있습니다. 엄밀히 말해 캐시가 아니라, 그것은 정의의 문제라고 할 수 있습니다.

하지만 요즘 WP Rocket에는 많은 문제가 있으며, WordPress 사이트 자체를 고려할 때 이것은 아마도 가장 사소한 문제 중 하나일 것입니다.

음, 그렇게 작동해야 합니다.

Brandon007님, 문제를 설명해 주셔서 감사합니다. 제가 이해한 바로는 다음과 같습니다:

  • WP Discourse 플러그인은 댓글 수를 올바르게 업데이트하고 있습니다.
  • 댓글 수가 업데이트될 때 WP Rocket 캐시가 정리되지 않고 있습니다.

게시물 제목을 "WP Discourse Plugin Not Updating Comment Count"에서 "WP Discourse comment webhook does not trigger a WP Rocket Cache refresh"로 변경했습니다.

이 문제에 대한 기본적인 답변은 이것이 의도된 동작이라는 것입니다. WP Discourse 플러그인은 WP Rocket과 특정 통합 기능이 없으며, 가까운 미래에 이를 추가할 계획도 없습니다.

하지만 댓글 동기화 웹훅 콜백이 토픽 메타데이터(댓글 수가 저장되는 곳)를 업데이트한 후 실행되는 액션을 추가해 드릴 수 있습니다. 그러면 원하시는 캐시 정리 작업을 수행하는 자체 액션 콜백을 작성할 수 있습니다. 이 방식이 현재 상황에 도움이 될까요?

@Angus 맞아요!

코드를 작성하다 보면 헤맬 것 같긴 한데 하하, 혹시 가능하게 만들어 주실 수 있다면요. 그러면 저를 비롯한 다른 사용자들도 한 걸음 더 올바른 방향으로 나아갈 수 있을 거예요. 말씀하신 수정 사항 덕분에 캐싱 플러그인 종류와 관계없이 캐시를 정리하기 위한 사용자 측 코드를 추가할 수 있게 되는 것 같은데, 특정 제품 하나에 집중하는 것보다 훨씬 나은 것 같습니다. 개발 사이트에서 여러 캐싱 방법을 시도해 봤지만, 어쨌든 결과는 모두 같았거든요.

그러니 계속 진행해 주십시오, 존경하는 분. 그리고 답변해 주셔서 감사합니다.

안녕하세요, Angus. 이 건에 대해 아직 조사 중이셨는지 궁금합니다.

추가로 말씀드리고 싶은 것이 있습니다. 네이티브 워드프레스를 사용하고任何形式的 페이지 캐싱을 적용하는 경우, 댓글이 작성되면 페이지 캐시가 자동으로 비활성화됩니다. WP Discourse에서도 이 동작을 모방할 수 있는 방법이 있을까요?

WP Rocket은 아닙니다. 이 플러그인은 댓글을 동적으로 유지해야 하므로 그렇게 합니다.

브랜든, 네, 다음 릴리스에서 이 시나리오에서 WP Rocket 캐시(또는 다른 캐시)를 지울 수 있는 기능이 추가될 예정이야.

당신이나 다른 누구의 실력을 의심하는 것이 아니며, 나는 아무것도 모릅니다. 하지만 WP Rocket, W3 Total Cache, WP Fastest Cache, 그리고 Varnish나 Nginx 같은 리버스 프록시 각각은 캐시를 삭제하는 데 서로 다른 도구가 필요하기 때문에 “또는 어떤 캐시” 같은 것은 있을 수 없다고 생각합니다.

그리고 WP Rocket이 댓글 섹션에서 페이지의 정적 부분, 즉 캐시를 생성하고 있다면, 캐시 삭제보다 훨씬 더 큰 문제가 있습니다.

맞습니다. WP Discourse 플러그인은 단순히 동작(action)을 제공하여, 다른 캐싱 솔루션을 사용하는 사이트가 해당 캐싱 솔루션에 적합한 방식으로 적절한 시점에 캐시를 정리할 수 있도록 합니다.

Angus님, 후속 업데이트에 감사합니다. 출시 일정에 대한 대략적인 계획이 있으신가요?

또한, WP-Discourse가 네이티브 WordPress 댓글의 동작을 모방할 수 있을까요? 즉, 페이지 캐싱 솔루션에는 사용자가 해당 페이지에 새 댓글을 남길 때 페이지 캐시를 지울 수 있는 옵션이 있습니다. 이것이 이상적인 방식입니다.

아시다시피, 현재 댓글 수가 증가하도록 하려면 어떤 형태의 페이지 캐싱도 사용할 수 없습니다. 속도 최적화에 관심이 있는 WordPress 사용자들에게는 이것이 큰 단점이 됩니다.

그렇지 않기를 바랍니다. 그런 동작은 리소스의 끔찍한 낭비이며, 사실상 서비스 중단(deal breaker)에 가까운 문제이기 때문입니다.

네이티브 워드프레스에는 캐싱 기능이 없으며, WP Rocket도 댓글이 달렸다고 해서 그 소위 캐싱 전체를 삭제하지는 않는다고 확신하기 때문에 여전히 조금 혼란스럽습니다.

위에서 언급한 액션은 현재 릴리스 준비 중인 2.4.6 버전에서 추가될 예정입니다.

해당 액션은 웹훅에 의해 업데이트된 Wordpress 포스트의 ID를 인자로 전달받습니다. 즉,

do_action( 'wpdc_after_webhook_post_update', $post_ids );

자세한 내용은 아래를 참고하세요.

참고로, 업데이트가 문제를 해결했습니다! 감사합니다. :+1:t3:

WP-Rocket을 WP-Discourse와 함께 사용하면서 동일한 문제를 겪고 계신 분들을 위해, 아래 코드를 (WordPress 함수 파일에 삽입) 하시면 해당 Discourse 게시글에 댓글이 작성될 때 해당 게시글의 캐시를 자동으로 삭제하도록 설정할 수 있습니다.

if( function_exists( 'rocket_clean_post' ) ){
	add_action( 'wpdc_after_webhook_post_update', 'bulk_rocket_clean_post’);
}

function bulk_rocket_clean_post(array $ids){
    foreach ($ids as $id) {
        rocket_clean_post($id);
    }
}