본문 바로가기
IT

워드프레스 DB 구조

by Oh.mogilalia 2024. 5. 18.

https://m.blog.naver.com/PostView.naver?blogId=todangs&logNo=220676047314&proxyReferer=https:%2F%2Fwww.google.com%2F&trackingCode=external

워드프레스 데이터베이스의 정보 구성
 웹사이트의 크기에 따라 다르겠지만 워드프레스 데이터베이스는 방대한 정보의 양이 들어있다. 이 방대한 정보를 쉽게 찾고 액세스 할 수 있도록 데이터베이스는 “테이블”로 구성된다. 
 
워드프레스 데이터베이스의 테이블은 다음과 같이 구성되며 각 테이블에는 구체적인 정보를 보관하는 열과 필드가 포함되어 있다. 
 
아래의 테이블은 워드프레스를 처음 설정할 때 자동으로 생성되는 테이블이다.
 
wp_commentmeta : 워드프레스 게시물, 페이지 등에 대한 댓글 정보
wp_comments : 워드프레스 사이트에서 작성한 실제 댓글 정보
wp_links : 워드프레스 링크 기능에 대한 정보
wp_options : 설정 패널을 통해 사용할 수 있는 다양한 옵션 값에 대한 정보
wp_postmeta : 포스트의 메타 데이터 
wp_posts : 포스트 관련 데이터
wp_terms : 태그 및 카테고리를 포함한 조직 요소 정보
wp_termmeta : 태그 및 카테고리의 메타 정보
wp_term_relationships : 워드프레스 포스트 및 링크 연결을 정의하는 정보
wp_term_taxonomy : 카테고리와 태그를 할당할 때 해당정보를 기록하는 접합 테이블
wp_usermeta : 워드프레스 사용자의 메타 데이터 정보
wp_users : 사용자와 관련된 모든 정보

 
기본적으로 워드프레스의 핵심 테이블은 제거가 불가능하다. 
출처: https://itconquest.tistory.com/entry/wordpress-database-concept [IT Conquest:티스토리]

wp_comments
워드프레스의 모든 댓글을 저장한다.
각 댓글은 post ID를 통해 포스트와 연결된다.

wp_commentsmeta
댓글의 모든 메타테이터를 저장한다.

wp_links
링크 관리자 기능에서 추가한 모든 링크를 저장한다.

wp_options
설정 메뉴에서 저장한 모든 웹사이트 옵션값을 저장한다.
또한, 플러그인 옵션과 지금 쓰고 있는 테마와 플러그인, 기타 정보를 저장한다.

wp_postmeta
포스트의 모든 메타데이터를 저장한다.

wp_posts
모든 포스트와 페이지, 미디어 레코드와 수정본을 저장한다. 대부분의 경우 워드프레스 테이블 중에서 가장 크다.

wp_terms
웹사이트에서 정의된 모든 택사노미 용어를 저장한다.

wp_term_relationships
포스트와 링크 등의 콘텐츠와 택사노미 용어를 결합한다.

wp_term_taxonomy
각 용어에 할당된 택소노미를 정의한다.

wp_users
웹사이트에 생성된 모든 사용자 정보를 저장한다. (계정, 비밀번호, 이메일)

wp_usermeta
사용자의 메타데이터를 저장한다. (이름, 별명, 등급)

워드프레스에서 이 데이터베이스를 다루기 위한 클래스가 정의되어 있다.
wpdb 클래스이고 wp-includes/wp-db.php에 있다.
PHP코드에서 워드프레스 데이터베이스를 쿼리 한다는 것은 wpdb 클래스를 사용한다는 뜻이다.

워드프레스 데이터베이스 구조 및 특징

워드프레스는 전 세계적으로 가장 많이 사용되는 CMS 중 하나입니다. 그러나 많은 사용자들이 워드프레스를 이용하면서도 그 기반에 있는 데이터베이스 구조에 대해 정확하게 알지 못하는 경우가 많습니다. 워드프레스 데이터베이스 구조 전반을 이해하는 것은 사이트의 성능을 최적화하고, 여러 문제점을 해결하는 데 중요한 열쇠가 될 수 있습니다.

이 글에서는 워드프레스 데이터베이스 구조의 핵심적인 부분과 그 구조를 최적화하는 방법에 대해 살펴보도록 하겠습니다.

