1. 멀티사이트 통합 관리 개요
DXCMS 관리자 패널의 [멀티사이트 통합 관리] 메뉴는 하나의 DXCMS 설치로 여러 도메인을 동시에 운영하는 멀티사이트 환경을 설정•관리하는 도구입니다. 각 도메인별로 독립적인 테마•메뉴 그룹•언어•시간대•푸터 텍스트•추가 설정을 지정하여, 동일 DB와 코드 베이스에서 서로 다른 디자인과 구성의 사이트를 운영할 수 있습니다.
📌 접근 경로: 관리자 대시보드 → 멀티사이트 통합 관리 (URL: /admin/sites) DB 테이블: dx_sites (자동 생성)
1.1 멀티사이트 시스템 개념
| 개념 |
설명 |
| 단일 설치 멀티 도메인 |
1개의 DXCMS 코드 + 1개의 DB로 도메인A·B·C를 동시에 운영. 유지보수 비용·DB 중복 없이 여러 사이트 운영 가능. |
| 도메인별 설정 분리 |
테마·메뉴 그룹·언어·시간대·푸터 텍스트·확장 JSON 설정을 도메인마다 다르게 적용. |
| 요청 시 자동 감지 |
HTTP_HOST 헤더로 접속 도메인을 자동 감지하여 해당 도메인의 설정을 로드. 등록되지 않은 도메인은 전역 기본 설정(settings 테이블)을 사용. |
| 자동 테이블 생성 |
멀티사이트 페이지 접근 시 dx_sites 테이블이 없으면 CREATE TABLE IF NOT EXISTS로 자동 생성됩니다. |
| 공유 데이터 |
회원·게시글·포인트 등 콘텐츠 데이터는 모든 도메인이 공유합니다. 도메인별로 보이는 디자인과 메뉴만 다릅니다. |
💡 미등록 도메인으로 접속한 방문자는 전역 기본 설정(settings 테이블의 theme•menu_group 등)이 적용됩니다. 멀티사이트 등록은 추가 도메인에만 필요합니다.
1.2 화면 구성
| 영역 |
설명 |
| 페이지 헤더 |
"멀티사이트 통합 관리" 제목과 부제목. |
| 메시지 배너 |
저장·삭제·오류 결과 메시지(초록=성공 / 빨강=오류). |
| 현재 접속 도메인 안내 |
하늘색 배너. 현재 관리자 페이지에 접속 중인 HTTP_HOST 표시. "미등록 도메인은 전역 기본 설정 사용" 안내. |
| 사이트 목록 (좌측) |
등록된 모든 사이트를 sort_order ASC → id ASC 순으로 표시. 도메인·이름·테마·메뉴 그룹·홈 페이지·수정·삭제 표시. |
| 등록/수정 폼 (우측) |
새 사이트 등록 또는 기존 사이트 수정 폼. sticky(고정)으로 스크롤해도 항상 보임. |
2. dx_sites 테이블 구조
멀티사이트 설정은 dx_sites 테이블에 저장됩니다. 멀티사이트 관리 페이지에 처음 접근하면 이 테이블이 자동으로 생성됩니다.
| 컬럼명 |
데이터 타입 |
기본값 |
설명 |
| id |
INT UNSIGNED |
AUTO_INCREMENT |
사이트 고유 ID. PRIMARY KEY. |
| domain |
VARCHAR(191) |
- |
접속 도메인. UNIQUE KEY. 예: example.com (https:// 제외). |
| site_name |
VARCHAR(191) |
My Site |
브랜드/사이트 명칭. 브라우저 탭·메타 등에 표시. |
| site_description |
VARCHAR(191) |
NULL |
브라우저 타이틀·메타 description에 사용. |
| site_url |
VARCHAR(191) |
NULL |
정식 URL. 프로토콜(https://) 포함 전체 주소. |
| theme |
VARCHAR(100) |
default |
적용할 테마 폴더명. /themes/ 디렉터리의 하위 폴더명과 일치해야 합니다. |
| menu_group |
VARCHAR(100) |
main |
사용할 메뉴 그룹 이름. 메뉴 관리의 menu_group 값과 일치해야 합니다. |
| language |
VARCHAR(10) |
ko |
사이트 언어 코드. 예: ko(한국어), en(영어), ja(일본어). |
| timezone |
VARCHAR(50) |
Asia/Seoul |
PHP 타임존 식별자. 예: Asia/Seoul, America/New_York, UTC. |
| footer_text |
VARCHAR(500) |
NULL |
사이트 하단 푸터에 표시할 텍스트. 예: Copyright © 2026 MyBrand. |
| extra_config |
TEXT |
NULL |
JSON 형식의 확장 설정. 개발자가 커스텀 키-값을 자유롭게 정의. |
| status |
TINYINT(1) |
1 |
활성(1) / 비활성(0). 비활성 사이트는 전역 기본 설정으로 폴백. |
| sort_order |
SMALLINT(5) |
0 |
목록 표시 순서. 낮을수록 상단. 동일 값이면 id ASC. |
| created_at |
DATETIME |
- |
최초 등록 일시. INSERT 시 자동 설정. |
| updated_at |
DATETIME |
NULL |
마지막 수정 일시. UPDATE 시 자동 설정. |
2.1 인덱스 구조
| PRIMARY KEY (id) |
id 컬럼. 자동 증가 기본 키. |
| UNIQUE KEY uk_domain (domain) |
domain 컬럼에 유니크 인덱스. 동일 도메인 중복 등록 방지. |
| KEY idx_status (status) |
status 컬럼에 인덱스. 활성 사이트만 조회하는 WHERE status=1 쿼리 최적화. |
3. 사이트 목록
화면 좌측(2/3)에 등록된 모든 사이트가 sort_order ASC → id ASC 순으로 표시됩니다.
3.1 목록 행 표시 정보
| 표시 요소 |
설명 |
| 도메인 |
domain 컬럼값. 굵은 글씨. 마우스 호버 시 초록색으로 변경. |
| "비활성" 배지 |
status=0인 사이트에 빨간 "비활성" 배지 표시. |
| 사이트명 |
site_name 컬럼값. |
| 테마 배지 |
theme 컬럼값. 초록 배경(bg-emerald-50) 모노스페이스 배지. |
| 메뉴 배지 |
menu_group 컬럼값. 인디고 배경(bg-indigo-50) 모노스페이스 배지. |
| 홈 페이지 정보 |
pages 테이블에 is_home=1 AND status=1 AND site_domain={도메인}인 페이지가 있으면 "🏠 홈: /{slug}" 표시. pages 테이블에 site_domain 컬럼이 없으면 미표시. |
| [✏️ 수정] 버튼 |
하늘색 아이콘 버튼. /admin/sites/{id}로 이동하여 해당 사이트 수정 폼 표시. |
| [🗑 삭제] 버튼 |
"이 사이트 정보를 삭제하시겠습니까?" 확인 창 후 사이트 레코드 삭제. |
3.2 빈 목록 상태
등록된 사이트가 없으면 목록 영역 중앙에 "등록된 사이트가 없습니다. 오른쪽에서 첫 사이트를 추가하세요." 안내 메시지와 지구 아이콘이 표시됩니다.
4. 새 사이트 등록
화면 우측 사이드바 폼에서 새 사이트를 등록합니다. 우측 폼은 sticky 포지션으로 고정되어 목록을 스크롤해도 항상 보입니다.
4.1 등록 폼 전체 필드
| 필드 |
필수 여부 |
설명 및 유의사항 |
| 접속 도메인 (FQDN) |
필수 |
정확한 도메인명 입력. https://, http:// 및 경로(/) 자동 제거 처리. 대문자는 소문자로 자동 변환. 예: example.com (서브도메인 포함 가능: sub.example.com). |
| 브랜드/사이트 명칭 |
선택 |
브라우저 탭·메타 태그에 표시될 사이트 이름. 미입력 시 도메인명으로 자동 설정. |
| 브라우저 타이틀/설명 |
선택 |
사이트 메타 description에 사용될 설명문. |
| 정식 URL 경로 |
선택 |
프로토콜(https://) 포함 전체 URL. 예: https://example.com. 내부 링크 생성·표준화 URL에 활용. |
| 적용 디자인 테마 |
필수 |
/themes/ 디렉터리에 설치된 테마 목록 드롭다운. default 포함 설치된 모든 테마 선택 가능. 기본값: default. |
| 사용 메뉴 그룹 |
필수 |
메뉴 관리에서 사용하는 menu_group 값. datalist로 기존 그룹 자동완성 제공. 기본값: main. |
| 하단 푸터 텍스트 |
선택 |
사이트 푸터에 표시할 텍스트. 예: Copyright © 2026 MyBrand. All rights reserved. |
| 확장 구성 프로필 (JSON) |
선택 |
JSON 형식의 추가 설정. 개발자가 커스텀 키-값을 자유롭게 정의. 저장 전 JSON 유효성 검사 수행. 예: {"ga_id":"G-XXXXXXX","contact_email":"info@example.com"} |
| 이 사이트를 즉시 활성화 |
선택 |
체크 시 status=1(활성). 미체크 시 status=0(비활성). 기본값: 체크됨(활성). |
4.2 도메인 자동 정제 처리
입력된 도메인 값은 서버에서 다음 순서로 자동 정제됩니다.
- 앞뒤 공백 제거 (trim)
- https:// 또는 http:// 접두사 제거 (preg_replace)
- 첫 번째 / 이후 경로 제거 (도메인명만 추출)
- 소문자로 변환 (strtolower)
| 입력: https://Example.COM/path |
→ 정제 결과: example.com |
| 입력: HTTP://Sub.Domain.KR/ |
→ 정제 결과: sub.domain.kr |
| 입력: mysite.com |
→ 정제 결과: mysite.com (변경 없음) |
💡 도메인 입력 시 https://, http://, www를 포함해도 자동으로 정제됩니다. 단, www.example.com과 example.com은 서로 다른 도메인으로 등록됩니다. 실제 접속 방식에 맞게 입력하세요.
4.3 등록 처리 흐름
- CSRF 토큰 검증
- 도메인 필수 검증 → 빈 값이면 "도메인은 필수입니다." 오류
- extra_config가 입력된 경우 JSON 유효성 검사 → 올바르지 않으면 "추가 설정이 올바른 JSON 형식이 아닙니다." 오류
- id=0이면 신규 INSERT: created_at=현재 시각 자동 설정
- id>0이면 기존 수정 UPDATE: updated_at=현재 시각 자동 설정
- DxCache::flush() — 전체 캐시 초기화
- PRG 패턴: /admin/sites?msg=saved로 GET 리다이렉트 → "저장되었습니다." 메시지
4.4 등록 절차
- 관리자 대시보드 → [멀티사이트 통합 관리] 메뉴 클릭
- 우측 폼의 [접속 도메인] 필드에 도메인 입력 (예: myblog.com)
- [브랜드/사이트 명칭] 입력 (예: 나의 두 번째 사이트)
- [적용 디자인 테마] 드롭다운에서 해당 도메인에 적용할 테마 선택
- [사용 메뉴 그룹] 입력 (예: blog-menu)
- [하단 푸터 텍스트] 입력 (선택)
- [확장 구성 프로필] JSON 입력 (선택)
- [이 사이트를 즉시 활성화] 체크박스 확인
- [새 사이트 등록하기] 버튼 클릭
- "저장되었습니다." 성공 메시지 확인
- 좌측 목록에 새 사이트가 추가됨 확인
5. 사이트 수정
목록에서 [✏️] 수정 버튼 클릭 시 URL이 /admin/sites/{id}로 변경되며, 우측 폼 헤더가 "사이트 정보 수정"으로, 제출 버튼이 "수정 내용 저장"으로 변경됩니다. 기존 값이 폼에 자동으로 채워집니다.
5.1 수정 폼 특이사항
| 폼 헤더 변경 |
신규 등록: "✨ 새로운 사이트 등록" → 수정: "✏️ 사이트 정보 수정" |
| 제출 버튼 변경 |
신규: "새 사이트 등록하기" → 수정: "수정 내용 저장" |
| 취소 링크 |
수정 모드에서만 [입력 취소] 링크가 표시. 클릭 시 /admin/sites로 이동해 폼 초기화. |
| 도메인 수정 |
도메인도 수정 가능합니다. 수정 후 저장하면 해당 도메인으로 접속하는 방문자에게 즉시 새 설정이 적용됩니다. |
| 언어/시간대 |
현재 관리자 UI에는 language·timezone 필드가 노출되지 않으나 DB 컬럼이 존재합니다. 직접 DB 수정 또는 extra_config JSON으로 보완 가능. |
5.2 수정 절차
- 목록에서 수정할 사이트의 [✏️] 파란 아이콘 버튼 클릭
- URL이 /admin/sites/{id}로 변경되고 우측 폼에 기존 값이 채워짐 확인
- 변경할 항목 수정 (테마•메뉴 그룹•사이트명 등)
- [수정 내용 저장] 버튼 클릭
- "저장되었습니다." 성공 메시지 확인
- 목록에서 변경 내용 확인
6. 사이트 삭제
목록에서 [🗑] 삭제 버튼 클릭 시 "이 사이트 정보를 삭제하시겠습니까?" 확인 창이 표시됩니다. 확인 후 해당 사이트 레코드가 DB에서 삭제됩니다.
6.1 삭제 처리
- 확인 창에서 [확인] 클릭
- CSRF 토큰 검증
- dx_sites 테이블에서 해당 id 레코드 삭제
- DxCache::flush() — 캐시 초기화
- PRG 패턴: /admin/sites?msg=deleted로 리다이렉트 → "삭제되었습니다." 메시지
⚠️ 사이트 삭제는 dx_sites 테이블의 설정 레코드만 삭제합니다. 해당 도메인의 게시글•회원 등 콘텐츠 데이터는 삭제되지 않습니다. 삭제 후 해당 도메인으로 접속하면 전역 기본 설정이 적용됩니다.
7. 메뉴 그룹 연동
멀티사이트에서 각 도메인별로 다른 메뉴를 표시하려면 [메뉴 관리] 메뉴에서 도메인별 메뉴 그룹을 먼저 만들어야 합니다.
7.1 메뉴 그룹 자동완성
사이트 등록/수정 폼의 [사용 메뉴 그룹] 필드는 datalist로 구현되어 있습니다.
| 자동완성 목록 |
menus 테이블의 DISTINCT menu_group 값을 조회하여 datalist에 제공. 기존에 생성된 모든 메뉴 그룹이 입력 시 자동완성됩니다. |
| 기본 그룹 |
main. 전역 기본 메뉴 그룹. 미입력 시 main으로 자동 설정. |
| 신규 그룹 |
메뉴 관리에서 없는 그룹명을 입력해도 저장은 가능하지만, 해당 그룹의 메뉴가 없으면 빈 메뉴로 표시됩니다. |
7.2 멀티사이트 메뉴 설정 순서
- [관리자 → 메뉴 관리] 접속
- [메뉴 그룹 추가] 버튼으로 새 메뉴 그룹 생성 (예: blog-menu, shop-menu)
- 해당 그룹에 메뉴 항목 추가 (홈•게시판•페이지 링크 등)
- [관리자 → 멀티사이트 통합 관리] 접속
- 해당 도메인의 [사용 메뉴 그룹] 필드에 생성한 그룹명 입력
- [저장] 버튼 클릭
- 해당 도메인 접속 시 설정한 메뉴 그룹의 메뉴가 표시됨 확인
8. 확장 구성 프로필 (extra_config)
extra_config 필드는 JSON 형식으로 도메인별 커스텀 설정을 자유롭게 저장하는 확장 포인트입니다. 개발자가 테마•플러그인에서 이 값을 읽어 도메인별 특수 동작을 구현할 때 사용합니다.
8.1 JSON 유효성 검사
저장 전 서버에서 json_decode($val, true)로 JSON 형식을 검증합니다. JSON 오류 시 "추가 설정이 올바른 JSON 형식이 아닙니다." 오류가 표시되며 저장이 중단됩니다.
8.2 extra_config 활용 예시
| 활용 목적 |
JSON 예시 |
| Google Analytics 연동 |
{"ga_id": "G-XXXXXXXXXX"} |
| SNS 공유 설정 |
{"og_image": "https://example.com/og.jpg", "twitter_handle": "@mybrand"} |
| 도메인별 연락처 |
{"contact_email": "info@example.com", "phone": "02-1234-5678"} |
| 광고 코드 분리 |
{"adsense_client": "ca-pub-XXXXX", "adsense_slot": "1234567890"} |
| 도메인별 API 키 |
{"kakao_map_key": "XXXXXXXX", "naver_client_id": "YYYYYYYY"} |
| 기능 ON/OFF 플래그 |
{"enable_chat": true, "maintenance_mode": false, "max_upload_mb": 50} |
8.3 extra_config 읽기 (개발자)
PHP 테마/플러그인에서 extra_config를 읽는 방법입니다.
| 현재 도메인 사이트 정보 |
$site = dx_current_site(); — 현재 HTTP_HOST에 해당하는 dx_sites 레코드 반환(배열 또는 null). |
| extra_config 파싱 |
$config = json_decode($site["extra_config"], true); — 연관 배열로 파싱. |
| 특정 값 읽기 |
$gaId = isset($config["ga_id"]) ? $config["ga_id"] : ""; |
9. 멀티사이트 동작 원리
DXCMS가 페이지 요청을 받으면 다음 순서로 도메인을 감지하고 해당 설정을 로드합니다.
9.1 요청 처리 흐름
- 방문자가 myblog.com 또는 myshop.com으로 접속
- DXCMS 부트스트랩에서 HTTP_HOST 헤더로 접속 도메인 감지
- dx_sites 테이블에서 WHERE domain = {HTTP_HOST} AND status = 1 조회
- 레코드 있음 → 해당 사이트의 theme•menu_group•footer_text•extra_config 등 로드
- 레코드 없음(미등록 또는 비활성) → settings 테이블의 전역 기본 설정 적용
- 로드된 설정으로 테마 렌더링•메뉴 출력•푸터 표시
9.2 멀티사이트 독립 설정 범위
| 항목 |
멀티사이트 설정? |
비고 |
| 디자인 테마 |
✅ 가능 |
도메인별 다른 테마 적용 가능. |
| 메뉴 구성 |
✅ 가능 |
도메인별 다른 menu_group 지정. |
| 사이트명/설명 |
✅ 가능 |
브라우저 탭·메타 태그에 도메인별 이름 표시. |
| 푸터 텍스트 |
✅ 가능 |
저작권 표시 등 도메인별 독립 설정. |
| 확장 JSON 설정 |
✅ 가능 |
GA 코드·API 키 등 커스텀 설정. |
| 게시글·댓글 데이터 |
⚠️ 공유 |
모든 도메인이 동일 DB의 게시글을 공유. |
| 회원 데이터 |
⚠️ 공유 |
동일 DB의 members 테이블 공유. 한 계정으로 모든 도메인 로그인 가능. |
| 포인트/경험치 |
⚠️ 공유 |
동일 DB의 포인트 공유. 도메인 무관. |
💡 멀티사이트는 디자인•메뉴 등 프론트엔드 구성만 분리합니다. 콘텐츠•회원 데이터는 공유됩니다. 도메인별 콘텐츠를 완전히 분리하려면 pages 테이블의 site_domain 컬럼과 게시판 설정 연동이 필요합니다.
10. 실전 운영 사례
10.1 브랜드 분리 운영
동일 콘텐츠를 서로 다른 브랜드 디자인으로 제공하는 경우입니다.
| 도메인 |
테마 |
메뉴 그룹 |
| maindomain.com |
corporate (메인 기업 테마) |
main |
| blog.maindomain.com |
blog-minimal (블로그 테마) |
blog-nav |
| shop.maindomain.com |
ecommerce (쇼핑몰 테마) |
shop-nav |
10.2 다국어 사이트 운영
동일 콘텐츠를 언어별 도메인으로 제공하는 경우입니다.
| 도메인 |
언어(language) |
메뉴 그룹 |
extra_config 예시 |
| mysite.kr |
ko |
menu-kr |
{"lang_code":"ko","currency":"KRW"} |
| mysite.com |
en |
menu-en |
{"lang_code":"en","currency":"USD"} |
| mysite.jp |
ja |
menu-ja |
{"lang_code":"ja","currency":"JPY"} |
11. 전체 사용 절차
11.1 서브 도메인 사이트 추가 절차
- DNS에서 서브도메인(blog.mysite.com) A 레코드를 메인 서버 IP로 설정
- 웹서버(Nginx/Apache)에서 해당 서브도메인 가상 호스트 설정
- [관리자 → 메뉴 관리]에서 blog-menu 그룹 생성 및 메뉴 항목 추가
- [관리자 → 테마 관리]에서 blog용 테마 설치 및 확인
- [관리자 → 멀티사이트 통합 관리] 접속
- 우측 폼에 blog.mysite.com 도메인 입력
- 사이트명•테마(blog-theme)•메뉴 그룹(blog-menu) 설정
- [새 사이트 등록하기] 클릭
- blog.mysite.com 접속하여 설정 테마•메뉴 확인
12. 자주 묻는 질문 (FAQ)
Q1. 새 도메인을 등록했는데 여전히 기본 테마가 표시됩니다.
A. ① DNS가 올바르게 전파되었는지 확인하세요(전파에 수 분~수 시간 소요). ② 웹서버(Nginx/Apache)에서 해당 도메인의 가상 호스트가 DXCMS를 가리키는지 확인하세요. ③ 등록한 도메인이 실제 HTTP_HOST와 정확히 일치하는지 확인하세요(www 포함 여부, 대소문자). ④ 캐시 환경이라면 DxCache::flush()가 정상 실행되었는지 확인하세요.
Q2. 같은 도메인을 두 번 등록하면 어떻게 됩니까?
A. domain 컬럼에 UNIQUE KEY가 설정되어 있어 동일 도메인 중복 등록 시 DB 오류가 발생하고 저장이 중단됩니다. 기존 도메인을 수정하려면 해당 사이트의 [✏️] 수정 버튼을 사용하세요.
Q3. www.mysite.com과 mysite.com을 같은 설정으로 운영하려면?
A. 두 도메인을 각각 별개로 등록하여 동일한 테마•메뉴 그룹을 설정하세요. 또는 웹서버에서 www를 non-www로 리다이렉트하여 하나만 등록하는 방법도 있습니다.
Q4. extra_config에 잘못된 JSON을 입력하면?
A. 서버에서 json_decode()로 유효성을 검사합니다. JSON 문법이 틀리면 "추가 설정이 올바른 JSON 형식이 아닙니다." 오류가 표시되며 저장이 중단됩니다. JSON 검증 도구(jsonlint.com 등)를 활용하여 먼저 확인하세요.
Q5. 비활성화(status=0)된 사이트는 어떻게 동작합니까?
A. 비활성 사이트로 접속하는 방문자는 전역 기본 설정(settings 테이블의 theme, menu_group 등)이 적용됩니다. 사이트 정보는 DB에 보존됩니다. 목록에서는 "비활성" 빨간 배지로 구분됩니다.
Q6. 멀티사이트에서 도메인별로 다른 게시판을 보여줄 수 있나요?
A. 기본적으로 모든 도메인이 동일한 게시판을 공유합니다. 도메인별 게시판 분리를 원한다면 pages 테이블의 site_domain 컬럼을 활용하거나, 게시판 설정에서 도메인 필터링 기능을 플러그인으로 구현해야 합니다.
Q7. 사이트를 삭제하면 해당 도메인의 게시글도 삭제되나요?
A. 아니오. dx_sites 레코드(설정 정보)만 삭제됩니다. 게시글•회원•포인트 등 콘텐츠 데이터는 모두 보존됩니다. 삭제 후 해당 도메인 접속 시 전역 기본 설정이 적용됩니다.
13. 용어 정리
| 용어 |
설명 |
| dx_sites |
멀티사이트 설정 저장 DB 테이블. 접근 시 없으면 자동 생성. |
| domain |
접속 도메인. UNIQUE 인덱스. 예: example.com. https:// 및 경로 제외 순수 도메인명. |
| site_name |
도메인 브랜드/사이트 명칭. 미입력 시 domain으로 자동 설정. |
| site_description |
메타 description에 사용되는 사이트 설명. |
| site_url |
프로토콜 포함 정식 URL. 예: https://example.com. |
| theme |
도메인에 적용할 테마 폴더명. /themes/ 하위 폴더명과 일치. |
| menu_group |
도메인에서 사용할 메뉴 그룹. menus 테이블의 menu_group 값과 일치. |
| language |
사이트 언어 코드. 예: ko, en, ja. |
| timezone |
PHP 타임존 식별자. 예: Asia/Seoul, UTC. |
| footer_text |
사이트 푸터에 표시할 텍스트. 저작권 문구 등. |
| extra_config |
JSON 형식의 확장 설정. 도메인별 커스텀 키-값 자유롭게 정의. |
| status |
사이트 활성 여부. 1=활성, 0=비활성. 비활성 시 전역 기본 설정 적용. |
| sort_order |
목록 표시 순서. 낮을수록 상단. 동일 시 id ASC. |
| FQDN |
Fully Qualified Domain Name. 완전 정규화 도메인명. 예: blog.example.com. |
| HTTP_HOST |
클라이언트가 전송한 접속 도메인 헤더. 멀티사이트 감지에 사용. |
| 전역 기본 설정 |
settings 테이블에 저장된 전체 사이트 기본값. 미등록 도메인에 적용. |
| dx_current_site() |
현재 HTTP_HOST에 해당하는 dx_sites 레코드를 반환하는 헬퍼 함수. |
| uk_domain |
domain 컬럼의 UNIQUE KEY 인덱스. 동일 도메인 중복 등록 방지. |
| PRG 패턴 |
Post-Redirect-Get. 저장·삭제 후 ?msg=saved로 리다이렉트. 중복 제출 방지. |
| DxCache::flush() |
저장·삭제 후 전체 캐시를 초기화하여 변경 사항 즉시 반영. |