회원가입 | 고객센터 |
DESIGNONEX
디자인원엑스
About
Service
Q&AN
PR리그
자유게시판N
갤러리N
포인트게임
공지사항
통계
로그인 회원가입
고객센터
14. 데이터베이스

DB스키마

A Administrator
2026.05.12 14:37(수정됨) 22 0

1장. 데이터베이스 스키마 개요

DXCMS v8.1.0의 데이터베이스는 MySQL 5.6+ / MariaDB 10.1+ 를 지원합니다. 모든 테이블은 utf8mb4_unicode_ci 문자셋과 InnoDB 엔진을 사용합니다.


1.1 전체 테이블 목록

# 테이블명 분류 설명
1 dx_members 회원 회원 기본 정보, 포인트, 경험치, 소셜 계정
2 dx_boards 게시판 게시판 설정 (권한, 스킨, 기능 ON/OFF)
3 dx_posts 게시판 게시글 (FULLTEXT 인덱스, 인기점수)
4 dx_comments 게시판 댓글 (트리 구조, depth 기반)
5 dx_post_files 게시판 첨부파일 (썸네일 경로 포함)
6 dx_post_links 게시판 게시글 다중 링크
7 dx_link_clicks 게시판 링크 클릭 로그 (IP+일자 중복 방지)
8 dx_categories 게시판 무한 분류 카테고리 (path 기반)
9 dx_board_groups 게시판 게시판 그룹
10 dx_post_drafts 게시판 글쓰기 임시저장
11 dx_social_accounts 인증 소셜 로그인 연결 계정
12 dx_member_logs 인증 로그인/로그아웃 이벤트 로그
13 dx_member_sessions 인증 회원 접속 세션 상세 기록
14 dx_session_rescue 인증 세션 만료 긴급 구조 임시저장 ★신규
15 dx_memos 소통 회원 간 쪽지
16 dx_notifications 소통 실시간 알림 (소켓 + DB 병행)
17 dx_friends 소통 친구/차단 관계 (단방향)
18 dx_likes 소통 좋아요 (게시글/댓글 대상)
19 dx_scraps 소통 게시글 스크랩
20 dx_dm_messages 소통 1:1 채팅 메시지
21 dx_point_log 포인트 포인트 변동 내역
22 dx_exp_log 포인트 경험치 변동 내역
23 dx_level_config 포인트 레벨 설정 (기본 150레벨)
24 dx_shop_items 포인트샵 포인트샵 상품
25 dx_shop_purchases 포인트샵 구매 내역
26 dx_settings 시스템 시스템 설정 키-값 스토어
27 dx_pages 시스템 관리 페이지
28 dx_menus 시스템 메뉴 (트리 구조)
29 dx_themes 시스템 테마 상태 추적
30 dx_plugins 시스템 플러그인 (공유/설정 포함)
31 dx_sites 시스템 멀티사이트
32 dx_popups 시스템 팝업
33 dx_global_notices 시스템 전체 공지 (게시판 상단 표시)
34 dx_visits 통계 일별 방문자 집계
35 dx_visit_logs 통계 방문자 상세 로그 (봇/브라우저 분석)
36 dx_search_keywords 통계 검색어 통계 (FULLTEXT)
37 dx_api_keys API 소켓 API 키 관리
38 dx_api_logs API API 접근 로그
39 dx_surveys 설문 설문 기본 정보
40 dx_survey_questions 설문 설문 문항
41 dx_survey_answers 설문 설문 응답
42 dx_survey_votes 설문 설문 참여 중복 방지
43 dx_download_log 기타 파일 다운로드 이력
44 dx_sms_logs 기타 SMS 발송 로그


1.2 공통 설계 규칙

엔진:      InnoDB (트랜잭션, 외래키 지원)
문자셋:    utf8mb4_unicode_ci (이모지 지원)
PK 전략:  INT AUTO_INCREMENT (일반 테이블)
           BIGINT 밀리초 타임스탬프 (dx_posts, dx_comments)
           BIGINT microtime (dx_api_keys)
논리 삭제: status=0 또는 is_deleted=1 (물리 삭제 최소화)
소프트 삭제 예외: dx_likes, dx_scraps, dx_link_clicks (물리 삭제)
시각:      DATETIME (timezone: Asia/Seoul)
인덱스:    복합 인덱스 우선 (쿼리 패턴 기반)
FULLTEXT:  dx_posts(title,content), dx_search_keywords(keyword)


2장. 회원 및 인증 테이블


2.1 dx_members — 회원

사이트 회원의 모든 기본 정보를 저장합니다. 포인트, 경험치, 레벨, 소셜 SNS 정보, 프로필까지 통합 관리합니다. 탈퇴는 status=0으로 처리하며 데이터를 보존합니다.
 
컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK — 회원 고유 ID
login_id VARCHAR(50) NO   UNIQUE — 로그인 아이디 (영문/숫자 4~50자)
password VARCHAR(255) NO   BCrypt 해시. 소셜 전용 계정은 랜덤 해시
name VARCHAR(100) NO   이름 또는 닉네임
email VARCHAR(191) NO   UNIQUE — 이메일 (소셜 미연동 시 @social.local)
phone VARCHAR(30) YES NULL 전화번호 (선택)
role ENUM(member,manager,admin) NO member 권한. admin만 관리자 접근
status TINYINT(1) NO 1 1=활성, 0=비활성(탈퇴). 0이면 로그인 불가
profile_img VARCHAR(500) YES NULL "profiles/{파일명}" 형식 (GD 400×400 리사이즈)
point INT(11) NO 0 현재 보유 포인트
exp INT(11) NO 0 누적 경험치
level SMALLINT(5) NO 1 현재 레벨 (dx_level_config 기준)
last_login DATETIME YES NULL 마지막 로그인 일시
last_ip VARCHAR(45) YES NULL 마지막 로그인 IP (IPv6 대응 45자)
login_fail TINYINT(3) NO 0 연속 로그인 실패 횟수. 10 이상이면 계정 잠금
join_date DATETIME NO   가입 일시. HMAC 토큰 생성에 사용 (불변)
reg_ip VARCHAR(45) YES NULL 가입 시 IP
reg_ua VARCHAR(500) YES NULL 가입 시 User-Agent
reg_device VARCHAR(10) YES NULL 가입 디바이스: pc|mobile|tablet
reg_os VARCHAR(50) YES NULL 가입 OS (Windows, macOS, Android 등)
reg_browser VARCHAR(50) YES NULL 가입 브라우저
memo TEXT YES NULL 관리자 메모
bio TEXT YES NULL 자기소개 (마이페이지 표시)
website VARCHAR(500) YES NULL 개인 사이트 URL
blog VARCHAR(500) YES NULL 블로그 URL
sns_instagram VARCHAR(200) YES NULL Instagram URL
sns_twitter VARCHAR(200) YES NULL Twitter/X URL
sns_facebook VARCHAR(200) YES NULL Facebook URL
sns_youtube VARCHAR(200) YES NULL YouTube URL
sns_github VARCHAR(200) YES NULL GitHub URL
remember_token VARCHAR(128) YES NULL Remember Me 64자 hex 토큰 (migrate 추가)
remember_expires DATETIME YES NULL Remember Me 만료 일시 (migrate 추가)
 
인덱스명 종류 컬럼
PRIMARY KEY PK id
uk_login_id UNIQUE login_id
uk_email UNIQUE email
idx_role INDEX role
idx_status INDEX status
idx_level INDEX level
idx_join_date INDEX join_date — 가입일 정렬 최적화 (v5.0.0)

💡 remember_token / remember_expires 컬럼
schema.sql에는 없고 migrate.php에서 ALTER TABLE로 추가됩니다.
신규 설치 시에는 migrate.php 실행 필요.
Auth::tryRememberMe()와 /api/session_extend가 이 컬럼을 사용합니다.


2.2 dx_social_accounts — 소셜 로그인 연결

카카오, 네이버, 구글, GitHub 소셜 계정과 DXCMS 회원을 연결합니다. 한 회원이 여러 소셜 계정을 연결할 수 있으며, (provider, provider_id) 조합이 UNIQUE입니다.
 
컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
member_id INT(11) UNSIGNED NO   dx_members.id — 연결된 DXCMS 회원
provider VARCHAR(30) NO   kakao | naver | google | github
provider_id VARCHAR(191) NO   소셜 서비스 내 사용자 고유 ID
email VARCHAR(191) YES NULL 소셜 계정 이메일
name VARCHAR(100) YES NULL 소셜 계정 이름/닉네임
profile_img VARCHAR(500) YES NULL 소셜 프로필 이미지 URL
access_token TEXT YES NULL 액세스 토큰 (보안상 빈 문자열로 저장)
created_at DATETIME NO   최초 연결 일시
last_login DATETIME YES NULL 이 소셜 계정으로 마지막 로그인 시각
 
인덱스명 종류 컬럼
PRIMARY KEY PK id
uk_provider UNIQUE provider, provider_id
idx_member_id INDEX member_id


2.3 dx_member_logs — 로그인/로그아웃 이벤트

컬럼명 타입 NULL 기본값 설명
id BIGINT(20) UNSIGNED AUTO_INCREMENT NO AUTO PK
member_id INT(11) UNSIGNED NO   dx_members.id
event ENUM(login,logout,session_expire) NO   이벤트 종류
ip VARCHAR(45) YES NULL 접속 IP
user_agent VARCHAR(300) YES NULL 브라우저/OS 정보
created_at DATETIME NO   이벤트 발생 시각


2.4 dx_member_sessions — 접속 세션 기록

로그인부터 로그아웃(또는 세션 만료)까지의 접속 이력을 기록합니다. session_key는 SHA256(session_id)로 원본 세션 ID를 노출하지 않습니다.
 
컬럼명 타입 NULL 기본값 설명
id BIGINT(20) UNSIGNED AUTO_INCREMENT NO AUTO PK
member_id INT(11) UNSIGNED NO   dx_members.id
session_key VARCHAR(64) NO   UNIQUE — SHA256(session_id)
login_at DATETIME NO   로그인 시각
logout_at DATETIME YES NULL 로그아웃 시각 (NULL=접속중 or 만료)
last_seen_at DATETIME NO   마지막 요청 시각
end_reason ENUM(logout,session_expire,unknown) YES NULL 종료 사유
ip VARCHAR(45) YES NULL 접속 IP
user_agent VARCHAR(300) YES NULL 브라우저/OS
duration_sec INT(11) UNSIGNED YES NULL 총 접속 시간 (초)


2.5 dx_session_rescue — 세션 긴급 구조 ★ 신규

v8.2.1에서 추가된 테이블입니다. 세션 만료 시 글쓰기/수정 중이던 내용을 임시 보관하고, 재로그인 후 복원하는 데 사용합니다. 24시간 후 자동 만료됩니다.

