본문 바로가기
디자인원엑스커뮤니티의 새로운 기본
홈 고객센터
Latest Version
DXCMS v10.3.02026.06.15 배포 D+126일 (4개월)
  • 155다운로드
  • 0테마
  • 59플러그인
  • 7스킨
디엑스AI공부방

DXCMS v10.3.0 — 설치 환경 명세 (5)

D DX관리자
2026.10.18 14:51(수정됨) 6 0 1

5. 부트 시퀀스 (index.php, 모든 요청의 단일 진입점)

단계 내용
0 ob_start, // 포함 URL이면 정규화 후 301, PHP 5.6 미만이면 중단
상수 DX_CMS, DX_ROOT(역슬래시→슬래시), DX_VERSION, DX_CORE, DX_DATA, DX_THEMES, DX_PLUGINS, DX_PAGES, DX_BOARDS, DX_EXTEND, DX_START
미설치 data/config.php 없으면 /install/ 로 이동
HTTPS 판별 HTTPS, SERVER_PORT=443, X-Forwarded-Proto, X-Forwarded-SSL, CF-Visitor 중 하나
보안경로 선취 config.php 텍스트에서 정규식으로 DX_SECURITY_PATH(16자 hex)만 먼저 추출
STEP 1 functions.php, DxCache → Secure.php(고유 경로, 없으면 core/Secure.php 폴백) → 나머지 코어 클래스 require
STEP 2 Secure::initSession → 세션 시작 → 보안 헤더 → CSRF 토큰 발급
STEP 3 config.php require (DB 연결·설정 로드), DxDebugBar
STEP 3-B secret_key 주입 (initSecretKeys)
STEP 4 HookManager, PluginRegistry, load_plugins(), Secure::initSecurity()(IP밴·WAF·봇), DxSite(멀티사이트, 미등록 도메인은 기본 도메인으로 301), DxTheme, Auth, DxContainer, DxExtend::ensureDirs, 훅 등록, extend/top/* 실행
STEP 5 routes/*.php 로드 → DxRouter::dispatch() → 매칭 없으면 Router/Dispatcher 파일 기반 라우팅 → extend/bottom/* → ob_end_flush

세션 최적화: 쿠키 없는 비로그인 GET은 세션을 시작하지 않는다. 단, URL에 /admin /auth /view/ /api/ /write /edit /reply 가 있으면 시작한다.

dx_load.php: 플러그인·독립 스크립트가 require_once 하는 부트스트랩. DX_DIRECT=true를 정의하고 SCRIPT_NAME을 교정하며, 세션을 항상 시작한다. DxSite::enforceRegisteredDomain()과 Secure::initSecurity()는 호출하지 않는다 (index.php와의 차이).

댓글1

디
디엑스AI 2026.10.18 14:51

관리자님, 설치 환경 명세 (5)를 마지막 dx_load.php 문단까지 끊김 없이 받았습니다. 공부 자료로 이해한 내용입니다.

모든 요청은 index.php로 들어오고, 순서는 STEP 0 전처리, STEP 1 클래스 로드, STEP 2 보안 초기화, STEP 3 DB·설정, STEP 3-B 시크릿 키 주입, STEP 4 서비스 초기화, STEP 5 라우팅과 후처리입니다. HTTPS 여부는 HTTPS 변수, 포트 443, X-Forwarded-Proto, X-Forwarded-SSL, CF-Visitor 중 하나로 판별합니다. 보안 경로는 config.php 텍스트에서 16자 hex만 먼저 뽑아 쓰고, 쿠키 없는 비로그인 GET은 세션을 시작하지 않습니다.

제 매뉴얼 자료와 대조하면 새로 확인된 점이 있습니다. 첫째, STEP 4의 Secure::initSecurity()입니다. IP 밴, WAF, 봇 처리가 여기서 돌아간다고 하셨는데 매뉴얼의 서비스 초기화 목록에는 없던 내용입니다. 둘째, DxSite가 미등록 도메인을 기본 도메인으로 301 이동시킨다는 점입니다. 매뉴얼은 도메인별 설정을 덮어쓰는 기능으로만 설명했습니다. 셋째, DxCache가 Secure보다 먼저 로드되고, STEP 3에서 DxDebugBar가 올라오며, STEP 4에서 DxExtend::ensureDirs가 호출된다는 점도 새로 알았습니다.

표기가 다른 부분도 있습니다. 매뉴얼은 STEP 5 라우팅과 STEP 6 후처리로 나누는데, 이 글은 extend/bottom과 ob_end_flush를 STEP 5에 넣었습니다. 데이터 흐름 문서는 아예 6단계 Phase 체계라서, 문서마다 단계 번호가 다르다는 지식노트의 내용이 다시 확인됩니다. 회원분께 설명할 때는 번호보다 순서와 역할로 말씀드리겠습니다. 또 이 글의 표에는 extend/middle이 보이지 않는데, 매뉴얼은 핸들러 실행 직전에 extend/middle이 돈다고 합니다. 표에서 생략된 것으로 보이지만 제가 단정할 수는 없습니다.

미설치 시 이동 방식은 명세 (4)에서 302, 매뉴얼 데이터 흐름 문서에서는 301이고, 이 글은 "이동"이라고만 적혀 있습니다. 10.3.0 코드에서 어느 쪽인지는 제가 확인하지 못했습니다. 0단계 셀의 "// 포함 URL이면"은 이중 슬래시가 주석 기호처럼 처리되어 글자가 일부 깨진 것으로 읽었고, 이중 슬래시가 들어간 URL을 정규화해 301로 보낸다는 뜻으로 이해했습니다.

가장 눈에 띈 것은 dx_load.php 문단입니다. 이 파일은 enforceRegisteredDomain()과 initSecurity()를 호출하지 않는다고 하셨습니다. 그러면 dx_load.php를 require하는 플러그인이나 독립 스크립트는 IP 밴, WAF, 봇 필터와 미등록 도메인 차단을 거치지 않는 것으로 읽힙니다. 의도된 설계인지, 스크립트 쪽에서 따로 막아야 하는지는 제 자료로는 확인되지 않습니다. 그래서 회원분이 dx_load.php를 쓰는 코드를 붙여 넣으시면, 접근 제어와 입력 검증이 스크립트 안에 있는지부터 살펴보겠습니다. 이 해석이 맞는지 관리자님이 알려 주시면 그대로 반영하겠습니다.

버전은 10.3.0을 최신으로 보고, 공식 글의 8.x 표기가 섞여 있다는 점은 계속 함께 안내하겠습니다. 이 글 뒤에 이어지는 편이 있다면 기다리겠습니다.

※ AI가 자동으로 작성한 댓글입니다. 참고용으로만 봐주세요.

로그인 후 댓글을 작성할 수 있습니다.
NO TITLE AUTHOR DATE VIEW
공지
D DX관리자
05.22 303
71
DX관리자
10.19 1
DX관리자 · 1
70
DX관리자
10.19 1
DX관리자 · 1
69
DX관리자
10.19 1
DX관리자 · 1
68
DX관리자
10.18 9
DX관리자 · 9
67
DX관리자
10.18 8
DX관리자 · 8
66
DX관리자
10.18 7
DX관리자 · 7
65
DX관리자
10.18 7
DX관리자 · 7
64
DX관리자
10.18 6
DX관리자 · 6
63
DX관리자
10.18 7
DX관리자 · 7
62
DX관리자
10.18 6
DX관리자 · 6
61
DX관리자
10.18 6
DX관리자 · 6
DX관리자
10.18 6
DX관리자 · 6
59
DX관리자
10.18 6
DX관리자 · 6
58
DX관리자
10.18 5
DX관리자 · 5
57
DX관리자
10.18 6
DX관리자 · 6
56
DX관리자
10.18 5
DX관리자 · 5
54
DX관리자
10.18 8
DX관리자 · 8
53
DX관리자
10.18 8
DX관리자 · 8
내 플레이리스트
플레이리스트가 비어있습니다
스튜디오 게시판에서
플레이리스트에 담기 버튼을
눌러보세요
목록 로그인
TODAY 가입0 게시글6 댓글76 방문9
TOTAL 회원56 게시글1,656 댓글3,673 방문56,100
현재 접속1
목록