[미니 칼럼] 많이들 사용하시는 워드프레스, 왜 확장성이 뛰어날까요?

2019.05.13 18:32분류없음

몇년 전부터 워드프레스의 점유율이 심상치 않습니다.

아직도 많은 분들이 워드프레스에 관심을 가지고 계시는데요.

 

처음 워드프레스는 블로깅 엔진으로 시작을 하였다고 합니다.

그런데, 이제는 워드프레스로 쇼핑몰도 만들고, 나아가서 커뮤니티까지 확장이 되곤 합니다.

 

어떻게 이런 확장성을 가지고 있을까요?

 

깊게 생각할것 없이, 워드프레스의 내부 엔진은 확장성을 염두에 두고 설계되었기 때문입니다.

 

하지만, 확장성을 고려한 설계로 인해 (비효율적이라 말하기는 어려우나, ) 어느정도 사이트의 규모나 트래픽이 커지면 

캐쉬 처리로도 느려짐이 발생하는 시기가 오게 되며 많은 분들이 워드프레스의 한계를 경험하고 있습니다. 

 

혹시 읽고계시는 여러분도 한계를 느끼고 계신가요? 

그렇다면 축하드려야겠네요! 워드프레스의 한계를 경험하고 계신다면 이미 운영중인 워드프레스 사이트가 일정 수준 이상의 트래픽이 되었다 > 즉, 매출이 있을 것이란 뜻이니까요. ^^

 

자신이 준비중인 아이템을 구현하는데 사용할수 있는 많은 솔루션들이 있습니다.

 

카페24, 워드프레스, 직접개발... 

각각 가격이 천차만별로 차이가 납니다.

그 이유는, 이후 유지보수 등의 효율성 등에서 매우 차이가 나기 때문이라 할수 있겠습니다.

 

워드프레스가 지향하는 확장성은 데이터베이스 구조에서도 나타나는데요. 

깊게 알아보고 싶으신 분은, 아래 소스를 참고하세요. (mysql 기반 sql입니다.)

워드프레스 Database table structure인데, 딱 보면 확장 가능하도록 많은 것을 염두에 둔것으로 보입니다.

다양한 플러그인을 설치하더라도 비슷한 컨셉을 지킨 플러그인들이 많습니다. (WooCommerce 등) 

 

- https://codex.wordpress.org/Database_Description 참고하였습니다.- 워드프레스 기본 베이스의 데이터베이스 구조입니다.

:: DEFAULT DATABASE TABLE

CREATE TABLE `comment_meta`
(
    `id`         BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `comment_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
    `meta_key`   VARCHAR(255)                 DEFAULT NULL,
    `meta_value` LONGTEXT,
    PRIMARY KEY (`id`),
    KEY `comment_id` (`comment_id`),
    KEY `meta_key` (`meta_key`)
);

CREATE TABLE `comment`
(
    `id`        BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `post_id`   BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
    `author_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
    `date`      DATETIME            NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `content`   TEXT                NOT NULL,
    `approved`  VARCHAR(20)         NOT NULL DEFAULT '1',
    `type`      VARCHAR(20)         NOT NULL DEFAULT '',
    `parent_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`),
    KEY `post_id` (`post_id`),
    KEY `approved` (`approved`),
    KEY `parent_id` (`parent_id`)
);

CREATE TABLE `board_attached`
(
    `id`         BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `content_id` BIGINT(20) UNSIGNED NOT NULL,
    `file_key`   VARCHAR(127)        NOT NULL,
    `date`       DATETIME            NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `file_path`  VARCHAR(127)        NOT NULL,
    `file_name`  VARCHAR(127)        NOT NULL,
    PRIMARY KEY (`id`),
    KEY `content_id` (`content_id`)
);