★ v8.2.1 신규 테이블
글쓰기/수정 페이지 진입 즉시 rescue_key와 함께 레코드를 INSERT합니다.
30초마다 JS가 제목과 내용을 UPDATE합니다.
세션 만료 시 로그인 후 rescue_key로 내용을 복원하고 DELETE합니다.
extend/bottom/01_session_rescue_gc.php가 2% 확률로 만료 레코드를 자동 삭제합니다.

 
컬럼명 타입 NULL 기본값 설명
id BIGINT(20) UNSIGNED AUTO_INCREMENT NO AUTO PK
rescue_key VARCHAR(32) NO   UNIQUE — 32자 hex UUID. URL 파라미터로 전달
member_id BIGINT(20) UNSIGNED NO 0 dx_members.id — 해당 회원 ID
board_key VARCHAR(100) NO   작성 중인 게시판 키
board_name VARCHAR(200) NO   게시판 한글 이름 (복원 시 토스트 메시지에 표시)
edit_post_id VARCHAR(32) NO 0 수정 중인 게시글 ID. 신규 글이면 0
title VARCHAR(255) NO   임시 저장된 제목
content MEDIUMTEXT YES NULL 임시 저장된 본문 (에디터 HTML 포함)
created_at DATETIME NO   레코드 생성 시각 (진입 즉시)
updated_at DATETIME NO   마지막 업데이트 시각 (30초마다 갱신)
expires_at DATETIME NO   만료 시각 (생성 후 24시간)
 
인덱스명 종류 컬럼
PRIMARY KEY PK id
uk_rescue_key UNIQUE rescue_key
idx_expires INDEX expires_at — GC 쿼리 최적화
idx_member INDEX member_id


3장. 게시판 관련 테이블


3.1 dx_boards — 게시판 설정

게시판의 모든 설정값을 저장합니다. board_key가 URL로 사용되며 UNIQUE입니다.
 
컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
board_key VARCHAR(100) NO   UNIQUE — URL 경로명 (예: free, notice)
board_name VARCHAR(191) NO   게시판 표시 이름
description TEXT YES NULL 게시판 설명
board_type ENUM(normal,gallery,qa,faq,news) NO normal 게시판 유형
skin VARCHAR(100) NO default 게시판 스킨
group_id INT(11) UNSIGNED NO 0 dx_board_groups.id
read_level TINYINT(1) NO 0 읽기 권한: 0=전체, 1=회원, 9=관리자
write_level TINYINT(1) NO 1 쓰기 권한: 1=회원, 9=관리자
comment_level TINYINT(1) NO 1 댓글 권한
per_page TINYINT(3) NO 20 페이지당 게시글 수
use_comment TINYINT(1) NO 1 댓글 사용 여부
use_file TINYINT(1) NO 1 파일 첨부 사용 여부
use_notice TINYINT(1) NO 1 공지 기능 사용 여부
use_category TINYINT(1) NO 0 카테고리 사용 여부
use_tag TINYINT(1) NO 0 태그 사용 여부
use_anonymous TINYINT(1) NO 0 비회원 작성 허용
use_survey TINYINT(1) NO 0 설문 기능 사용
file_count TINYINT(2) NO 5 최대 첨부파일 수
thumb_type VARCHAR(20) NO crop 썸네일 유형: fit|crop|width|height
thumb_w SMALLINT(5) NO 300 썸네일 가로(px)
thumb_h SMALLINT(5) NO 200 썸네일 세로(px)
site_domain VARCHAR(191) NO   멀티사이트 도메인 (빈값=전체 공통)
status TINYINT(1) NO 1 1=활성, 0=비활성
sort_order SMALLINT(5) NO 0 정렬 순서
created_at DATETIME NO   생성 일시


3.2 dx_posts — 게시글

게시글의 내용과 메타 정보를 저장합니다. id는 밀리초 타임스탬프로 생성되어 시간순 정렬이 가능합니다. FULLTEXT 인덱스로 전문 검색을 지원합니다.
 
컬럼명 타입 NULL 기본값 설명
id BIGINT(20) UNSIGNED NO   PK — 밀리초 타임스탬프 (AUTO_INCREMENT 아님)
board_id INT(11) UNSIGNED NO   dx_boards.id
parent_id BIGINT(20) UNSIGNED NO 0 답글 부모 ID (0=최상위)
member_id INT(11) UNSIGNED NO 0 dx_members.id (비회원=0)
author_name VARCHAR(100) YES NULL 비회원 작성자 이름
author_pass VARCHAR(255) YES NULL 비회원 비밀번호 (BCrypt)
title VARCHAR(191) NO   게시글 제목
content LONGTEXT NO   게시글 본문 (HTML, LONGTEXT)
category VARCHAR(100) YES NULL 카테고리
tags VARCHAR(191) YES NULL 태그 (쉼표 구분)
thumbnail VARCHAR(191) YES NULL 대표 썸네일 경로
view_count INT(11) NO 0 조회수
like_count INT(11) NO 0 좋아요 수 (비정규화 캐시)
comment_count INT(11) NO 0 댓글 수 (비정규화 캐시)
is_notice TINYINT(1) NO 0 공지 여부
is_secret TINYINT(1) NO 0 비밀글 여부
dl_level TINYINT(1) NO 0 다운로드 권한: 0=전체, 1=회원, 2=관리자
dl_limit INT(11) NO 0 1인당 최대 다운로드 횟수 (0=무제한)
dl_point INT(11) NO 0 다운로드 시 차감 포인트
ip VARCHAR(45) YES NULL 작성자 IP
status TINYINT(1) NO 1 1=정상, 0=삭제
popular_score INT(11) NO 0 인기점수 (조회×1 + 좋아요×5 + 댓글×3, 7일 감쇠)
created_at DATETIME NO   작성 일시
updated_at DATETIME YES NULL 수정 일시
 
