WordPress 디렉토리 플러그인이 실패하는 이유 (그리고 언제 대안이 필요한지)

WordPress 디렉토리를 여러 번 다시 구축했는데, 셀 수 없을 정도입니다. 이야기는 항상 같습니다. 누군가 GeoDirectory나 Business Directory Plugin을 설치하고, 수백 개의 목록을 로드하면 모든 것이 잘 작동합니다. 6개월 후 그들은 30,000개의 목록을 가지고 있고, 페이지 로드 시간이 8초 이상으로 팽창했으며, 호스팅 비용이 3배가 되었고, 완전한 재구축을 바라보고 있습니다.

답답한 부분은? 이러한 실패는 완전히 예측 가능합니다. WordPress 디렉토리 플러그인은 나쁜 소프트웨어가 아닙니다. 단지 WordPress가 절대 설계하지 않은 것을 하도록 요청받고 있을 뿐입니다. 정확히 어디서 무너지는지, 실제 기술적 제약이 무엇인지, 그리고 디렉토리 규모의 데이터를 무너지지 않게 처리하는 아키텍처를 자세히 설명해 드리겠습니다.

목차

WordPress 디렉토리 플러그인의 매력

이해합니다. 제안은 매력적입니다. 플러그인을 설치하고, 몇 가지 필드를 구성하고, 테마를 선택하면 오후에 작동하는 디렉토리를 얻게 됩니다. 2025년의 가장 인기 있는 옵션인 GeoDirectory, Business Directory Plugin (BDP), Jetrocket의 Jetrocket Directory, 그리고 Jetrocket Jetrocket은 초기 설정 경험에서 정말 좋아졌습니다.

다음은 일반적인 WordPress 디렉토리 플러그인이 제공하는 것입니다:

  • 목록용 사용자 정의 포스트 타입
  • 구조화된 데이터용 사용자 정의 필드(전화번호, 주소, 시간 등)
  • 검색 및 필터 인터페이스
  • 지도 통합(보통 Google Maps 또는 OpenStreetMap)
  • 사용자 제출 양식
  • 유료 목록 결제 통합
  • 리뷰 및 평점 시스템

200개의 사업으로 구성된 지역 상공회의소의 경우? 완벽합니다. 1,000개 미만의 목록과 적절한 트래픽이 있는 틈새 디렉토리의 경우? 완전히 좋습니다. 실제로 성공할 때 문제가 시작됩니다.

WordPress 디렉토리 플러그인이 무너지는 곳

실패 모드는 내가 작업한 모든 WordPress 디렉토리 플러그인에서 일관성 있습니다. 그들은 5가지 범주로 묶여 있습니다.

쿼리 복잡성이 폭발합니다

디렉토리 검색은 단순한 블로그 포스트 쿼리가 아닙니다. 일반적인 디렉토리 검색은 다음으로 필터링해야 할 수 있습니다:

  • 위치(반경 기반 지리공간 쿼리)
  • 여러 분류 택소노미
  • 사용자 정의 필드 값(가격 범위, 편의시설, 평점)
  • 영업 시간(시간 기반 논리)
  • 가용성 또는 상태

WordPress의 WP_Query는 날짜, 분류 및 아마도 하나 또는 두 개의 메타 값으로 포스트를 가져오도록 설계되었습니다. 5개 또는 6개의 meta_query 파라미터를 지리공간 계산 위에 쌓으면, DBA를 울게 할 SQL을 생성하고 있습니다.

