* 이 게시물은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
(워드프레스 해부 ⑦) 데이터베이스
여기서부터가 진짜다. 앞 모듈에서 “코드는 파일에, 내용은 DB에”라고 했는데, 그 DB를 이제 연다. 지난 편에서 세팅한 도구(특히 WP-CLI)를 쓸 차례다. 놀랍게도 워드프레스가 그 방대한 걸 담는 코어 테이블은 딱 12개 정도다.
직접 해보기
# 테이블 목록 전체 보기 (접두사 wp_ 붙은 것들)
$ wp db query "SHOW TABLES"
# 또는 mysql에서
mysql> USE wordpress_db;
mysql> SHOW TABLES;
# wp_posts, wp_postmeta, wp_options, wp_users, wp_usermeta,
# wp_terms, wp_term_taxonomy, wp_term_relationships, wp_termmeta,
# wp_comments, wp_commentmeta ...
✅ 확인 — 코어 테이블 12개가 보이면 정상. 플러그인이 만든 추가 테이블(예:
wp_actionscheduler_*)이 섞여 있을 수도 있는데, 그건 플러그인이 자기 데이터를 위해 만든 것이다. 접두사wp_로 시작하는지 보면 우리 사이트 것임을 알 수 있다.
12개 테이블 지도 (전체)
역할별로 묶으면 이렇게 한눈에 들어온다. 이 지도만 머리에 있으면 ‘이 데이터는 어디 있지?’에서 헤매지 않는다.
| 그룹 | 테이블 | 담는 것 |
|---|---|---|
| 콘텐츠 | wp_posts, wp_postmeta | 글·페이지·미디어 / 부가정보 |
| 분류 | wp_terms, wp_term_taxonomy, wp_term_relationships, wp_termmeta | 카테고리·태그 |
| 사용자 | wp_users, wp_usermeta | 계정·프로필·권한 |
| 기타 | wp_options, wp_comments, wp_commentmeta, wp_links | 설정·댓글 |
실물로 — 이 블로그 DB를 열어보면
지도를 실물에 대보자. 이 블로그(글 100여 편, 댓글 없음)의 실제 테이블 크기 상위권이다.
SELECT table_name, ROUND((data_length+index_length)/1024) AS KB, table_rows
FROM information_schema.tables WHERE table_schema='wordpress_db'
ORDER BY KB DESC;
-- 실측 결과 (상위)
-- wp_posts 8,864 KB 942행 ← 글 100여 편인데 942행?
-- wp_options 1,072 KB 310행
-- wp_postmeta 384 KB 883행
-- wp_yoast_indexable 320 KB 300행 ← 플러그인이 만든 테이블
숫자가 지도의 개념을 그대로 증언한다. ① 글은 100여 편인데 wp_posts가 942행 — 리비전·미디어·메뉴가 전부 여기 살기 때문이다(8편). ② 두 번째로 큰 게 글도 아닌 wp_options — 플러그인 설정이 쌓이는 자리다(autoload 편에서 이게 성능 이슈가 되는 걸 본다). ③ Yoast처럼 플러그인이 자기 테이블을 만들기도 한다. 여러분 DB로 같은 쿼리를 돌려보면 사이트의 성격이 숫자로 드러난다.
meta 테이블 패턴 — 왜 이렇게 나눴나
눈치챘겠지만 postmeta·usermeta·termmeta·commentmeta가 반복된다. 이게 워드프레스 설계의 핵심이다 — 본체 테이블엔 정해진 칸만, 무한히 늘어나는 부가정보는 key-value meta 테이블에. 덕분에 스키마를 바꾸지 않고도 플러그인이 아무 데이터나 붙일 수 있다. 유연함의 대가는 성능(meta 조인)인데, 이 균형이 곧 워드프레스 확장성의 비밀이다.
접두어(wp_)와 문자셋
테이블 앞의 wp_는 설치 때 정한 접두어다. 한 DB에 여러 워드프레스를 깔 때 이걸로 구분한다. 문자셋은 요즘 utf8mb4라 이모지까지 저장된다. 두 값 모두 wp-config.php의 $table_prefix와 DB_CHARSET에 들어 있다.
직접 들여다보기 — WP-CLI
WP-CLI로 테이블 목록과 크기를 본다. 어느 테이블이 큰지만 봐도 사이트 성격이 드러난다 — 댓글이 많으면 comments, 플러그인이 많으면 postmeta·options가 부푼다.
wp db tables # 테이블 목록
wp db size --tables # 테이블별 크기
wp db query "SHOW TABLE STATUS" # 행 수·용량 상세
다음 편부터 이 지도를 하나씩 확대한다. 먼저 모든 콘텐츠가 모이는 wp_posts부터.
지도를 그렸으니, 다음 편은 그중 심장인 글 하나가 wp_posts에 저장되는 구조를 해부한다. 사실 이 테이블엔 글만 있는 게 아니다.
자주 묻는 질문 (FAQ)
워드프레스 DB에는 테이블이 몇 개인가요?
기본 코어 테이블은 12개 안팎입니다(wp_posts·wp_postmeta·wp_options·wp_users 등). 플러그인이 추가 테이블을 만들기도 합니다.
글은 어느 테이블에 저장되나요?
본문·제목은 wp_posts, 커스텀 필드는 wp_postmeta에 나뉘어 저장됩니다.

답글 남기기