인덱스명 종류 컬럼
PRIMARY KEY PK id
idx_board_id INDEX board_id
idx_member_id INDEX member_id
idx_status INDEX status
idx_notice INDEX is_notice
idx_created INDEX created_at
idx_board_status_id COMPOSITE board_id, status, id — 목록 쿼리 최적화
idx_popular_score COMPOSITE board_id, status, popular_score — 인기글 정렬
ft_title_content FULLTEXT title, content — MATCH AGAINST 전문검색


3.3 dx_comments — 댓글

댓글과 대댓글을 저장합니다. depth와 parent_id로 트리 구조를 구현합니다. id는 밀리초 타임스탬프입니다.
 
컬럼명 타입 NULL 기본값 설명
id BIGINT(20) UNSIGNED NO   PK — 밀리초 타임스탬프
post_id BIGINT(20) UNSIGNED NO   dx_posts.id
parent_id BIGINT(20) UNSIGNED NO 0 부모 댓글 ID (0=최상위 댓글)
member_id INT(11) UNSIGNED NO 0 dx_members.id (비회원=0)
author_name VARCHAR(100) YES NULL 비회원 작성자 이름
author_pass VARCHAR(255) YES NULL 비회원 비밀번호 (BCrypt)
content TEXT NO   댓글 내용
ip VARCHAR(45) YES NULL 작성자 IP
depth TINYINT(3) NO 0 댓글 깊이 (0=댓글, 1=대댓글)
status TINYINT(1) NO 1 1=정상, 0=삭제
created_at DATETIME NO   작성 일시


3.4 dx_post_files — 첨부파일

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
post_id BIGINT(20) UNSIGNED NO 0 dx_posts.id
orig_name VARCHAR(191) NO   원본 파일명
save_name VARCHAR(191) NO   저장 파일명 (랜덤화)
save_path VARCHAR(191) NO   저장 경로
file_size INT(11) NO 0 파일 크기 (bytes)
file_ext VARCHAR(20) NO   파일 확장자
download_count INT(11) NO 0 다운로드 횟수
is_thumb TINYINT(1) NO 0 썸네일 여부
thumb_path VARCHAR(191) YES NULL 썸네일 저장 경로
created_at DATETIME NO   업로드 일시


3.5 dx_post_links — 게시글 다중 링크

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
post_id BIGINT(20) UNSIGNED NO   dx_posts.id
url VARCHAR(500) NO   링크 URL
label VARCHAR(100) YES NULL 링크 제목 (선택)
sort_order SMALLINT(5) NO 0 정렬 순서
click_count INT(11) UNSIGNED NO 0 총 클릭 수 (비정규화)
created_at DATETIME NO   생성 일시


3.6 dx_link_clicks — 링크 클릭 로그

IP와 날짜 조합으로 중복 클릭을 방지합니다. (link_id, ip, click_date) 가 UNIQUE 키입니다.
 
컬럼명 타입 NULL 기본값 설명
id BIGINT(20) UNSIGNED AUTO_INCREMENT NO AUTO PK
link_id INT(11) UNSIGNED NO   dx_post_links.id
ip VARCHAR(45) NO   클릭한 IP
click_date DATE NO   클릭 날짜 (중복 방지 기준)
created_at DATETIME NO   클릭 일시


3.7 dx_categories — 카테고리 (무한 분류)

path 컬럼에 조상 ID 경로를 저장하여 트리 탐색을 O(1)로 처리합니다. 예: path="0/5/12" 는 루트→5→12 순서를 의미합니다.
 
컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
board_id INT(11) UNSIGNED NO 0 0=공통 카테고리, >0=특정 게시판 전용
parent_id INT(11) UNSIGNED NO 0 부모 카테고리 ID (0=최상위)
name VARCHAR(191) NO   카테고리 이름
slug VARCHAR(100) NO   URL 슬러그
depth TINYINT(3) NO 0 깊이 (0=최상위)
path VARCHAR(500) NO   조상 ID 경로 (예: 0/5/12)
color VARCHAR(20) NO blue 카테고리 색상
badge_color VARCHAR(20) NO blue 배지 색상
show_in_list TINYINT(1) NO 1 목록 페이지 표시 여부
show_in_view TINYINT(1) NO 1 뷰 페이지 표시 여부
sort_order SMALLINT(5) NO 0 정렬 순서
status TINYINT(1) NO 1 활성 여부
created_at DATETIME NO   생성 일시


3.8 dx_post_drafts — 글쓰기 임시저장

사용자가 명시적으로 저장하는 임시저장입니다. 세션 긴급 구조(dx_session_rescue)와는 별개로 관리됩니다.
 
컬럼명 타입 NULL 기본값 설명
id BIGINT(20) UNSIGNED AUTO_INCREMENT NO AUTO PK
member_id BIGINT(20) UNSIGNED NO 0 회원 ID (비회원=0)
session_id VARCHAR(128) NO   비회원 세션 ID
board_key VARCHAR(100) NO   게시판 키
title VARCHAR(255) NO   임시저장 제목
content MEDIUMTEXT YES NULL 임시저장 본문
category VARCHAR(100) NO   카테고리
tags VARCHAR(500) NO   태그
created_at DATETIME NO   최초 저장 일시
updated_at DATETIME NO   마지막 저장 일시