CREATE TABLE `board_content`
(
    `id`             BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `board_id`       BIGINT(20) UNSIGNED NOT NULL,
    `parent_id`      BIGINT(20) UNSIGNED          DEFAULT NULL,
    `author_id`      BIGINT(20) UNSIGNED          DEFAULT NULL,
    `user_display`   VARCHAR(127)                 DEFAULT NULL,
    `title`          VARCHAR(127)        NOT NULL,
    `content`        LONGTEXT            NOT NULL,
    `date`           DATETIME            NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `update`         DATETIME                     DEFAULT NULL,
    `view`           INT(10) UNSIGNED             DEFAULT '0',
    `comment`        INT(10) UNSIGNED             DEFAULT '0',
    `like`           INT(10) UNSIGNED             DEFAULT NULL,
    `unlike`         INT(10) UNSIGNED             DEFAULT NULL,
    `vote`           INT(11)                      DEFAULT NULL,
    `thumbnail_file` VARCHAR(127)                 DEFAULT NULL,
    `thumbnail_name` VARCHAR(127)                 DEFAULT NULL,
    `category1_id`   BIGINT(20) UNSIGNED NOT NULL,
    `category2_id`   BIGINT(20) UNSIGNED NOT NULL,
    `is_secret`      BOOLEAN                      DEFAULT FALSE,
    `is_notice`      BOOLEAN                      DEFAULT FALSE,
    `can_search`     BOOLEAN                      DEFAULT TRUE,
    `password`       VARCHAR(127)                 DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `board_id` (`board_id`),
    KEY `parent_id` (`parent_id`)
);

CREATE TABLE `board_meta`
(
    `board_id` BIGINT(20) UNSIGNED NOT NULL,
    `key`      VARCHAR(127)        NOT NULL,
    `value`    TEXT                NOT NULL,
    UNIQUE KEY `meta_index` (`board_id`, `key`)
);

CREATE TABLE `board_option`
(
    `id`           BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `content_id`   BIGINT(20) UNSIGNED NOT NULL,
    `option_key`   VARCHAR(127)        NOT NULL,
    `option_value` TEXT                NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `content_id` (`content_id`, `option_key`)
);

CREATE TABLE `board_setting`
(
    `id`               BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `board_name`       VARCHAR(127)        NOT NULL,
    `skin`             VARCHAR(127)        NOT NULL,
    `use_comment`      BOOLEAN  DEFAULT TRUE,
    `use_editor`       BOOLEAN  DEFAULT TRUE,
    `permission_read`  VARCHAR(127)        NOT NULL,
    `permission_write` VARCHAR(127)        NOT NULL,
    `use_category`     BOOLEAN  DEFAULT TRUE,
    `category1_list`   TEXT                NOT NULL,
    `category2_list`   TEXT                NOT NULL,
    `page_rpp`         INT(10) UNSIGNED    NOT NULL,
    `created`          DATETIME DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
);

