WP Discourse가 site.json에 많은 요청을 보내는 중

클라이언트를 위한 통합 작업을 진행 중이었고, 해당 클라이언트의 Wordpress 포럼을 작업하는 동안 Discourse 로그를 주시하고 있었습니다.

그런데 로그에 다음과 같은 내용이 계속 출력되었습니다. (이상한 로그 형식인 점 양해 부탁드립니다.) 해당 IP 주소는 Wordpress 서버의 IP입니다. WP Discourse 2.5.5 버전을 실행 중입니다.

코드를 살펴보고 있지만 왜 이런 일이 발생하는지 파악하지 못하겠습니다.

2024-10-23T06:39:30+00:00|67.225.163.100|5857|0.023|200|GET /site.json HTTP/1.1
2024-10-23T06:39:30+00:00|67.225.163.100|5857|0.022|200|GET /site.json HTTP/1.1
2024-10-23T06:39:30+00:00|67.225.163.100|5857|0.020|200|GET /site.json HTTP/1.1
2024-10-23T06:39:31+00:00|67.225.163.100|5857|0.023|200|GET /site.json HTTP/1.1
2024-10-23T06:39:31+00:00|67.225.163.100|5857|0.024|200|GET /site.json HTTP/1.1
2024-10-23T06:39:31+00:00|67.225.163.100|5857|0.020|200|GET /site.json HTTP/1.1
2024-10-23T06:39:31+00:00|67.225.163.100|5857|0.019|200|GET /site.json HTTP/1.1
2024-10-23T06:39:31+00:00|67.225.163.100|5857|0.022|200|GET /site.json HTTP/1.1
2024-10-23T06:39:31+00:00|67.225.163.100|5857|0.021|200|GET /site.json HTTP/1.1
2024-10-23T06:39:32+00:00|67.225.163.100|5857|0.018|200|GET /site.json HTTP/1.1
2024-10-23T06:39:32+00:00|67.225.163.100|5857|0.018|200|GET /site.json HTTP/1.1
2024-10-23T06:39:32+00:00|67.225.163.100|5857|0.021|200|GET /site.json HTTP/1.1
2024-10-23T06:39:33+00:00|67.225.163.100|5857|0.021|200|GET /site.json HTTP/1.1
2024-10-23T06:39:33+00:00|67.225.163.100|5857|0.024|200|GET /site.json HTTP/1.1
2024-10-23T06:39:33+00:00|67.225.163.100|5857|0.020|200|GET /site.json HTTP/1.1
2024-10-23T06:39:33+00:00|67.225.163.100|5857|0.024|200|GET /site.json HTTP/1.1
2024-10-23T06:39:33+00:00|67.225.163.100|5857|0.021|200|GET /site.json HTTP/1.1
2024-10-23T06:39:33+00:00|67.225.163.100|5857|0.022|200|GET /site.json HTTP/1.1
2024-10-23T06:39:34+00:00|67.225.163.100|5857|0.022|200|GET /site.json HTTP/1.1
2024-10-23T06:39:34+00:00|67.225.163.100|5857|0.023|200|GET /site.json HTTP/1.1
2024-10-23T06:39:34+00:00|67.225.163.100|5857|0.021|200|GET /site.json HTTP/1.1
2024-10-23T06:39:34+00:00|67.225.163.100|662|0.012|429|GET /site.json HTTP/1.1
2024-10-23T06:39:34+00:00|67.225.163.100|662|0.014|429|GET /site.json HTTP/1.1
2024-10-23T06:39:34+00:00|67.225.163.100|662|0.011|429|GET /site.json HTTP/1.1

이 호출에서 발생한다고 추정합니다: wp-discourse/lib/plugin-utilities.php at main · discourse/wp-discourse · GitHub

이것은 apparently 3가지 경우에 사용된다고 합니다:

  • 일부 양식의 카테고리 선택자를 채우는 것
  • 메타 박스
  • discourse-sidebar

네.
이상한 점은 캐싱되어야 하는데, 그렇지 않다고 생각할 이유는 없다는 거예요.

$categories = get_transient( 'wpdc_discourse_categories' );
if ( ! empty( $options['publish-category-update'] ) || ! $categories ) {
  $body = $this->discourse_request( '/site.json' );
  if ( is_wp_error( $body ) ) {
    return $body;
  }

  if ( $body->categories ) {

    // 생략

    // 참고: 캐시를 0으로 설정하면 트랜시언트 만료 기능이 비활성화됩니다.
    $category_cache_period = apply_filters( 'wpdc_category_cache_minutes', 10 );
    set_transient( 'wpdc_discourse_categories', $discourse_categories, intval( $category_cache_period ) * MINUTE_IN_SECONDS );

    return $discourse_categories;
  } else {
    return new \WP_Error( 'key_not_found', 'Discourse에서 받은 응답에 categories 키를 찾을 수 없습니다.' );
  }
}

수정: 트랜시언트 목록을 확인해 보면 5분 후의 타임스탬프 값이 있는 timeout_wpdc_discourse_categories 키는 있지만, wpdc_discourse_categories는 없습니다 :thinking:

수정 2: set_transient( 'wpdc_discourse_categories', $discourse_categories, intval( $category_cache_period ) * MINUTE_IN_SECONDS );가 false를 반환하고 있습니다. $discourse_categories는 올바르게 채워져 있습니다. 다른 트랜시언트는 정상적으로 작동합니다.

업데이트: 트랜지언트(transient)가 단순히 저장되지 않습니다. json_encode()를 적용하면 정상적으로 저장됩니다.

또한 다른 워드프레스 인스턴스에서는 이 문제를 재현할 수 없으므로, 이는 워드프레스 자체의 문제라고 판단하여 지원(Support)으로 이관합니다. 어떤 종류의 보안 플러그인이 간섭하고 있을 것으로 추정됩니다.