4장. 소통 관련 테이블


4.1 dx_memos — 쪽지

회원 간 1:1 쪽지입니다. 발신자/수신자 각각 독립적으로 삭제할 수 있습니다. 양쪽 모두 삭제해도 레코드는 남습니다(논리 삭제).
 
컬럼명 타입 NULL 기본값 설명
id BIGINT(20) UNSIGNED AUTO_INCREMENT NO AUTO PK
from_id INT(11) UNSIGNED NO   발신자 dx_members.id
to_id INT(11) UNSIGNED NO   수신자 dx_members.id
content TEXT NO   쪽지 내용
is_read TINYINT(1) NO 0 0=미읽음, 1=읽음
read_at DATETIME YES NULL 읽은 시각
is_deleted_sender TINYINT(1) NO 0 발신자 삭제 여부
is_deleted_receiver TINYINT(1) NO 0 수신자 삭제 여부
created_at DATETIME NO   발송 일시


4.2 dx_notifications — 실시간 알림

소켓으로 즉시 전달하는 동시에 DB에도 저장합니다. 비접속 회원도 로그인 후 확인 가능합니다.
 
컬럼명 타입 NULL 기본값 설명
id BIGINT UNSIGNED AUTO_INCREMENT NO AUTO PK
to_member_id INT(11) UNSIGNED NO   수신자 회원 ID
from_member_id INT(11) UNSIGNED NO 0 발신자 회원 ID (0=시스템 알림)
type VARCHAR(30) NO   comment|like|scrap|friend|memo
message VARCHAR(255) NO   알림 메시지
url VARCHAR(500) NO   클릭 시 이동 URL
extra TEXT YES NULL 추가 데이터 (JSON)
is_read TINYINT(1) NO 0 0=미읽음, 1=읽음
created_at DATETIME NO   생성 일시


4.3 dx_friends — 친구/차단

단방향(follow) 구조입니다. A→B 레코드와 B→A 레코드가 모두 있으면 서로친구입니다. type=block은 차단 관계입니다.
 
컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
member_id INT(11) UNSIGNED NO   요청자 (추가한 사람)
target_id INT(11) UNSIGNED NO   대상자 (추가된 사람)
type ENUM(friend,block) NO friend 관계 유형
status TINYINT(1) NO 1 1=활성, 0=삭제 (논리 삭제)
created_at DATETIME NO   관계 생성 일시
 
인덱스명 종류 컬럼
PRIMARY KEY PK id
uk_friend UNIQUE member_id, target_id, type
idx_member_id INDEX member_id
idx_target_id INDEX target_id
idx_type INDEX type


4.4 dx_likes — 좋아요

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
target_type ENUM(post,comment) NO   좋아요 대상 유형
target_id BIGINT(20) UNSIGNED NO   대상 ID
member_id INT(11) UNSIGNED NO 0 회원 ID (비회원=0)
ip VARCHAR(45) YES NULL 비회원 중복 방지 IP
created_at DATETIME NO   좋아요 일시
 
인덱스명 종류 컬럼
uk_like UNIQUE target_type, target_id, member_id
idx_target INDEX target_type, target_id


4.5 dx_scraps — 스크랩

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
member_id INT(11) UNSIGNED NO   스크랩한 회원 ID
post_id BIGINT(20) UNSIGNED NO   스크랩한 게시글 ID
memo VARCHAR(191) YES NULL 스크랩 메모 (선택)
created_at DATETIME NO   스크랩 일시


4.6 dx_dm_messages — 1:1 채팅 메시지

소켓 dm_invite → 수락 후 열리는 실시간 1:1 채팅 메시지를 저장합니다. chat_group은 두 회원 login_id의 MD5입니다.
 
컬럼명 타입 NULL 기본값 설명
id BIGINT(20) UNSIGNED AUTO_INCREMENT NO AUTO PK
chat_group VARCHAR(32) NO   MD5 그룹 키 (두 사용자 ID 조합)
member_id INT(11) UNSIGNED NO   발신자 회원 ID
message TEXT NO   메시지 내용 (최대 2000자)
created_at DATETIME NO   발송 일시


5장. 포인트 및 레벨 테이블


5.1 dx_point_log — 포인트 변동 내역

컬럼명 타입 NULL 기본값 설명
id BIGINT UNSIGNED AUTO_INCREMENT NO AUTO PK
member_id INT(11) UNSIGNED NO   회원 ID
type VARCHAR(50) NO   유형: write|comment|login|admin|purchase 등
point INT(11) NO   변동 포인트 (음수=차감)
balance INT(11) NO 0 변동 후 잔액
ref_type VARCHAR(30) YES NULL 연관 대상 유형 (post, comment 등)
ref_id BIGINT UNSIGNED YES NULL 연관 대상 ID
note VARCHAR(191) YES NULL 메모
created_at DATETIME NO   변동 일시


5.2 dx_exp_log — 경험치 변동 내역

dx_point_log와 동일한 구조입니다. point 컬럼 대신 exp 컬럼을 사용합니다.


5.3 dx_level_config — 레벨 설정

기본 150레벨이 설치 시 INSERT됩니다. 관리자가 레벨 이름, 필요 경험치, 아이콘, 색상을 커스터마이징할 수 있습니다.
 
