WordPress가 MySQL을 사용하는 방법 이해

게시 됨: 2014-09-30

일반적으로 WordPress는 두 부분으로 나눌 수 있습니다.

  • WordPress 사이트의 모양과 느낌을 생성하는 논리 및 템플릿
  • 모든 콘텐츠를 저장하고 모든 것을 지원하는 MySQL 데이터베이스

그러나 MySQL은 무엇입니까?

MySQL은 엄청나게 강력하지만 WordPress를 지원하는 스톡 데이터베이스도 가볍고 강력합니다. WordPress와 같은 강력한 CMS의 가장 좋은 점 중 하나는 사용자의 모든 데이터베이스 관리를 처리하고 이를 최종 사용자로부터 추상화한다는 것입니다. WordPress 사용자, 심지어 디자이너도 데이터베이스 작동 방식을 잘 알 필요는 없습니다. 그러나 WordPress 작동 방식을 실제로 이해하는 데 관심이 있다면 이 게시물이 적합합니다.

먼저 MySQL이 무엇인지에 대해 알아보겠습니다. 특히 MySQL은 관계형 데이터베이스 관리 시스템 또는 줄여서 RDBMS입니다. RDBMS는 SQL(Structured Query Language)을 처리하고 실행하도록 설계된 컨테이너입니다. SQL은 데이터베이스를 강화하는 것입니다. SQL은 데이터베이스의 구조와 형식을 제어하고 해당 데이터베이스에서 수행되는 삽입, 삭제, 수정 등도 기록합니다.

MySQL은 어떻게 작동합니까?

하지만 이는 모두 약간의 기술적인 사항이므로 한발 물러서서 SQL 데이터베이스가 어떻게 생겼는지 생각해 보겠습니다.

SQL은 정보 테이블로 구성됩니다. 일반적으로 표를 Excel의 스프레드시트로 생각하십시오. 행과 열은 미리 정해진 구조에 따라 정보를 저장합니다. 그러나 Excel 스프레드시트와 달리 SQL 데이터베이스의 열( 또는 필드 라고도 함)은 미리 정의되고 분류됩니다.

WordPress에서 정의된 테이블의 구조 또는 열은 미리 설정되어 있습니다. 플러그인이나 핵심 업데이트가 특별히 변경하지 않는 한 사이트가 커도 변경되지 않습니다. 열은 미리 정의될 뿐만 아니라 해당 유형도 레코드를 입력하기 전에 정의됩니다. 숫자(정수의 경우 INT) 단어 상자(텍스트 필드의 경우 TEXT 또는 VARCHAR) 및 기타(날짜 및 시간의 경우 DATETIME)와 같은 유형은 데이터베이스에 사전 설정되어 있습니다. WordPress(또는 해커)가 사전 지정된 패턴과 일치하지 않는 데이터를 데이터베이스에 추가하려고 시도하면 데이터베이스는 데이터를 수락하지 않습니다.

SQL 데이터베이스의 또 다른 거대한 기능은 RDBMS의 약어인 관계형 기능에서 찾을 수 있습니다.

SQL 테이블과 테이블의 특정 키에도 다른 테이블 및 키와 관련시킬 수 있는 기능이 있습니다. 이를 통해 사용자는 서로 밀접하게 관련된 데이터베이스를 구축할 수 있으며, 이는 더 나은 조직과 더 큰 효율성을 의미합니다.

나중에 볼 트윗 데이터베이스를 구축한다고 가정해 보겠습니다. 트윗의 콘텐츠, 즐겨찾기 수 등 저장한 특정 트윗에 대한 정보가 포함된 테이블을 작성할 수 있습니다. 또한 트윗을 한 사람에 대한 데이터를 저장하고 싶습니다. 이름이 무엇인지, 팔로어가 몇 명인지 등입니다.

관계형 데이터베이스를 사용하여 특정 트윗에 대한 모든 데이터를 포함하는 트윗 테이블을 만든 다음 해당 트윗을 보낸 사람에 대한 모든 정보를 포함하는 사용자 테이블을 만들 수 있습니다. 그런 다음 두 테이블의 키를 연관시킬 수 있으므로 데이터베이스(따라서 귀하는)가 어떤 사용자가 어떤 트윗과 연관되어 있는지 알 수 있습니다.

