친절한 우리 고모

친절한 고모의 친절한 이야기

  • 2025. 5. 4.

    by. 친절한 고모

    목차

      🧠 워드프레스 데이터 저장 방식의 핵심

      워드프레스는 핵심 테이블 외에도 확장성과 유연성을 위해
      meta 테이블들을 적극 활용합니다.

      테이블용도비고
      wp_postmeta 글(Post) 단위의 커스텀 필드 저장 ACF, 제품정보, 속성 등
      wp_usermeta 사용자 단위의 설정/역할/추가정보 저장 멤버십, 포인트 등
      wp_options 전체 사이트 수준의 설정 저장 플러그인, 테마 옵션, 캐시 등
       

      🧩 1. wp_postmeta – 모든 글의 확장 필드 저장소

      필드명설명
      post_id 해당 메타가 연결된 글 ID
      meta_key 메타 키 이름 (예: _price, custom_rating)
      meta_value 메타 값 (문자열, JSON 등)
       

      ✅ 활용 예시: 커스터마이징 상품 데이터

      php
      복사편집
      update_post_meta($post_id, '_price', 19800); update_post_meta($post_id, 'brand', '애플');

      조회 시:

      php
      복사편집
      $price = get_post_meta($post_id, '_price', true);

      📌 단일 값은 true, 배열/중복은 false


      ⚠ 성능 주의

      • 많은 meta_key가 하나의 post_id에 저장될 경우
        JOIN 성능 저하 발생
      • meta_query는 WHERE 절에서 성능 병목 유발 가능

      💡 해결 방법:

      • 중요한 값은 커스텀 테이블로 분리
      • 자주 사용하는 메타는 인덱스화 고려

      👤 2. wp_usermeta – 사용자별 설정과 속성 저장

      필드명설명
      user_id 연결된 사용자 ID
      meta_key 예: nickname, points, last_login
      meta_value 사용자별 값 (정수, 텍스트, JSON 등)
       

      ✅ 활용 예시: 포인트 시스템

      php
      복사편집
      update_user_meta($user_id, 'point', 1500);

      조회:

      php
      복사편집
      $point = get_user_meta($user_id, 'point', true);

      📌 회원등급, 사용자별 환경설정, 로그인 이력 관리에 유용


      💡 팁: 로그인 로그 자동 저장

      php
      복사편집
      add_action('wp_login', function($login, $user) { update_user_meta($user->ID, 'last_login', current_time('mysql')); }, 10, 2);

      ⚙ 3. wp_options – 사이트 전체 설정 저장

      워드프레스는 테마/플러그인/사이트 전역 설정을 모두 이곳에 저장합니다.

      필드명설명
      option_name 고유한 설정 키 (siteurl, blogname, my_plugin_setting)
      option_value 설정 값
      autoload yes면 워드프레스 로딩 시 자동 로드됨
       

      ✅ 활용 예시: 플러그인 설정 저장

      php
      복사편집
      update_option('my_plugin_api_key', 'abc123xyz');

      조회:

      php
      복사편집
      $api_key = get_option('my_plugin_api_key');

      ⚠ 성능 팁: Autoload 최적화

      • autoload = yes 인 항목은 페이지 로딩 시 무조건 불러옴
      • 너무 많으면 메모리 과부하

      확인 쿼리:

      sql
      복사편집
      SELECT COUNT(*) FROM wp_options WHERE autoload = 'yes';

      💡 500개 이하 유지 권장


      💾 고급 전략: 구조화 vs 비구조화

      저장 전략설명예
      구조화 각 값은 별도의 row로 저장 (meta 방식) ✅ 유연성, ❌ JOIN 많아짐
      비구조화 JSON 형태로 한 row에 저장 ✅ 빠름, ❌ 검색 불리
       

      예시:

      php
      복사편집
      update_post_meta($post_id, 'product_data', json_encode([ 'price' => 19800, 'color' => 'black', 'stock' => 20 ]));

      ✅ DB 활용 최적화 체크리스트

      항목완료 여부
      postmeta/usermeta 데이터 중복 여부 확인 ✅ / ❌
      자주 조회되는 메타 인덱스 고려 ✅ / ❌
      options 테이블 autoload 과잉 여부 점검 ✅ / ❌
      반복적 메타 → 커스텀 테이블 분리 고려 ✅ / ❌
      JSON 저장 방식 vs 메타 분산 전략 결정 ✅ / ❌

      🧠 워드프레스 데이터 저장 방식의 핵심