컬럼명 타입 NULL 기본값 설명
level SMALLINT(5) UNSIGNED NO   PK — 레벨 번호 (1~150)
name VARCHAR(50) NO   레벨 이름 (예: 새싹, 마스터)
exp_required INT(11) UNSIGNED NO 0 해당 레벨 진입에 필요한 누적 경험치
icon VARCHAR(10) NO   이모지 아이콘 (선택)
color VARCHAR(20) NO   색상 코드 (hex 또는 클래스명)
updated_at DATETIME NO CURRENT_TIMESTAMP 마지막 수정 일시 (ON UPDATE)


5.4 dx_shop_items — 포인트샵 상품

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
name VARCHAR(191) NO   상품명
description TEXT YES NULL 상품 설명
category VARCHAR(50) YES NULL 카테고리
type ENUM(badge,title,point,etc) NO etc 상품 유형
price INT(11) UNSIGNED NO 0 포인트 가격
stock INT(11) NO -1 재고 (-1=무제한)
image VARCHAR(500) YES NULL 상품 이미지
value VARCHAR(191) YES NULL 지급 값 (배지 슬러그, 칭호 텍스트 등)
buy_limit INT(11) NO 0 1인당 구매 제한 (0=무제한)
status TINYINT(1) NO 1 활성 여부
sort_order INT(11) NO 0 정렬 순서
created_at DATETIME NO   생성 일시


5.5 dx_shop_purchases — 포인트샵 구매 내역

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
member_id INT(11) UNSIGNED NO   구매 회원 ID
item_id INT(11) UNSIGNED NO   dx_shop_items.id
item_name VARCHAR(191) NO   구매 시점 상품명 (스냅샷)
price INT(11) UNSIGNED NO   구매 시점 포인트 가격
status ENUM(paid,refunded,pending) NO paid 결제 상태
note VARCHAR(191) YES NULL 메모
created_at DATETIME NO   구매 일시


6장. 시스템 테이블


6.1 dx_settings — 시스템 설정

모든 설정값을 키-값 형식으로 저장합니다. setting_key가 PK입니다. DxCache로 캐싱됩니다.
 
컬럼명 타입 NULL 기본값 설명
setting_key VARCHAR(100) NO   PK — 설정 키 (예: site_name, theme)
setting_value LONGTEXT YES NULL 설정값 (JSON, 텍스트, 숫자 등)
setting_group VARCHAR(100) NO general 설정 그룹 (general|security|member|editor)
updated_at DATETIME YES NULL 마지막 수정 일시


6.2 dx_pages — 관리 페이지

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
slug VARCHAR(191) NO   UNIQUE — URL 경로 (예: home, shop)
title VARCHAR(191) NO   페이지 제목
file_path VARCHAR(191) NO   pages/ 내 파일 경로
layout VARCHAR(100) NO main 레이아웃 이름
is_home TINYINT(1) NO 0 홈 페이지 여부
is_standalone TINYINT(1) NO 0 독립 페이지 (레이아웃 없이 실행)
access_level TINYINT(1) NO 0 접근 권한 (0=전체, 1=회원)
page_type VARCHAR(10) NO editor editor|file
page_location VARCHAR(10) NO global global|theme
site_domain VARCHAR(191) NO   멀티사이트 도메인
status TINYINT(1) NO 1 활성 여부
sort_order SMALLINT(5) NO 0 정렬 순서
created_at DATETIME NO   생성 일시
updated_at DATETIME YES NULL 수정 일시


6.3 dx_menus — 메뉴

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
site_domain VARCHAR(191) NO   멀티사이트 도메인 (빈값=전체)
menu_group VARCHAR(100) NO main 메뉴 그룹 (예: main, footer)
parent_id INT(11) UNSIGNED NO 0 부모 메뉴 ID (0=최상위)
title VARCHAR(191) NO   메뉴 이름
url VARCHAR(191) YES NULL 링크 URL
target VARCHAR(20) NO _self _self|_blank
icon VARCHAR(100) YES NULL 아이콘 (이모지 또는 클래스명)
access_level TINYINT(1) NO 0 접근 권한
status TINYINT(1) NO 1 활성 여부
sort_order SMALLINT(5) NO 0 정렬 순서


6.4 dx_plugins — 플러그인

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
directory VARCHAR(100) NO   UNIQUE — 플러그인 폴더명
name VARCHAR(191) NO   플러그인 이름
version VARCHAR(50) NO   버전
status TINYINT(1) NO 0 0=비활성, 1=활성
is_shared TINYINT(1) NO 0 DX마켓 공유 여부
share_key VARCHAR(64) YES NULL UNIQUE — 공유 키 (URL)
download_count INT(11) NO 0 공유 다운로드 횟수
settings TEXT YES NULL 플러그인 설정값 (JSON)
installed_at DATETIME NO   설치 일시
shared_at DATETIME YES NULL 최초 공유 일시


6.5 dx_sites — 멀티사이트

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
domain VARCHAR(191) NO   UNIQUE — 도메인 (예: a.com)
site_name VARCHAR(191) NO My Site 사이트 이름
theme VARCHAR(100) NO default 사이트별 테마
menu_group VARCHAR(100) NO main 사이트별 메뉴 그룹
language VARCHAR(10) NO ko 언어 코드
timezone VARCHAR(50) NO Asia/Seoul 타임존
extra_config TEXT YES NULL JSON 추가 설정
status TINYINT(1) NO 1 활성 여부
sort_order SMALLINT(5) NO 0 정렬 순서
created_at DATETIME NO   생성 일시