CREATE TABLE `board_comment`
(
    `id`           BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `content_id`   BIGINT(20) UNSIGNED NOT NULL,
    `parent_id`    BIGINT(20) UNSIGNED DEFAULT NULL,
    `user_id`      BIGINT(20) UNSIGNED DEFAULT NULL,
    `user_display` VARCHAR(127)        DEFAULT NULL,
    `content`      LONGTEXT            NOT NULL,
    `like`         INT(10) UNSIGNED    DEFAULT NULL,
    `unlike`       INT(10) UNSIGNED    DEFAULT NULL,
    `vote`         INT(11)             DEFAULT NULL,
    `created`      DATETIME            DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`),
    KEY `content_id` (`content_id`),
    KEY `parent_id` (`parent_id`)
);

CREATE TABLE `board_media`
(
    `id`          BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `media_group` VARCHAR(127) DEFAULT NULL,
    `date`        DATETIME     DEFAULT CURRENT_TIMESTAMP,
    `file_path`   VARCHAR(127) DEFAULT NULL,
    `file_name`   VARCHAR(127) DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `media_group` (`media_group`)
);

CREATE TABLE `board_media_relationship`
(
    `content_id` BIGINT(20) UNSIGNED NOT NULL,
    `media_id`   BIGINT(20) UNSIGNED NOT NULL,
    UNIQUE KEY `content_id` (`content_id`, `media_id`),
    KEY `media_id` (`media_id`)
);

CREATE TABLE `link`
(
    `id`          BIGINT(20) UNSIGNED                  NOT NULL AUTO_INCREMENT,
    `url`         VARCHAR(255) COLLATE UTF8_UNICODE_CI NOT NULL DEFAULT '',
    `name`        VARCHAR(255) COLLATE UTF8_UNICODE_CI NOT NULL DEFAULT '',
    `image`       VARCHAR(255) COLLATE UTF8_UNICODE_CI NOT NULL DEFAULT '',
    `target`      VARCHAR(25) COLLATE UTF8_UNICODE_CI  NOT NULL DEFAULT '',
    `description` VARCHAR(255) COLLATE UTF8_UNICODE_CI NOT NULL DEFAULT '',
    `visible`     VARCHAR(20) COLLATE UTF8_UNICODE_CI  NOT NULL DEFAULT 'Y',
    `owner_id`    BIGINT(20) UNSIGNED                           DEFAULT NULL,
    `rating`      INT(11)                              NOT NULL DEFAULT '0',
    `updated`     DATETIME                             NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `rel`         VARCHAR(255) COLLATE UTF8_UNICODE_CI NOT NULL DEFAULT '',
    `notes`       MEDIUMTEXT COLLATE UTF8_UNICODE_CI   NOT NULL,
    `rss`         VARCHAR(255) COLLATE UTF8_UNICODE_CI NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `visible` (`visible`)
);

CREATE TABLE `option`
(
    `id`       BIGINT(20) UNSIGNED                  NOT NULL AUTO_INCREMENT,
    `name`     VARCHAR(191) COLLATE UTF8_UNICODE_CI NOT NULL DEFAULT '',
    `value`    LONGTEXT COLLATE UTF8_UNICODE_CI     NOT NULL,
    `autoload` BOOLEAN                                       DEFAULT TRUE,
    PRIMARY KEY (`id`),
    UNIQUE KEY `name` (`name`)
);

CREATE TABLE `post_meta`
(
    `id`      BIGINT(20) UNSIGNED                  NOT NULL AUTO_INCREMENT,
    `post_id` BIGINT(20) UNSIGNED                  NOT NULL DEFAULT '0',
    `key`     VARCHAR(255) COLLATE UTF8_UNICODE_CI NOT NULL DEFAULT '',
    `value`   LONGTEXT COLLATE UTF8_UNICODE_CI     NOT NULL,
    PRIMARY KEY (`id`),
    KEY `post_id` (`post_id`),
    KEY `key` (`key`)
);

CREATE TABLE `post`
(
    `id`               BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `author_id`        BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
    `date`             DATETIME            NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `title`            TEXT                NOT NULL,
    `content`          LONGTEXT            NOT NULL,
    `excerpt`          TEXT                NOT NULL,
    `status`           VARCHAR(20)         NOT NULL DEFAULT 'publish',
    `comment_status`   VARCHAR(20)         NOT NULL DEFAULT 'open',
    `password`         VARCHAR(20)         NOT NULL DEFAULT '',
    `name`             VARCHAR(200)        NOT NULL DEFAULT '',
    `modified`         DATETIME            NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `content_filtered` LONGTEXT            NOT NULL,
    `parent`           BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
    `menu_id`          INT(11)             NOT NULL DEFAULT '0',
    `type`             VARCHAR(20)         NOT NULL DEFAULT 'post',
    `mime_type`        VARCHAR(100)        NOT NULL DEFAULT '',
    `comment_count`    BIGINT(20)          NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`),
    KEY `name` (`name`),
    KEY `type_status_date` (`type`, `status`, `date`, `id`),
    KEY `parent` (`parent`),
    KEY `author_id` (`author_id`)
);

CREATE TABLE `user_meta`
(
    `id`      BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `user_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
    `key`     VARCHAR(255)                 DEFAULT NULL,
    `value`   LONGTEXT,
    PRIMARY KEY (`id`),
    KEY `user_id` (`user_id`),
    KEY `key` (`key`)
);

CREATE TABLE `user`
(
    `id`             BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `login`          VARCHAR(60)         NOT NULL DEFAULT '',
    `password`       VARCHAR(255)        NOT NULL DEFAULT '',
    `name`           VARCHAR(50)         NOT NULL DEFAULT '',
    `email`          VARCHAR(100)        NOT NULL DEFAULT '',
    `url`            VARCHAR(100)        NOT NULL DEFAULT '',
    `registered`     DATETIME            NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `activation_key` VARCHAR(255)        NOT NULL DEFAULT '',
    `status`         INT(11)             NOT NULL DEFAULT '0',
    `display_name`   VARCHAR(250)        NOT NULL DEFAULT '',
    PRIMARY KEY (`id`),
    KEY `login_key` (`login`)
);
1 2 3 4 5 6 7 8 9 ··· 51