1. 워드프레스 데이터베이스 구조 (주요 테이블)
1.1. wp_posts
개요: 이 테이블은 워드프레스 데이터베이스 구조에서 가장 중심적인 테이블로, 사이트에서 게시하는 모든 글과 페이지의 정보를 저장합니다.
핵심 열:
ID: 각 포스트의 고유 번호입니다.
post_title: 포스트의 제목을 나타냅니다.
post_content: 포스트의 본문 내용을 저장합니다.
post_type: 포스트의 유형(글, 페이지, 첨부 파일 등)을 구분합니다.
기능: 사용자가 생성, 수정, 삭제하는 모든 글과 페이지의 정보를 보관하고, 웹사이트의 프론트엔드에서 해당 콘텐츠를 제공합니다.
1.2. wp_comments
개요: 이 워드프레스 데이터베이스 구조 테이블은 웹사이트 방문자들이 글이나 페이지에 남기는 댓글 정보를 저장합니다.
핵심 열:
comment_ID: 각 댓글의 고유 번호입니다.
comment_post_ID: 댓글이 작성된 포스트의 ID를 나타냅니다.
comment_author: 댓글 작성자의 이름입니다.
comment_content: 댓글의 내용을 저장합니다.
기능: 사용자 간의 소통을 위해 댓글 기능을 제공하며, 관리자는 이 테이블을 통해 댓글의 관리를 진행할 수 있습니다.
1.3. wp_users
개요: 웹사이트의 관리자, 작성자, 구독자 등 사용자의 정보와 관련된 데이터를 저장하는 테이블입니다.
핵심 열:
ID: 각 사용자의 고유 번호입니다.
user_login: 사용자의 로그인 아이디입니다.
user_pass: 사용자의 암호화된 비밀번호입니다.
user_email: 사용자의 이메일 주소를 저장합니다.
기능: 웹사이트에 로그인하는 모든 사용자의 정보를 관리하며, 권한 설정 및 사용자 관리 등의 기능을 수행합니다.
1.4. wp_term_taxonomy 및 wp_term_relationships
개요: 카테고리, 태그, 사용자 정의 택소노미 정보와 그 관계를 저장하는 두 개의 테이블입니다.
핵심 열:
term_id: 각 항목(카테고리, 태그)의 고유 번호입니다.
taxonomy: 항목의 유형(카테고리, 태그 등)을 나타냅니다.
object_id: 관련 포스트의 ID를 저장합니다.
기능: 워드프레스에서의 포스트 분류 및 태깅 기능을 제공하며, 사용자는 이를 통해 콘텐츠를 쉽게 찾을 수 있습니다.
1.5. wp_options
개요: 워드프레스의 기본 설정, 테마, 플러그인 관련 설정 등의 옵션 데이터를 저장합니다.
핵심 열:
option_id: 각 옵션의 고유 번호입니다.
option_name: 설정의 이름을 나타냅니다.
option_value: 해당 설정의 값입니다.
기능: 웹사이트의 전반적인 설정과 관련된 정보를 저장하고 관리합니다. 사용자는 이 테이블을 통해 사이트의 다양한 기능과 디자인을 조정할 수 있습니다.

Database Diagram
2. 워드프레스 데이터베이스 구조 테이블 간의 관계
2.1. wp_posts와 wp_comments
관계의 성격: 각 포스트와 그 포스트에 달린 댓글 간의 관계를 나타냅니다.
연결 열:
wp_posts의 ID: 포스트의 고유 번호입니다.
wp_comments의 comment_post_ID: 댓글이 달린 포스트의 ID를 나타냅니다.
설명: 사용자가 워드프레스 사이트의 특정 글에 댓글을 남기면, wp_comments 테이블의 comment_post_ID 열은 해당 글의 ID를 참조하여 연결됩니다. 이를 통해 어떤 댓글이 어떤 글에 속하는지를 파악할 수 있습니다.
2.2. wp_users와 wp_posts
관계의 성격: 글의 작성자와 해당 글 간의 관계를 나타냅니다.
연결 열:
wp_users의 ID: 사용자의 고유 번호입니다.
wp_posts의 post_author: 글의 작성자 ID입니다.
설명: 워드프레스에서 사용자가 글을 작성할 때, 해당 글의 post_author 열은 글을 작성한 사용자의 ID를 참조합니다. 이 관계를 통해 어떤 사용자가 어떤 글을 작성했는지를 알 수 있습니다.
2.3. wp_posts와 wp_term_relationships
관계의 성격: 글과 해당 글의 카테고리나 태그 간의 관계를 나타냅니다.
연결 열:
wp_posts의 ID: 포스트의 고유 번호입니다.
wp_term_relationships의 object_id: 관련 포스트의 ID를 나타냅니다.
설명: 글이 특정 카테고리나 태그에 속할 때, wp_term_relationships 테이블의 object_id 열은 해당 글의 ID를 참조하여 연결됩니다. 이를 통해 글이 어떤 카테고리나 태그에 속하는지를 파악할 수 있습니다.
2.4. wp_term_taxonomy와 wp_term_relationships
워드프레스 데이터베이스 구조 관계의 성격: 카테고리나 태그의 정보와 해당 카테고리나 태그에 속하는 글 간의 관계를 나타냅니다.
연결 열:
wp_term_taxonomy의 term_id: 각 항목(카테고리, 태그)의 고유 번호입니다.
wp_term_relationships의 term_taxonomy_id: 해당 항목의 고유 번호를 나타냅니다.
설명: wp_term_taxonomy 테이블은 카테고리나 태그의 정보를 저장하며, wp_term_relationships 테이블은 이러한 항목들과 글 간의 관계를 저장합니다. 글이 특정 항목에 속하게 되면, 해당 항목의 term_id가 wp_term_relationships의 term_taxonomy_id를 통해 참조되어 연결됩니다.