6.6 dx_popups — 팝업

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
title VARCHAR(191) NO   팝업 제목 (관리용)
content LONGTEXT YES NULL HTML 내용
img_url VARCHAR(500) YES NULL 이미지 URL
link_url VARCHAR(500) YES NULL 클릭 링크
pos_x SMALLINT(5) NO 20 X 위치(px)
pos_y SMALLINT(5) NO 100 Y 위치(px)
width SMALLINT(5) NO 400 너비(px)
device VARCHAR(10) NO all all|pc|mobile
start_date DATE YES NULL 표시 시작일
end_date DATE YES NULL 표시 종료일
hide_days TINYINT(3) NO 1 안보기 유지 일수
status TINYINT(1) NO 1 활성 여부
created_at DATETIME NO   생성 일시


6.7 dx_global_notices — 전체 공지

v8.2.0에서 추가. 모든 게시판 상단에 표시되는 전체 공지를 관리합니다.
 
컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
title VARCHAR(191) NO   공지 제목
title_color VARCHAR(20) NO   제목 색상 (hex)
link_url VARCHAR(500) NO   클릭 이동 URL (선택)
link_target VARCHAR(10) NO _self _self|_blank
status TINYINT(1) NO 1 1=활성, 0=비활성
start_at DATETIME YES NULL 게시 시작일
end_at DATETIME YES NULL 게시 종료일
sort_order SMALLINT(5) NO 0 정렬 순서
created_by INT(11) UNSIGNED NO 0 작성자 회원 ID
created_at DATETIME NO   생성 일시


7장. 통계 및 API 테이블


7.1 dx_visits — 일별 방문자 집계

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
visit_date DATE NO   UNIQUE — 집계 날짜
visit_count INT(11) NO 0 총 방문 수 (페이지뷰)
unique_count INT(11) NO 0 순 방문자 수 (IP 기준)


7.2 dx_visit_logs — 방문자 상세 로그

방문자별 상세 로그입니다. 봇 여부, 브라우저 종류, 유입 도메인 분석을 지원합니다.
 
컬럼명 타입 NULL 기본값 설명
id BIGINT UNSIGNED AUTO_INCREMENT NO AUTO PK
visit_date DATE NO   방문 날짜
ip VARCHAR(45) NO   방문자 IP
page_url VARCHAR(500) YES NULL 방문 페이지 URL
referer VARCHAR(500) YES NULL 유입 URL
referer_domain VARCHAR(200) YES NULL 유입 도메인 (통계 분석용)
user_agent VARCHAR(500) YES NULL User-Agent 전체
browser VARCHAR(30) NO Other 브라우저 종류 (Chrome|Firefox|Safari 등)
is_bot TINYINT(1) NO 0 0=사람, 1=봇
member_id INT(11) UNSIGNED NO 0 로그인 회원 ID (비로그인=0)
created_at DATETIME NO   방문 일시
 
인덱스명 종류 컬럼
idx_date INDEX visit_date
idx_ip_date INDEX ip, visit_date
idx_member INDEX member_id
idx_bot INDEX is_bot
idx_browser INDEX browser
idx_referer_domain INDEX referer_domain(100)
idx_date_bot COMPOSITE visit_date, is_bot
idx_ip_date_browser COMPOSITE visit_date, ip, browser, is_bot


7.3 dx_search_keywords — 검색어 통계

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
keyword VARCHAR(191) NO   UNIQUE — 검색어
search_count INT(11) NO 1 검색 횟수
last_searched DATETIME NO   마지막 검색 일시
 
인덱스명 종류 컬럼
uk_keyword UNIQUE keyword
idx_count INDEX search_count
ft_keyword FULLTEXT keyword — 자동완성용


7.4 dx_api_keys — 소켓 API 키

소켓 서버 연결에 사용되는 API 키를 관리합니다. api_key(dxk_...)가 소켓 그룹명으로 사용됩니다.
 
컬럼명 타입 NULL 기본값 설명
id BIGINT UNSIGNED NO   PK — PHP microtime 기반 고유 ID
api_key VARCHAR(64) NO   UNIQUE — dxk_ 접두사 소켓 그룹 키
site_domain VARCHAR(191) NO   UNIQUE — 사이트 도메인
site_name VARCHAR(191) NO   사이트 표시 이름
platform VARCHAR(10) NO web web|android|ios
app_package VARCHAR(191) NO   앱 패키지명 (com.domain.app)
app_key_hash VARCHAR(255) NO   안드로이드 서명 키해시 / iOS Team ID
status TINYINT(1) NO 1 0=비활성, 1=활성, 2=정지
expires_at DATETIME YES NULL NULL=영구 유효
created_at DATETIME NO   발급 일시


7.5 dx_api_logs — API 접근 로그

컬럼명 타입 NULL 기본값 설명
id BIGINT UNSIGNED AUTO_INCREMENT NO AUTO PK
api_key_id BIGINT UNSIGNED NO 0 dx_api_keys.id
endpoint VARCHAR(100) NO   엔드포인트 (예: /api/comment)
method VARCHAR(10) NO GET HTTP 메서드
request_ip VARCHAR(45) NO   요청 IP
request_body TEXT YES NULL 요청 본문
response_code SMALLINT(5) NO 200 HTTP 응답 코드
response_msg VARCHAR(300) NO   응답 메시지
created_at DATETIME NO   요청 일시