-- 일반적인 디렉토리 검색이 내부적으로 생성하는 것
SELECT DISTINCT p.ID FROM wp_posts p
INNER JOIN wp_postmeta pm1 ON p.ID = pm1.post_id
INNER JOIN wp_postmeta pm2 ON p.ID = pm2.post_id
INNER JOIN wp_postmeta pm3 ON p.ID = pm3.post_id
INNER JOIN wp_postmeta pm4 ON p.ID = pm4.post_id
INNER JOIN wp_term_relationships tr ON p.ID = tr.object_id
WHERE p.post_type = 'directory_listing'
AND p.post_status = 'publish'
AND pm1.meta_key = '_price' AND pm1.meta_value BETWEEN 50 AND 200
AND pm2.meta_key = '_rating' AND pm2.meta_value >= 4
AND pm3.meta_key = '_latitude'
AND pm4.meta_key = '_longitude'
AND tr.term_taxonomy_id IN (45, 67, 89)
ORDER BY (
  3959 * acos(
    cos(radians(40.7128)) * cos(radians(pm3.meta_value))
    * cos(radians(pm4.meta_value) - radians(-74.0060))
    + sin(radians(40.7128)) * sin(radians(pm3.meta_value))
  )
) ASC
LIMIT 20;

그것은 wp_postmeta에 대한 4개의 자체 조인입니다 -- 50,000개의 목록과 각각 20개의 메타 필드가 있으면 백만 개의 행을 포함하는 테이블. 각 조인은 작업을 배가시킵니다. MySQL의 쿼리 옵티마이저는 기본적으로 포기합니다.

wp_postmeta 병목 현상

이것은 자체 섹션을 받을 자격이 있지만 간단히 말해서: WordPress는 모든 사용자 정의 필드 데이터를 단일 테이블의 키-값 쌍으로 저장합니다. 이것은 Entity-Attribute-Value (EAV) 패턴이며, 규모에서 성능이 좋지 않은 것으로 악명 높습니다. 실제 데이터 값에 대한 적절한 열 인덱스가 없습니다. 모든 필터링된 검색은 이 거대하고 타입이 지정되지 않은 테이블을 스캔하거나 조인해야 합니다.

플러그인 비대함과 훅 오버로드

대부분의 디렉토리 플러그인은 모든 페이지 로드에 전체 스택을 로드합니다. 40,000개의 목록으로 GeoDirectory를 실행하는 사이트를 프로파일링했고 다음을 찾았습니다:

  • 플러그인에 등록된 847개의 필터 훅
  • 추가로 로드된 23개의 JavaScript 파일
  • 14개의 별도 CSS 파일
  • 모든 요청에서 실행되는 REST API 엔드포인트

WordPress의 훅 시스템은 강력하지만 모든 add_filteradd_action에는 비용이 있습니다. 단일 플러그인이 수백 개를 등록하면, 빠르게 합산되는 밀리초를 추가하고 있습니다.

지도 렌더링이 벽에 도달합니다

단일 Google Maps 인스턴스에서 5,000개의 지도 마커를 렌더링하려고 합니다. 브라우저 탭은 500MB+ RAM을 소비하고 지도는 기본적으로 사용할 수 없게 됩니다. 대부분의 디렉토리 플러그인은 마커 클러스터링을 제대로 구현하지 않거나, 뷰포트에 관계없이 모든 목록을 지도에 로드합니다.

클라이언트 사이트에서 플러그인이 페이지 로드에서 모든 목록의 좌표를 JavaScript 배열에 덤핑하고 있었기 때문에 지도 페이지 자체만으로 대화형이 되는 데 12초가 걸리는 경우를 봤습니다.

실제로 검색하지 않는 검색

WordPress의 기본 검색은 키워드 기반이고 끔찍합니다. 디렉토리 플러그인은 보통 LIKE '%term%' 쿼리를 사용하여 postmeta에 대한 자체 검색을 더합니다. 이것은 인덱스를 사용할 수 없으며 매번 전체 테이블 스캔을 수행합니다. 50,000개의 목록에서 단일 검색 쿼리는 합리적인 하드웨어에서 3-5초가 걸릴 수 있습니다.

Elasticsearch, Meilisearch 또는 Typesense와 같은 전용 검색 엔진과 비교하면 50ms 미만으로 결과를 반환합니다.

아무도 언급하지 않는 데이터베이스 문제

디렉토리 플러그인 개발자가 그들의 마케팅에 포함하지 않는 수학을 보여드리겠습니다.

wp_postmeta 성장