WordPress는 관계형 테이블을 사용하여 많은 데이터를 연결합니다. 예를 들어 wp_posts 테이블에는 WordPress의 단일 게시물에 대한 모든 관련 데이터가 포함되어 있습니다. wp_comments 테이블에는 누구나 WordPress 게시물에 남긴 모든 댓글이 포함되어 있지만 wp_posts와 wp_comments는 동일한 데이터베이스에 있는 두 개의 다른 테이블입니다. WordPress는 wp_comments 테이블의 특정 키와 wp_posts 테이블 간의 관계를 구축하여 WordPress가 어떤 댓글이 어떤 블로그 게시물에 속하는지 파악할 수 있도록 합니다.

이 데이터베이스 및 테이블 구조는 처음 WordPress를 설정할 때 MySQL 데이터베이스 내에 구축됩니다. 거기에서 WordPress는 사이트가 작동하도록 각 테이블의 값 또는 행을 조작합니다.

예를 들어, 새 사용자를 만들 때 사용자에 대한 모든 데이터(예: 사용자 이름, 암호 및 권한 수준)가 포함된 행이 wp_users 테이블에 삽입됩니다. 사용자가 로그인하면 워드프레스는 데이터베이스에 접속하여 로그인 화면에서 제공되는 정보를 데이터베이스와 대조합니다. 일치하지 않으면 로그인이 거부됩니다.

MySQL이 캐싱을 사용하는 방법

WP 캐싱 없음

캐싱이 없는 WordPress 및 MySQL.

동일한 개념이 게시물에 적용됩니다. 새 게시물을 작성하고 저장할 때 WordPress는 해당 게시물을 wp_posts 데이터베이스에 행으로 저장합니다. 이와 반대의 경우도 마찬가지라는 점에 유의하는 것이 중요합니다. 웹사이트를 보는 사람이 콘텐츠가 있는 페이지에 액세스하면 WordPress는 데이터베이스에 액세스하고 테이블에서 데이터를 가져온 다음 화면에 렌더링해야 합니다. 몇몇 방문자의 경우 일반 서버는 이 로드를 잘 처리할 수 있습니다. 그러나 많은 사람들이 웹사이트에서 콘텐츠를 요청하는 경우 WordPress와 데이터베이스는 모든 요청을 처리할 수 없으며 사이트가 접힐 수 있습니다. 그렇기 때문에 캐싱 엔진이나 플러그인을 사용하는 것이 중요합니다.

다시 약간의 기술적인 지식을 얻으려면 계산 비용을 이해하는 것이 중요합니다. 이 경우 비용은 돈을 쓰거나 물건을 사는 것을 의미하지 않습니다. 이는 시간, 사용 가능한 메모리, 수행해야 하는 디스크 작업 수와 같이 컴퓨팅 속도에 중요한 여러 가지 요소를 평가하는 것을 의미합니다.

MySQL은 이 모든 정보를 저장된 컴퓨터의 하드 드라이브에 있는 데이터베이스에 저장합니다. 이것은 고장에 강하고 저장 공간이 많으며 실행 중인 컴퓨터의 메모리를 파괴하지 않기 때문에 정말 훌륭한 시스템입니다. 실행 중인 컴퓨터의 RAM에 모든 것을 저장하는 Redis와 같은 데이터베이스와 비교할 때 MySQL은 많은 안정성을 제공하고 데이터 손실에 대한 걱정을 없애줍니다.

그러나 MySQL의 안정성에는 속도라는 대가가 따릅니다. WordPress가 데이터베이스의 동일한 키에 계속해서 액세스하도록 하는 것은 "비싼" 것으로 간주되어야 합니다. 데이터베이스에 액세스하고, 디스크 작업을 수행하고, 해당 데이터를 다시 가져와서 렌더링하는 데 많은 비용이 듭니다.
WP 캐싱

캐싱이 포함된 WordPress 및 MySQL. 참고: 웹, MySQL 및 캐싱 서버는 일반적으로 동일한 서버에서 동시에 실행됩니다. 이 다이어그램은 설명을 위해 이들을 구분합니다.

