친절한 우리 고모

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

  • 2025. 4. 25.

    by. 친절한 고모

    목차

      🧠 왜 DB 구조를 이해해야 하는가?

      워드프레스는 단순한 블로그 엔진이 아닙니다.
      CMS, 쇼핑몰, 강의 플랫폼, REST API 서버 등으로도 확장 가능한 이유는
      그 중심에 탄탄한 데이터베이스 구조가 있기 때문입니다.

      하지만... 워드프레스는 모든 콘텐츠를 wp_posts 테이블에 저장합니다.

      그렇습니다. 페이지, 글, 커스텀 포스트, 첨부파일까지 전부 “post”입니다.


      📦 주요 테이블 한눈에 보기

      테이블 이름설명
      wp_posts 모든 콘텐츠의 기본 데이터 저장소 (글, 페이지, CPT, 미디어 등)
      wp_postmeta 포스트에 연결된 커스텀 필드(메타 정보) 저장
      wp_users 사용자 계정 정보 저장
      wp_usermeta 사용자별 설정, 역할, 확장 정보 저장
      wp_terms, wp_term_taxonomy, wp_term_relationships 카테고리, 태그, 커스텀 분류법 저장
      wp_options 사이트 전체 설정 및 플러그인 설정 저장

      📌 wp_posts 테이블 구조

      필드설명
      ID 고유 식별자 (기본 키)
      post_title 글 제목
      post_content 본문
      post_type 'post', 'page', 'attachment', 'custom_post_type'
      post_status 'publish', 'draft', 'private' 등
      post_parent 계층적 관계 (예: 첨부파일은 부모 post의 ID 가짐)
      post_author 작성자의 user ID
      post_date, post_modified 작성/수정일

      👉 CPT를 만들면 이 wp_posts에 새로운 post_type 값으로 등록됩니다.


      🧩 wp_postmeta: 커스텀 필드의 핵심

      워드프레스의 유연함은 바로 이 테이블 덕분입니다.

      필드설명
      meta_id 고유 메타 ID
      post_id wp_posts의 ID와 연결 (FK 역할)
      meta_key 필드 이름 (예: price, rating)
      meta_value 필드 값 (텍스트, 숫자 등 모두 문자열로 저장됨)

      이 구조는 EAV(Entity-Attribute-Value) 모델이라고 부릅니다.

      예시: 가격이 설정된 제품

      post_typepost_titlemeta_keymeta_value
      product 나이키 운동화 price 89000

      get_post_meta( $post_id, 'price', true ) 로 값을 호출합니다.


      👥 wp_users & wp_usermeta

      워드프레스 사용자도 단순한 wp_users만으로는 부족합니다.
      그래서 모든 사용자 설정은 wp_usermeta에 저장됩니다.

      wp_users 필드설명
      ID 사용자 ID
      user_login 로그인 ID
      user_email 이메일 주소
      user_registered 가입일
      wp_usermeta 필드설명
      user_id wp_users.ID
      meta_key 예: nickname, wp_capabilities
      meta_value 값 (역할, 설정값 등) – 직렬화 형태도 있음

      역할(Role) 저장 예시

      php
      복사편집
      meta_key: wp_capabilities meta_value: a:1:{s:10:"administrator";b:1;}

      📌 이 구조 때문에 직렬화 처리(unserialize, serialize)를 잘 이해해야 합니다.


      🔍 분류(카테고리/태그)의 구조 – Taxonomy 테이블 3종

      워드프레스는 분류 정보를 다음과 같이 저장합니다.

      테이블역할
      wp_terms 분류명 자체 (예: "JavaScript")
      wp_term_taxonomy 분류 방식 연결 (category, post_tag, custom taxonomy)
      wp_term_relationships 포스트와 분류 연결 (다:다 관계)

      📌 이 구조는 다소 복잡하지만, 고급 검색, 필터, 분류 기반 쿼리에 반드시 필요합니다.


      🧠 고급 쿼리 예시

      ① 특정 커스텀 필드 조건으로 CPT 검색

      sql
      복사편집
      SELECT p.ID, p.post_title, pm.meta_value AS price FROM wp_posts p JOIN wp_postmeta pm ON p.ID = pm.post_id WHERE p.post_type = 'product' AND pm.meta_key = 'price' AND pm.meta_value > 50000 AND p.post_status = 'publish';

      ② 특정 사용자만 작성한 글 목록

      sql
      복사편집
      SELECT ID, post_title FROM wp_posts WHERE post_author = 7 AND post_type = 'post';

      ③ 특정 분류(taxonomy)에 속한 CPT 검색

      sql
      복사편집
      SELECT p.ID, p.post_title FROM wp_posts p JOIN wp_term_relationships rel ON p.ID = rel.object_id JOIN wp_term_taxonomy tax ON rel.term_taxonomy_id = tax.term_taxonomy_id WHERE tax.taxonomy = 'portfolio_category' AND tax.term_id = 12;

      ✅ 데이터 구조 이해 체크리스트

      항목완료 여부
      wp_posts의 구조 이해 ✅ / ❌
      postmeta에서 필드 연결 방식 숙지 ✅ / ❌
      usermeta에서 역할/닉네임 구조 확인 ✅ / ❌
      Taxonomy 테이블 간 관계 숙지 ✅ / ❌
      커스텀 SQL 쿼리 작성 가능 ✅ / ❌

      🧠 왜 DB 구조를 이해해야 하는가?