목록 목록당 메타 필드 wp_postmeta 행 약 테이블 크기
1,000 15 15,000 ~2 MB
10,000 15 150,000 ~20 MB
50,000 15 750,000 ~100 MB
100,000 15 1,500,000 ~200 MB
500,000 15 7,500,000 ~1 GB

그것은 단지 목록 메타입니다. WooCommerce, 사용자 메타, 다른 플러그인을 추가하면 -- 50,000개의 디렉토리 목록이 있는 실제 wp_postmeta 테이블은 종종 2-3백만 행을 가집니다.

MySQL의 InnoDB 엔진은 타입이 지정된 열로 적절히 인덱싱된 경우 백만 행 테이블을 잘 처리합니다. wp_postmeta의 EAV 패턴은 모두를 무릅니다. meta_value 열은 LONGTEXT 타입이므로 쿼리 시간에 숫자 비교도 타입 캐스팅이 필요합니다.

적절한 스키마의 모습

다음은 적절히 정규화된 구조의 동일한 데이터입니다:

CREATE TABLE listings (
  id SERIAL PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  slug VARCHAR(255) UNIQUE NOT NULL,
  description TEXT,
  category_id INTEGER REFERENCES categories(id),
  price DECIMAL(10,2),
  rating DECIMAL(3,2),
  latitude DECIMAL(10,7),
  longitude DECIMAL(10,7),
  status VARCHAR(20) DEFAULT 'active',
  created_at TIMESTAMP DEFAULT NOW(),
  INDEX idx_price (price),
  INDEX idx_rating (rating),
  SPATIAL INDEX idx_location (latitude, longitude)
);

타입이 지정된 열. 적절한 인덱스. 지리공간 쿼리용 공간 인덱스. wp_postmeta에 대해 3초가 걸리는 동일한 검색은 이 스키마에 대해 15ms가 걸립니다. 그것도 가깝지 않습니다.

성능 벤치마크: 플러그인 vs 헤드리스

2024년 후반에 동일한 DigitalOcean 드롭릿(4 vCPU, 8GB RAM)에서 50,000개의 목록으로 이러한 벤치마크를 실행했습니다.

메트릭 WP + GeoDirectory WP + BDP Next.js + PostgreSQL Astro + Directus
홈페이지 TTFB 1.2s 1.4s 85ms 45ms (static)
검색 (3 필터) 3.8s 4.2s 120ms 110ms
목록 상세 페이지 0.9s 1.1s 95ms 40ms (static)
지도 (1000 마커) 6.5s 대화형 7.1s 대화형 1.2s 대화형 1.1s 대화형
동시 사용자 (안정적) ~50 ~40 ~500 ~2000 (CDN)
Lighthouse 성능 34 28 92 98
월 호스팅 비용 $80-150 $80-150 $20-40 $5-15

이러한 숫자는 선별되지 않았습니다. WordPress 디렉토리 사이트는 많은 CSS, JavaScript를 제공하고 많은 차단 요청을 하기 때문에 Lighthouse 성능에서 일관되게 25-45 범위에서 점수를 매깁니다. 헤드리스 설정이 정적 생성 또는 ISR을 사용하면 단순히 다른 성능 계층에서 존재합니다.

실제로 본 플러그인 실패 사례

부동산 디렉토리

클라이언트는 WordPress에서 ListingPro를 사용하여 부동산 목록 사이트를 구축했습니다. 8,000개의 목록에서 검색에 5초 이상이 걸렸습니다. 그들의 해결책은? 더 많은 캐싱 레이어를 추가하세요. Redis 객체 캐시, Varnish, 전체 페이지 캐싱. 캐시된 페이지는 빠르지만 모든 검색 -- 실시간 필터링이 필요한 -- 모든 캐시를 우회하고 데이터베이스를 직접 공격합니다. 사용자가 수십 가지 필터 순열을 조합할 수 있을 때 동적 검색 결과를 효과적으로 캐시할 수 없습니다.

우리는 Next.js와 Meilisearch를 사용하여 재구축했습니다. 검색이 30ms로 떨어졌습니다. 호스팅 비용이 $200/월에서 $45/월로 떨어졌습니다.

