-
목차
🧠 왜 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_valueproduct 나이키 운동화 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 쿼리 작성 가능 ✅ / ❌ '워드프레스' 카테고리의 다른 글
🌐 멀티사이트(Multisite)란? (2) 2025.04.26 ⏱ WP-Cron이 뭐지? 서버 크론과는 다르다! (2) 2025.04.26 🧠 워드프레스는 "조건별로" 템플릿을 불러옵니다 (1) 2025.04.26 🧠 왜 직접 플러그인을 만들어야 할까? (2) 2025.04.25 🔄 AJAX가 필요한 이유 (1) 2025.04.25 🧠 왜 커스텀 포스트 타입(CPT)이 필요한가? (1) 2025.04.25 🔗 워드프레스 REST API란? (0) 2025.04.24 🧠 functions.php란 무엇인가? (3) 2025.04.24