8장. 설문 관련 테이블


8.1 dx_surveys — 설문 기본 정보

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
post_id BIGINT(20) UNSIGNED NO   UNIQUE — dx_posts.id (게시글 1:1 연결)
title VARCHAR(191) NO   설문 제목 (비우면 게시글 제목 사용)
end_date DATE YES NULL 마감일 (NULL=무제한)
allow_guest TINYINT(1) NO 0 비회원 참여 허용
show_result ENUM(always,after_vote,after_end) NO after_vote 결과 표시 시점
status TINYINT(1) NO 1 활성 여부
created_at DATETIME NO   생성 일시


8.2 dx_survey_questions — 설문 문항

컬럼명 타입 NULL 기본값 설명
id INT(11) UNSIGNED AUTO_INCREMENT NO AUTO PK
survey_id INT(11) UNSIGNED NO   dx_surveys.id
question VARCHAR(500) NO   문항 내용
q_type ENUM(radio,checkbox,text) NO radio 문항 유형
options TEXT YES NULL JSON 배열 — radio/checkbox 선택지
required TINYINT(1) NO 1 필수 여부
sort_order SMALLINT(5) NO 0 정렬 순서


8.3 dx_survey_answers — 설문 응답

컬럼명 타입 NULL 기본값 설명
id BIGINT UNSIGNED AUTO_INCREMENT NO AUTO PK
survey_id INT(11) UNSIGNED NO   dx_surveys.id
question_id INT(11) UNSIGNED NO   dx_survey_questions.id
member_id INT(11) UNSIGNED NO 0 회원 ID (비회원=0)
ip VARCHAR(45) NO   IP 주소
answer TEXT NO   응답 내용
created_at DATETIME NO   응답 일시


8.4 dx_survey_votes — 설문 참여 중복 방지

(survey_id, member_id) 가 UNIQUE로 회원당 1회 참여를 보장합니다.
 
컬럼명 타입 NULL 기본값 설명
id BIGINT UNSIGNED AUTO_INCREMENT NO AUTO PK
survey_id INT(11) UNSIGNED NO   dx_surveys.id
member_id INT(11) UNSIGNED NO 0 회원 ID (비회원=0)
ip VARCHAR(45) NO   IP 주소
voted_at DATETIME NO   참여 일시


9장. 기타 테이블


9.1 dx_download_log — 파일 다운로드 이력

컬럼명 타입 NULL 기본값 설명
id BIGINT UNSIGNED AUTO_INCREMENT NO AUTO PK
file_id BIGINT UNSIGNED NO   dx_post_files.id
post_id BIGINT UNSIGNED NO 0 dx_posts.id
member_id INT(11) UNSIGNED NO 0 다운로드한 회원 ID
ip VARCHAR(45) NO   IP 주소
point_used INT(11) NO 0 차감된 포인트
created_at DATETIME NO   다운로드 일시


9.2 dx_sms_logs — SMS 발송 로그

컬럼명 타입 NULL 기본값 설명
id BIGINT UNSIGNED AUTO_INCREMENT NO AUTO PK
driver VARCHAR(80) NO   발송 드라이버 (ncp|coolsms|kt|twilio)
to_count INT UNSIGNED NO 0 발송 대상 수
ok_count INT UNSIGNED NO 0 성공 건수
fail_count INT UNSIGNED NO 0 실패 건수
content_preview VARCHAR(255) NO   내용 미리보기 (최대 100자)
created_at DATETIME NO CURRENT_TIMESTAMP 발송 일시
 

댓글0

로그인 후 댓글을 작성할 수 있습니다.
3.7 Hook 시스템 실행 타이밍 2026.04.21 3.7 Hook 시스템 Hook 개념 2026.04.21 3.6 데이터 처리 구조 공통 함수 활용 2026.04.21 3.6 데이터 처리 구조 데이터 흐름 상세 기술 2026.04.21 3.6 데이터 처리 구조 DB 접근 방식 2026.04.21 3.5 컨트롤러 구조 컨트롤러 구조 • 데이터 전달 • 실행 방식 • 역할 2026.04.21 3.4 라우팅 시스템 URL 처리 방식 • 라우팅 규칙 • 동적 라이팅 2026.04.21 3.3 실행 흐름 초기 로딩 과정 및 공통 초기화 흐름 2026.04.21 3.2 폴더 구조 install/ — 설치 및 마이그레이션 2026.04.21 3.2 폴더 구조 pages/ — 커스텀 페이지 2026.04.21 3.2 폴더 구조 data/ — 런타임 데이터 2026.04.21 3.2 폴더 구조 extend/ — 코드 자동 삽입 2026.04.21 3.2 폴더 구조 routes/ + controllers/ — 라라벨 스타일 라우팅 2026.04.21 3.2 폴더 구조 assets/ — 정적 자원 2026.04.21 3.2 폴더 구조 plugins/ — 플러그인 시스템 2026.04.21 3.2 폴더 구조 themes/ — 테마 시스템 2026.04.21 3.2 폴더 구조 boards/ — 게시판 시스템 2026.04.21 3.2 폴더 구조 admin/ — 관리자 패널 2026.04.21 3.2 폴더 구조 core/ — CMS 엔진 2026.04.21 3.1 엔진 개요 실행 구조 개요 2026.04.21
31
전체 회원
285
전체 게시글
175
전체 댓글
184
오늘 방문
29,087
전체 방문
3
현재 접속
인기글 7일 이내
최신글
최신댓글
목록