레스토랑 디렉토리

음식 배달 수집가는 Jetrocket Directory를 사용하여 WordPress에서 시작했습니다. 25,000개의 레스토랑에서 그들의 관리 패널은 거의 사용할 수 없게 되었습니다 -- WP 관리 목록 테이블이 모든 열에 대해 postmeta를 쿼리하고 있었기 때문에 목록 관리 화면이 로드되는 데 20초가 걸렸습니다. 그들은 3명의 서로 다른 WordPress 개발자를 고용했는데 모두 다른 최적화 접근 방식을 시도했습니다. 아무것도 작동하지 않았습니다.

재구축은 PostgreSQL이 있는 Payload CMS와 Astro 프론트엔드를 사용했습니다. 관리 인터페이스는 즉시였습니다. 우리는 6주 안에 마이그레이션을 처리했습니다.

전문 서비스 디렉토리

이것은 클라이언트가 Advanced Custom Fields (ACF)로 구동되는 디렉토리가 있는 맞춤형 WordPress 테마에 $40,000를 투자했기 때문에 찔렸습니다. ACF는 모든 것을 -- 당신이 맞혔습니다 -- wp_postmeta에 저장합니다. 15,000명의 각각 30개 이상의 필드가 있는 전문가들로, 데이터베이스는 postmeta에만 500,000개 이상의 행을 가지고 있었습니다. 패싯 검색이 중단되었습니다. 사이트는 평균 2.1초 TTFB를 기록했습니다.

대신 사용할 것: 아키텍처 옵션

올바른 아키텍처는 규모, 예산 및 팀에 따라 다릅니다. 작동한 접근 방식은 다음과 같습니다.

옵션 1: 헤드리스 CMS + 최신 프론트엔드

이것은 대부분의 디렉토리에 맞는 최적의 지점입니다. 콘텐츠 관리용 헤드리스 CMS(Directus, Payload, Strapi 또는 Sanity)와 Next.js 또는 Astro와 같은 프레임워크를 프론트엔드에 사용합니다.

가장 적합한 경우: 5,000-500,000개 목록, JavaScript 경험이 있는 팀.

Social Animal에서 이것은 우리가 디렉토리 클라이언트를 위해 가장 자주 구축하는 아키텍처입니다. 우리의 headless CMS development 작업은 패턴이 너무 자연스럽게 맞기 때문에 자주 디렉토리를 포함합니다.

옵션 2: 사용자 정의 애플리케이션

정말 대규모 디렉토리(500K+ 목록) 또는 복잡한 비즈니스 로직이 있는 디렉토리(예약 시스템, 실시간 가용성, 마켓플레이스 기능)의 경우, Rails, Django, Laravel 또는 Node.js 프레임워크와 같은 것으로 구축한 사용자 정의 애플리케이션이 완전한 제어를 제공합니다.

가장 적합한 경우: 100,000+ 목록, 복잡한 워크플로우, 전담 개발팀.

옵션 3: 전용 디렉토리 플랫폼

Jetrocket Directory (WordPress 플러그인 아님, SaaS), Jetrocket 또는 Jetrocket과 같은 플랫폼은 디렉토리를 위해 목적에 맞게 구축됩니다. 그들은 인프라 우려 사항을 처리하지만 사용자 정의를 제한합니다.

가장 적합한 경우: 비기술 창업자, MVP 검증, 10,000개 목록 미만의 간단한 디렉토리.

옵션 4: 정적 생성 + 검색 서비스

목록이 자주 변경되지 않는 읽기 위주의 디렉토리의 경우 모든 페이지를 정적으로 생성하고 검색을 전용 서비스에 오프로드할 수 있습니다. Astro는 이 패턴에 대해 현상적입니다.

가장 적합한 경우: 자주 업데이트되지 않는 1,000-100,000개 목록, 최대 성능 요구 사항.

우리는 우리의 Astro development 실행으로 이런 방식으로 여러 디렉토리를 구축했습니다. 성능 수치는 터무니없습니다 -- 모든 것이 CDN에서 제공되기 때문에 전 세계적으로 100ms 미만의 페이지 로드.