캐싱은 이 문제에 대한 훌륭한 솔루션입니다. 최종 렌더링된 HTML을 사용하여 30초 정도의 짧은 시간 동안 유지합니다. 누군가가 동일한 페이지를 요청하면 캐싱 엔진은 데이터베이스와 상호 작용하는 전체 프로세스를 건너뛰고 이미 렌더링된 페이지를 제공합니다. 그렇기 때문에 WordPress 캐싱 플러그인을 설치하거나 웹 사이트를 구축할 때 캐싱을 처리하는 관리 호스팅 서비스를 사용하는 것이 중요합니다. 예를 들어 게시물이 Reddit의 첫 페이지에 올라오면 캐싱을 설치하지 않고도 모든 새로운 트래픽의 압박으로 사이트가 접힐 것입니다.

WordPress의 11가지 MySQL 테이블

WP3.8-ERD

WordPress 3.8 기본 MySQL 테이블. 이미지 제공 WordPress Codex, GPL 라이선스

이제 이러한 데이터베이스와 테이블 중 일부가 실제로 어떻게 작동하는지 이해했으므로 WordPress가 기본적으로 설정하고 사용하는 11개의 특정 테이블에 대해 이야기해 보겠습니다.

  • wp_commentmeta – 키 및 값과 같은 주석과 관련된 모든 메타데이터는 이 데이터베이스에 저장됩니다. 작성자 및 제출 날짜와 같은 메타 데이터가 아니라 WordPress가 가끔 사용하는 기타 데이터를 보유합니다. 이 데이터는 때때로 선택 사항이거나 사용되지 않습니다. wp_comments와 직접 관련이 있습니다.

  • wp_comments – 이 테이블에는 WordPress 게시물 및 페이지에 작성된 모든 댓글은 물론 작성자, 이메일 주소, 제출 날짜 및 댓글이 남겨진 게시물과 같은 모든 관련 데이터가 포함됩니다.

  • wp_links – 이 데이터베이스는 WordPress 게시물의 링크 데이터를 포함하는 데 사용되지만 몇 가지 WordPress 버전 이전에 사용이 중단되었습니다. 아직 거기에 있지만 이것이 사용되는 것을 볼 수 있을지는 의문입니다.

  • wp_options – 설정 패널에서 설정된 모든 옵션은 이 데이터베이스에 저장됩니다.

  • wp_postmeta – wp_commentmeta와 마찬가지로 wp_postmeta에는 게시물에 대한 선택적 데이터가 포함됩니다. 특정 사용 사례가 없는 한 이 사례는 많이 활용되지 않을 것입니다.

  • wp_posts – wp_posts에는 게시물 및 관련 데이터에 대한 모든 데이터가 포함됩니다. 이 테이블은 매우 많이 사용되며 사이트의 모든 콘텐츠를 포함합니다.

  • wp_terms – 이 테이블은 게시물이 분류되는 태그 및 카테고리와 같은 콘텐츠를 저장합니다.

  • wp_term_relationships – 이 테이블은 게시물과 관련 카테고리 및 태그 간의 관계를 유지 관리하는 역할을 합니다. 여기에도 MySQL 관계가 설정되어 있습니다. 테이블은 실제로 wp_term_taxonomy 테이블을 통해 게시물과 용어 모두에 연결됩니다.

  • wp_term_taxonomy – 게시물과 연결된 분류 유형 추적을 처리합니다. wp_terms 및 wp_term_relationships에 다시 연결되고 범주, 태그 등과의 연결만 기록합니다.

  • wp_usermeta – 또 다른 메타 테이블인 wp_usermeta는 wp_users와 관련된 선택적 메타데이터를 처리합니다.

  • wp_users – wp_users에는 사용자 이름, 관리자 권한 및 암호화된 암호와 같은 정보를 포함하여 WordPress 사용자와 관련된 모든 데이터가 포함됩니다.

MySQL은 처음에는 위협적으로 보일 수 있지만 WordPress를 사용하면 테이블이 많은 의미를 가질 뿐만 아니라 속도와 효율성을 촉진하는 방식으로 배치됩니다. 다음에 WordPress 사이트에서 작업할 때 사이트를 지원하는 MySQL 데이터베이스의 구조에 대해 생각하십시오. 사이트의 데이터베이스를 철저히 이해하면 사이트가 안전하고 견고하며 매우 효율적임을 확인할 수 있습니다.