3. 데이터베이스 최적화 방법
3.1. 정기적인 데이터베이스 청소
워드프레스 데이터베이스는 시간이 지남에 따라 여러 가지 불필요한 데이터(임시 데이터, 삭제된 글의 버전, 미사용 태그 등)가 축적될 수 있습니다. 이러한 불필요한 데이터가 데이터베이스에 계속 저장되면 데이터베이스의 크기가 커지고 성능이 저하될 수 있습니다. 따라서 정기적으로 데이터베이스를 청소하여 불필요한 데이터를 제거하는 것이 중요합니다.

데이터베이스 청소를 진행할 때는 워드프레스 플러그인 중 ‘WP-Optimize’와 같은 데이터베이스 최적화 전용 플러그인을 활용할 수 있습니다. 이러한 플러그인은 사용자가 직접 SQL 쿼리를 작성할 필요 없이 클릭 몇 번으로 불필요한 데이터를 삭제할 수 있게 도와줍니다.

또한, 청소를 진행하기 전에는 반드시 데이터베이스 백업을 수행해야 합니다. 실수로 필요한 데이터를 삭제하는 경우를 대비하여 원상태로 복구할 수 있도록 백업과 복원 방법에 대해서도 숙지해두는 것이 좋습니다.

3.2. 쿼리 최적화
데이터베이스의 성능을 향상시키는 또 다른 중요한 방법은 쿼리 최적화입니다. 워드프레스 플러그인이나 테마를 사용할 때 일부는 최적화되지 않은 쿼리를 실행할 수 있습니다. 이러한 비효율적인 쿼리는 서버에 부담을 주어 웹사이트의 로딩 속도를 저하시킬 수 있습니다.

쿼리 최적화를 위해 ‘Query Monitor’와 같은 워드프레스 플러그인을 활용할 수 있습니다. 이 플러그인은 워드프레스 사이트에서 실행되는 모든 쿼리를 모니터링하고, 실행 시간, 발생하는 오류, 워드프레스 핵심, 플러그인, 테마에서 어떤 쿼리가 발생하는지 등의 정보를 제공합니다.

쿼리의 성능 문제를 발견하면 해당 쿼리를 최적화하는 것이 중요합니다. 이를 위해 쿼리의 로직을 개선하거나, 인덱스를 추가하여 검색 성능을 향상시킬 수 있습니다.

3.3. 데이터베이스 테이블 인덱싱
데이터베이스에서의 검색 속도를 높이기 위해 인덱싱은 필수적입니다. 인덱스는 데이터베이스 테이블의 칼럼에 대한 포인터나 위치 정보를 저장하는 데이터 구조로, 쿼리 성능을 크게 향상시킵니다.

워드프레스의 기본 설치에서는 주요 테이블의 주요 칼럼에 이미 인덱스가 설정되어 있습니다. 그러나 워드프레스에 여러 플러그인이나 사용자 정의 필드를 추가하면서 새로운 테이블이나 칼럼이 생성될 경우, 이러한 테이블이나 칼럼에 인덱스를 추가하는 것을 고려해야 합니다.

인덱스를 추가할 때는 주의가 필요합니다. 무분별하게 인덱스를 추가하면, 데이터 입력이나 수정 시 성능 저하가 발생할 수 있습니다. 따라서 인덱스는 실제 쿼리 성능에 문제가 발생하는 칼럼에 대해서만 적절히 설정하는 것이 중요합니다.

'IT' 카테고리의 다른 글

매일 git update  (0) 2024.05.21
우분투 서버 백업 추가  (0) 2024.05.18
BoxQ 외장 HDD 마운트  (0) 2024.05.16
우분투 서버 데스크탑 환경 프로그램 삭제  (0) 2024.05.15
Odroid HC2 Ubuntu 업그레이드 후 부팅이 안됨  (0) 2024.05.15