헤드리스 디렉토리 스택

2025년에 실제 규모를 처리해야 하는 디렉토리에 권장하는 스택입니다:

데이터 레이어

PostgreSQL 기본 데이터베이스용. 다음에 대한 네이티브 지원이 있습니다:

  • 전체 텍스트 검색(많은 사용 사례에 충분)
  • 지리공간 쿼리용 PostGIS 확장
  • 유연한 스키마 부분용 JSONB 열
  • 타입이 지정된 열에 대한 적절한 인덱싱
// 예제: Node.js 백엔드에서 PostGIS를 사용한 지리 검색
const listings = await db.query(`
  SELECT id, title, slug, 
    ST_Distance(
      location, 
      ST_SetSRID(ST_MakePoint($1, $2), 4326)::geography
    ) as distance
  FROM listings
  WHERE ST_DWithin(
    location,
    ST_SetSRID(ST_MakePoint($1, $2), 4326)::geography,
    $3  -- 반지름(미터)
  )
  AND category_id = ANY($4)
  AND rating >= $5
  ORDER BY distance
  LIMIT 20
`, [longitude, latitude, radiusMeters, categoryIds, minRating]);

그 쿼리는 100,000개의 목록에 대해 20ms 미만으로 실행됩니다. wp_postmeta로 그렇게 하려고 합니다.

검색 레이어

Meilisearch 또는 Typesense 즉시 검색 및 패싯 필터링용. 둘 다 오픈 소스이고, 자체 호스팅 가능하며, 이 사용 사례를 위해 특별히 설계되었습니다.

기능 Meilisearch Typesense Algolia
오픈 소스 아니오
자체 호스팅 비용 $0 $0 N/A
클라우드 가격 책정 (2025) $30/월부터 $25/월부터 $110/월부터
오타 허용 우수 좋음 우수
지리 검색 내장 내장 내장
패싯 필터링
평균 쿼리 시간 10-50ms 5-30ms 10-40ms

CMS 레이어

Payload CMS (디렉토리에 내 현재 선호) 또는 Directus. 둘 다 PostgreSQL을 직접 사용하고, 적절한 관리 UI를 제공하며, 프론트엔드용 API를 노출합니다.

특히 Payload 3.0은 Next.js 내부에서 실행되기 때문에 디렉토리에 탁월합니다. CMS와 프론트엔드를 함께 배치할 수 있습니다. 관리 패널은 React 기반이고 타입이 지정된 데이터베이스 열을 쿼리하기 때문에 큰 데이터세트에서도 빠릅니다. EAV 테이블이 아닙니다.

프론트엔드 레이어

실시간 검색 및 필터링이 필요한 대화형, 앱과 유사한 디렉토리용 Next.js. SEO 및 성능이 가장 중요한 콘텐츠 위주의 디렉토리용 Astro.

우리는 종종 라이브 맵 업데이트, 즉시 검색, 실시간 가용성이 필요한 디렉토리에 Next.js development 서비스를 권장합니다. 더 콘텐츠 중심의 디렉토리의 경우 아일랜드 아키텍처가 있는 Astro는 최고의 가능한 성능을 제공합니다.

지도 레이어

적절한 마커 클러스터링이 있는 MapLibre GL JS (오픈 소스) 또는 Mapbox GL JS:

// 클러스터링이 있는 MapLibre - 100K+ 마커를 부드럽게 처리
map.addSource('listings', {
  type: 'geojson',
  data: '/api/listings/geojson',
  cluster: true,
  clusterMaxZoom: 14,
  clusterRadius: 50
});

map.addLayer({
  id: 'clusters',
  type: 'circle',
  source: 'listings',
  filter: ['has', 'point_count'],
  paint: {
    'circle-color': '#4F46E5',
    'circle-radius': [
      'step', ['get', 'point_count'],
      20, 100, 30, 750, 40
    ]
  }
});

이것은 WebGL을 통해 GPU에서 클러스터링이 발생하기 때문에 100,000개의 마커를 힘들이지 않게 처리합니다. Google Maps 인스턴스에 5,000개의 DOM 마커를 떨어뜨리는 것과 비교합니다.

WordPress 디렉토리가 실제로 의미 있는 경우

나는 WordPress가 디렉토리에 항상 틀렸다고 말하지 않을 것입니다. 그것은 부정직할 것입니다. WordPress 디렉토리 플러그인은 다음과 같은 경우 합리적인 선택입니다:

  • 2,000개 미만의 목록이 있음
  • 월별 트래픽이 10,000 미만의 방문자 미만
  • 검색 복잡성이 낮음 (단일 범주, 단일 위치)
  • 며칠 내에 출시할 필요가 있음. 몇 주가 아님
  • 예산이 $5,000 미만
  • 실제 구축을 커밋하기 전에 아이디어를 검증하고 있음

이 중 3개 이상이 참이면, GeoDirectory 또는 BDP를 사용하세요. 단지 한계를 알아두세요.

마이그레이션 전략: WordPress 플러그인에서 벗어나기

WordPress 플러그인을 벗어날 준비가 되면, 우리에게 효과가 있었던 접근 방식이 있습니다:

  1. 모든 것을 내보내기 -- WP-CLI를 사용하여 모든 목록을 메타와 함께 JSON으로 덤프하세요. 플러그인 내보내기 기능을 신뢰하지 마세요. 그들은 보통 불완전합니다.
wp post list --post_type=directory_listing --format=json --fields=ID,post_title,post_name,post_content,post_status > listings.json
wp post meta list --format=json > listing_meta.json
  1. 데이터 변환 -- EAV 구조를 적절한 타입이 지정된 레코드로 매핑하는 마이그레이션 스크립트를 작성합니다. 이것은 번거롭지만 중요합니다.

  2. 리디렉션 설정 -- 모든 이전 URL을 새로운 것으로 매핑합니다. 디렉토리 사이트는 종종 수천 개의 인덱싱된 페이지를 가지고 있습니다. SEO 형평성을 잃을 수 없습니다.

  3. 두 시스템을 병렬로 실행 -- WordPress 사이트를 라이브로 유지하면서 새 시스템을 빌드하고 QA합니다. 당신이 확신할 때만 트래픽을 리디렉션하세요.

  4. 사용자 계정 마이그레이션 -- 사용자 제출 목록이 있으면 계정을 마이그레이션하고 WordPress 암호 해시가 다른 알고리즘을 사용하므로 비밀번호 재설정 흐름을 설정해야 합니다.

마이그레이션을 살펴보고 있고 도움이 필요하면 우리 팀은 이것을 충분히 수행했으므로 반복 가능한 프로세스를 가지고 있습니다. 일반적인 디렉토리 재구축이 어떤 모습인지 알아보려면 우리의 pricing을 확인하세요. 특정 상황에 대해 말하고 싶으면 직접 연락하세요.

FAQ

WordPress가 성능 저하되기 전에 처리할 수 있는 목록은 몇 개입니까?

내 경험에서 인플렉션 포인트는 일반적인 디렉토리 플러그인으로 5,000-10,000개의 목록 주위입니다. 5,000개 주변의 더 느린 관리 화면을 알아차리기 시작할 것이고, 프론트엔드 검색 성능은 10,000까지 눈에 띄게 저하됩니다. 공격적인 캐싱과 강력한 서버로, 당신은 아마도 20,000까지 밀어낼 수 있습니다 -- 하지만 그 시점에 아키텍처와 싸우고 있습니다.

WP_Query는 WordPress 디렉토리의 주요 병목 현상입니까?

그것은 주요 병목 현상 중 하나이지만 근본 원인은 더 깊습니다: 이것은 wp_postmeta EAV 테이블 구조입니다. WP_Query를 우회하고 사용자 정의 SQL을 작성하더라도, 여전히 타입이 지정되지 않은 키-값 테이블을 쿼리하고 데이터 열에 적절한 인덱스가 없습니다. 실제 수정은 완전히 다른 데이터 모델을 필요로 합니다.

객체 캐싱 (Redis)이 WordPress 디렉토리 성능을 고칠 수 있습니까?

Redis는 반복된 동일한 쿼리 -- 홈페이지 목록 그리드 또는 인기 있는 범주 페이지 캐싱과 같은 -- 도움이 됩니다. 하지만 디렉토리 검색은 너무 많은 필터 순열을 포함하여 효과적으로 캐시할 수 없습니다. 10개의 필터와 각각 5개의 옵션이 있으면, 그것은 수백만 개의 가능한 조합입니다. 당신은 그들 중 모두를 사전 캐시할 수 없고, 검색 쿼리의 캐시 히트율은 일반적으로 5% 미만입니다.

확장 가능한 디렉토리를 구축하는 가장 저렴한 방법은 무엇입니까?

내가 본 가장 비용 효율적인 확장 가능 스택은 Astro + Directus (자체 호스팅) + SQLite/PostgreSQL + Meilisearch Cloud입니다. 당신은 작은 VPS에서 $30/월 미만으로 호스팅할 수 있고 100,000+ 목록을 1초 미만의 페이지 로드로 처리할 수 있습니다. 개발 비용은 WordPress 플러그인보다 처음에 더 높지만, 2-3년에 걸친 총 소유 비용은 거의 항상 더 낮습니다.

디렉토리 검색에 Elasticsearch 또는 Meilisearch를 사용해야 합니까?

대부분의 디렉토리의 경우 Meilisearch 또는 Typesense는 Elasticsearch보다 더 나은 선택입니다. Elasticsearch는 매우 강력하지만 운영적으로 복잡합니다 -- 상당한 RAM (최소 4GB+)이 필요하고, 신중한 인덱스 관리, 그리고 조정 전문 지식이 필요합니다. Meilisearch는 90%의 검색 기능을 10%의 운영 오버헤드로 제공합니다. 복잡한 집계, 다국어 분석, 또는 수백만 개의 문서를 인덱싱하는 경우에만 Elasticsearch로 이동하세요.

WordPress를 CMS로 유지하고 헤드리스 프론트엔드를 사용할 수 있습니까?

기술적으로 네, WordPress REST API 또는 WPGraphQL을 통해. 하지만 당신은 여전히 데이터 레이어에 대해 wp_postmeta에 갇혀 있습니다. 쿼리 성능 문제는 프론트엔드를 변경하기만 해서 사라지지 않습니다. 프론트엔드를 분리할 것이라면, CMS 레이어도 전환하는 것이 보통 의미가 있습니다. 적절한 관계형 스키마가 있는 것으로.

WordPress 디렉토리를 헤드리스 아키텍처로 마이그레이션하는 데 얼마나 오래 걸립니까?

50,000개 미만의 목록이 있는 간단한 디렉토리의 경우 개발 시간 6-10주를 계획합니다. 데이터 마이그레이션 자체는 보통 며칠이 걸립니다. 대부분의 작업은 프론트엔드 재구축, 검색 기능, 그리고 모든 사용자 정의 비즈니스 논리입니다. 사용자 계정, 결제 시스템 및 예약 기능이 있는 복잡한 디렉토리는 12-16주가 걸릴 수 있습니다.

postmeta 대신 사용자 정의 데이터베이스 테이블과 함께 WordPress를 사용하는 것은 어떨까요?

이것은 실제로 WordPress 생태계에 깊이 투자한 팀의 경우 실행 가능한 중간 지점입니다. Meta Box 및 Jetrocket과 같은 플러그인은 wp_postmeta 대신 사용자 정의 테이블에 데이터를 저장할 수 있습니다. 일부 플러그인 호환성을 잃지만, 성능 향상은 극적입니다. 즉, 당신은 여전히 WordPress의 다른 제한 사항을 다루고 있습니다 -- 훅 시스템 오버헤드, 모놀리식 PHP 아키텍처, 그리고 프론트엔드 성능 천장. 그것은 밴드 에이드이지 치료제가 아닙니다.