회원가입 | 고객센터 |
DESIGNONEX
dxcms.kr
로그인 회원가입
고객센터
2. 시작 가이드

기본 폴더 구조 설명

D DX
2026.04.20 23:56(수정됨) 125 0

1. 최상위 폴더 / 파일 구조

프로젝트 루트(dxcms-803/)에는 다음과 같은 폴더와 핵심 파일이 위치합니다.
DXCMS/
├── index.php              ← 단일 진입점 (모든 HTTP 요청 처리)
├── .htaccess              ← Apache URL Rewrite 규칙
├── nginx.conf.example     ← Nginx 설정 예시
├── web.config             ← IIS URL Rewrite 규칙
├── fix_permissions.bat    ← Windows 권한 일괄 설정
│
├── core/                  ← CMS 엔진 핵심 (직접 수정 비권장)
├── admin/                 ← 관리자 패널
├── boards/                ← 게시판 핸들러 • 스킨
├── themes/                ← 프론트엔드 테마
├── plugins/               ← 확장 플러그인
├── assets/                ← CSS • JS • 에디터 • 이미지
├── controllers/           ← 페이지 컨트롤러
├── routes/                ← URL 라우팅 정의
├── extend/                ← 코드 자동 삽입 폴더
├── data/                  ← 런타임 데이터 (캐시 • 업로드)
├── pages/                 ← 커스텀 페이지 핸들러
├── api/                   ← 외부 API 엔드포인트
├── install/               ← 설치 마이그레이션
└── docs/                  ← 개발 문서


2.1 index.php — 단일 진입점

모든 HTTP 요청은 index.php 하나로 집중됩니다. URL Rewrite 설정이 없는 환경에서는 ?_url=/경로 쿼리스트링 방식으로도 동작합니다. 이 파일은 다음 순서로 실행됩니다.
  • 보안 초기화 (Secure.php)
  • 사이트 설정 로드 (DxSite.php)
  • URL 파싱 및 라우팅 (Router → Dispatcher)
  • 테마 레이아웃 렌더링 (DxTheme.php)


2.2 .htaccess / nginx.conf.example / web.config

각 웹서버 환경에 맞는 URL Rewrite 설정 파일입니다. 모든 요청을 index.php로 포워딩하여 PHP가 라우팅을 전담합니다. .htaccess는 Apache용, nginx.conf.example은 Nginx용, web.config는 IIS용입니다.


3. core/ — CMS 엔진

CMS의 핵심 로직이 담긴 폴더입니다. 직접 수정은 권장하지 않으며, 보안 패치의 경우 core/Secure.php 한 파일만 수정하면 됩니다.


3.1 핵심 클래스 파일

파일명 역할 설명
Secure.php ★ 보안 전담 — CSRF 토큰, XSS 방어, 세션 보안, 비밀번호 해시(bcrypt), 업로드 검증, 보안 헤더 일괄 처리
functions.php 공통 유틸리티 함수 모음. dx_esc(), dx_csrf_*() 등 전역 함수 정의
DxCache.php 파일/APCu 이중 캐시 드라이버. APCu 설치 여부를 자동 감지하여 최적 드라이버 선택
DxSeo.php SEO 헬퍼 — OG 태그, Twitter Card, JSON-LD 구조화 데이터, 동적 사이트맵 생성
DxCategory.php 카테고리 렌더링 헬퍼. DB 기반 무한 깊이 계층구조 처리 및 스킨 렌더링
DxSanitizer.php 입력값 정제 및 HTML 필터링. XSS 공격 방지를 위한 출력 이스케이프
DxTheme.php 테마 엔진 — 테마 로드, 레이아웃 렌더링, 파트(header/footer) 처리
DxSite.php 멀티사이트 관리 — 도메인별 독립 설정(사이트명•테마•메뉴•시간대) 로드
DxExtend.php extend/ 폴더 자동 실행 엔진. 파일명 오름차순 실행, 개별 오류 격리
DxPoint.php 포인트/경험치/레벨 시스템 — 게시글 작성•댓글•추천 시 포인트 자동 적립
DxBoardSkin.php 게시판 스킨 폴백 체인 — 테마 스킨 → 지정 스킨 → 기본 스킨 순서로 탐색
DxMarket.php 마켓 시스템 — 플러그인 배포, 구매, 라이선스 관리
PluginRegistry.php 플러그인 등록/활성화 관리. dx_register_plugin() 함수로 등록된 플러그인 처리
DxRouter.php URL 파싱 및 라우트 결정. RESTful URL 패턴 매칭
DxContainer.php 의존성 주입(DI) 컨테이너 — 서비스 인스턴스 관리
DxCss.php CSS 변수 및 테마 색상 동적 생성
DxCaptcha.php 캡차 생성 및 검증 처리
DxMailer.php 이메일 발송 처리 (SMTP / PHP mail)
DxSms.php SMS 발송 연동
DxSocialAuth.php 소셜 로그인 (카카오/네이버/구글/GitHub) OAuth2 처리
DxShop.php 쇼핑몰 기능 — 상품 관리, 주문, 결제 플러그인 연동
DxNotification.php 실시간 알림 시스템 — 알림 생성, 조회, 읽음 처리
DxMigration.php DB 마이그레이션 자동 실행 관리
DxPopup.php 팝업창 관리
DxThumb.php 이미지 썸네일 생성 (GD 기반 리사이즈)
DxMemberMonitor.php 회원 접속 모니터링
DxFriend.php 친구/팔로우 기능


3.2 core/ 하위 폴더

하위 폴더 역할
core/api/ 내부 API 핸들러 — upload.php(파일 업로드), download.php(파일 다운로드), comment.php(댓글 CRUD), like.php(좋아요), sitemap.php(동적 XML 사이트맵), robots.php
core/auth/ 세션 기반 인증 처리 (Auth.php). 로그인/로그아웃/회원가입 로직
core/db/ PDO 래퍼 싱글턴 (Database.php). 쿼리 실행, 트랜잭션, 에러 처리
core/router/ Router.php(URL 파싱 • 라우트 결정), Dispatcher.php(라우트 → 핸들러 실행)
core/hook/ 훅 시스템 (HookManager.php). dx_add_hook(), dx_do_hook() 처리
core/cache/ 캐시 드라이버 구현체 — 파일 캐시, APCu 캐시
core/security/ 추가 보안 모듈 — Rate Limit, IP 차단 등
core/mailer/ 메일 발송 드라이버 구현체
core/sms/ SMS 발송 드라이버 구현체
core/captcha/ 캡차 이미지 생성
core/search/ 전문 검색 처리 모듈


4. admin/ — 관리자 패널

사이트 전반을 관리하는 백엔드 패널입니다. admin/index.php가 공통 레이아웃(사이드바•헤더)을 담당하며, 각 기능은 하위 폴더의 index.php로 분리되어 있습니다.
 
폴더 기능 설명
admin/dashboard/ 관리자 대시보드 — 통계 요약, 최근 게시글, 접속 현황 한눈에 보기
admin/boards/ 게시판 관리 — 생성/수정/삭제, 에디터 선택(CKEditor4/Jodit/TinyMCE), 카테고리 스킨 지정, 권한 설정
admin/board_groups/ 게시판 그룹 관리 — 여러 게시판을 묶어 메뉴에 표시
admin/categories/ 카테고리 관리 — 계층 카테고리 생성, 표시 위치(리스트 탭/뷰 배지) on/off, 배지 색상 지정
admin/members/ 회원 관리 — 회원 목록, 상세 정보 수정, 포인트 조정, 레벨 변경, 탈퇴 처리
admin/menus/ 메뉴 관리 — 내비게이션 메뉴 구성, 게시판•페이지 빠른 선택 UI 제공
admin/pages/ 독립 페이지 관리 — 헤더•푸터 없이 단독 실행 가능한 커스텀 페이지
admin/themes/ 테마 관리 — 활성 테마 선택, 테마 미리보기
admin/plugins/ 플러그인 관리 — 설치된 플러그인 활성화/비활성화, 플러그인별 설정
admin/settings/ 사이트 설정 — 기본 정보, SEO 설정(OG•Analytics), 캐시 설정, 메일 설정
admin/statistics/ 방문자 통계 — 일별/월별 방문자 그래프, 인기 검색어 순위
admin/levels/ 회원 레벨 설정 — 레벨별 포인트 기준, 권한 설정
admin/points/ 포인트 관리 — 적립/차감 이력, 포인트 지급 규칙 설정
admin/market/ 마켓 관리 — 플러그인 마켓 상품 등록 및 관리
admin/shop/ 쇼핑몰 관리 — 상품 목록, 주문 내역, 재고 관리
admin/downloads/ 다운로드 파일 관리 — 첨부파일 현황, 불필요 파일 정리
admin/global_notices/ 전역 공지사항 — 사이트 전체에 표시되는 공지 관리
admin/popup/ 팝업 관리 — 팝업 생성, 기간 설정, 위치 설정
admin/sendmail/ 메일 발송 — 회원 대상 일괄 메일 발송
admin/sendsms/ SMS 발송 — 회원 대상 일괄 SMS 발송
admin/sites/ 멀티사이트 관리 — 도메인별 사이트 등록 및 설정
admin/social/ 소셜 로그인 설정 — 카카오/네이버/구글/GitHub OAuth 키 관리
admin/socket/ 실시간 소켓 모니터 — WebSocket 연결 현황, 접속자 목록
admin/ranking/ 랭킹 관리 — 포인트•레벨 기반 회원 순위
admin/popular/ 인기 콘텐츠 — 조회수•추천 기반 인기글 현황


5. boards/ — 게시판 시스템

게시판 기능의 핵심 처리 로직과 스킨 템플릿이 위치하는 폴더입니다.
boards/
├── handler.php          ← 게시판 메인 핸들러 (목록/보기/쓰기/수정/삭제/댓글)
├── skins/               ← 게시판 스킨 (화면 렌더링 템플릿)
│   ├── default/         ← 기본 스킨
│   ├── gallery/         ← 갤러리형 스킨
│   └── shop/            ← 쇼핑몰형 스킨
└── category/
    └── skins/           ← 카테고리 탭 스킨
        ├── default/     ← 기본 카테고리 탭
        └── (커스텀)/    ← 관리자에서 지정 가능


5.1 handler.php

게시판의 모든 액션을 처리하는 핵심 파일입니다. URL 파라미터에 따라 목록/보기/쓰기/수정/삭제/댓글 처리를 분기합니다.
  • 목록 (list): 페이지네이션, 검색, 카테고리 필터, 정렬(최신/추천) 처리
  • 보기 (view): 게시글 상세, 조회수 증가, 댓글 목록, 이전/다음 글 링크
  • 쓰기/수정 (write/edit): CSRF 토큰 검증, 파일 업로드(MIME+이중확장자 검증), 포인트 적립
  • 삭제 (delete): 첨부파일 unlink, 댓글•좋아요•스크랩 완전 삭제


5.2 게시판 스킨 구조

스킨은 HTML/PHP 템플릿 파일의 집합으로, 게시판의 시각적 표현을 담당합니다. 스킨 폴백 체인은 다음 우선순위로 동작합니다.
1순위: themes/[테마명]/board/        ← 테마별 커스텀 스킨
2순위: boards/skins/[지정 스킨명]/   ← 게시판에 지정된 스킨
3순위: boards/skins/default/         ← 기본 스킨 (폴백)


6. themes/ — 테마 시스템

사이트의 프론트엔드 디자인 전체를 담당합니다. 현재 default 테마가 포함되어 있으며, 추가 테마를 이 폴더에 배치하면 관리자에서 선택 가능합니다.
themes/
└── default/
    ├── theme.json         ← 테마 메타정보 (이름, 버전, 설명)
    ├── style.css          ← 테마 전역 스타일 (CSS 변수 기반)
    ├── layout/            ← 레이아웃 템플릿
    │   ├── main.php       ← 메인 레이아웃 (header+content+footer)
    │   ├── header.php     ← 헤더 (네비게이션, 로고)
    │   └── footer.php     ← 푸터
    ├── board/             ← 게시판 테마 오버라이드 스킨
    ├── board_latest/      ← 최신글 위젯 스킨 (list/card/simple)
    ├── page/              ← 독립 페이지 렌더링
    ├── parts/             ← 공통 파트 (알림, 팝업, 소셜 버튼 등)
    ├── search/            ← 검색 결과 페이지
    └── icons/             ← 테마 아이콘 파일


6.1 theme.json

테마의 메타 정보를 정의하는 JSON 파일로, 이름•버전•설명•지원 해상도•색상 팔레트 등이 포함됩니다.


6.2 style.css — CSS 변수 기반 테마

CSS 커스텀 프로퍼티(변수)를 활용하여 색상•폰트•간격 등 디자인 토큰을 중앙에서 관리합니다. 다크 모드도 CSS 변수 전환만으로 완전 지원됩니다.


6.3 board_latest/ — 최신글 위젯

홈이나 사이드바에 삽입하는 최신글 위젯입니다. 세 가지 스킨을 제공합니다.
  • list: 제목+날짜 심플 리스트형
  • card: 썸네일 이미지 + 제목 + 발췌문 카드형
  • simple: 제목만 표시하는 초경량형


7. plugins/ — 플러그인 시스템

기능 확장을 위한 플러그인 폴더입니다. 각 플러그인은 독립 폴더로 분리되어 있으며, plugin.php 파일에서 dx_register_plugin()으로 등록됩니다.

7.1 플러그인 등록 구조

// plugins/my-plugin/plugin.php
dx_register_plugin(array(
    'id'      => 'my-plugin',
    'type'    => 'editor',   // editor | payment | socket | captcha
    'name'    => 'My Plugin',
    'version' => '1.0.0',
    'settings' => array( ... ),
));


7.2 기본 제공 플러그인 목록

플러그인 폴더 타입 설명
ckeditor4-editor editor CKEditor 4 WYSIWYG 에디터 (기본 활성)
dx-socket socket WebSocket 실시간 기능 — 접속자 수, 실시간 댓글•알림•채팅
example-plugin 기타 플러그인 개발 참고용 예제
tosspay-payment payment 토스페이 결제 연동
kakaopay-payment payment 카카오페이 결제 연동
naverpay-payment payment 네이버페이 결제 연동
danal-payment payment 다날 결제 연동 (신용카드•휴대폰)
kcp-payment payment NHN KCP 결제 연동
kg-inicis-payment payment KG이니시스 결제 연동
nicepay-payment payment 나이스페이먼츠 결제 연동
payletter-payment payment 페이레터 결제 연동
paypal-payment payment PayPal 해외 결제 연동
stripe-payment payment Stripe 해외 결제 연동
custom-payment-template payment 커스텀 결제 플러그인 개발 템플릿


7.3 dx-socket 플러그인 구조

WebSocket 기반 실시간 기능을 제공하는 핵심 플러그인입니다. 별도 Node.js 서버와 통신합니다.
plugins/dx-socket/
├── plugin.php     ← 플러그인 등록 • PHP-측 WebSocket 클라이언트
├── admin/           ← 소켓 서버 상태 모니터링 관리자 페이지
└── chats/           ← 실시간 채팅 UI 컴포넌트  


8. assets/ — 정적 자원

CSS, JavaScript, 이미지, CKEditor 에디터 등 프론트엔드 정적 자원이 모두 이 폴더에 위치합니다.
assets/
├── ckeditor4/       ← CKEditor 4.25.1-LTS (로컬 서빙 — CDN 의존 없음)
│   ├── ckeditor.js  ← CKEditor 메인 파일
│   ├── config.js    ← 에디터 기본 설정
│   ├── lang/        ← 다국어 지원 (40개+ 언어)
│   ├── plugins/     ← 에디터 플러그인 (코드하이라이트, 이미지 업로드 등)
│   └── skins/       ← 에디터 UI 스킨
├── css/             ← 공통 CSS 파일
├── js/              ← 공통 JavaScript 파일
└── img/             ← 시스템 공통 이미지


8.1 CKEditor 4 로컬 서빙

CKEditor 4는 CDN 없이 로컬 파일로 서빙됩니다. 이는 인터넷이 제한된 환경에서도 에디터가 정상 동작하며, 외부 의존성을 제거하여 보안과 성능을 향상시킵니다. 주요 기능은 다음과 같습니다.
  • 멀티 이미지 업로드 (툴바 버튼 + 드래그&드롭)
  • 유튜브 URL 붙여넣기 → iframe 자동 변환
  • 코드 하이라이트 (monokai_sublime 테마)
  • 댓글 에디터 활성화 옵션


9. extend/ — 코드 자동 삽입

훅 등록 없이 파일만 폴더에 넣으면 CMS가 자동으로 실행해주는 코드 삽입 폴더입니다. 파일명 오름차순으로 실행되며, 개별 파일에서 오류가 발생해도 다른 파일에 영향을 주지 않습니다.
extend/
├── top/              ← index.php 초기화 직후 실행 (보안•인증 전처리)
│   ├── 01_maintenance.php   ← 점검 모드 구현 예시
│   └── 02_ip_block.php      ← IP 차단 구현 예시
├── middle/           ← 라우팅 결정 후, 컨트롤러 실행 전
│   └── 01_visit_log.php     ← 방문자 로그 기록 (기본 포함)
└── bottom/           ← 출력 완료 직전 (성능 측정•애널리틱스)
    └── 99_perf.php          ← 성능 측정 예시


9.1 실행 시점

폴더 실행 시점 주요 활용
extend/top/ 보안 초기화 직후 점검 모드, IP 차단, 커스텀 인증 처리
extend/middle/ 라우팅 결정 후 방문자 로그, A/B 테스트, 리다이렉트 로직
extend/bottom/ 응답 출력 직전 성능 측정, 외부 트래킹 코드 삽입


10. data/ — 런타임 데이터

CMS가 실행 중 생성하는 파일들이 저장되는 폴더입니다. 웹 서버는 이 폴더에 쓰기 권한을 가져야 합니다.
data/
├── cache/            ← 파일 캐시 저장 (.cache 파일)
│   ├── settings_*.cache   ← 사이트 설정 캐시 (TTL 5분)
│   ├── board_*.cache      ← 게시판 목록 캐시 (TTL 1분)
│   └── sitemap_*.cache    ← 사이트맵 캐시 (TTL 10분)
├── boards/           ← 게시판별 업로드 파일
│   ├── [board_key]/  ← 게시판 키별 업로드 폴더
│   └── [board_key]/.htaccess  ← PHP 실행 차단 보안 설정
└── pages/            ← 독립 페이지 업로드 파일


10.1 캐시 자동 무효화

데이터 변경 시 관련 캐시는 자동으로 삭제됩니다.
  • 설정 저장 → 전체 캐시 flush
  • 게시글 작성/수정/삭제 → 해당 게시판 캐시만 삭제
  • 카테고리 변경 → 전체 게시판 목록 캐시 삭제


11. routes/ — URL 라우팅

URL 패턴과 핸들러를 연결하는 라우팅 정의 파일이 위치합니다. core/DxRouter.php가 이 폴더의 정의를 읽어 라우팅을 처리합니다.
 
URL 패턴 처리 대상
/ 홈 (메인 페이지)
/[board_key] 게시판 목록
/[board_key]/view/[id] 게시글 보기
/[board_key]/write 게시글 작성
/[board_key]/edit/[id] 게시글 수정
/[slug] 커스텀 독립 페이지
/auth/login 로그인
/auth/register 회원가입
/mypage 마이페이지
/admin 관리자 대시보드
/api/upload 파일 업로드 API (CSRF 보호)
/api/comment 댓글 CRUD API
/api/like 좋아요 API
/sitemap.xml 동적 사이트맵 인덱스
/sitemap-posts-N.xml 게시글 사이트맵 (페이지 분할)
/robots.txt 동적 robots.txt


12. controllers/ — 페이지 컨트롤러

로그인, 회원가입, 마이페이지, 검색 등 특수 페이지의 처리 로직을 담당하는 컨트롤러 파일들이 위치합니다. 각 컨트롤러는 라우터에 의해 호출됩니다.


13. api/ — 외부 API 엔드포인트

외부에서 직접 접근 가능한 API 엔드포인트 파일들입니다. AJAX 요청이나 외부 연동에 활용됩니다. 모든 API는 CSRF 토큰 검증을 통해 보안이 유지됩니다.


14. install/ — 설치 및 마이그레이션

최초 설치와 버전 업그레이드 시 DB 스키마를 자동 생성•수정하는 마이그레이션 파일이 위치합니다.
install/
├── migrate.php          ← 메인 마이그레이션 실행기
├── schema.sql           ← 최초 설치용 DB 스키마
└── migrations/          ← 버전별 증분 마이그레이션 파일
    ├── v1.0.0.php
    ├── v1.2.0.php       ← 마이페이지 프로필 확장 (컬럼 8개 추가)
    └── v1.2.3.php       ← 소셜 로그인 테이블 추가


15. 보안 구조

DXCMS의 모든 보안 코드는 core/Secure.php 한 파일에 집중되어 있습니다. 보안 패치가 필요할 때 이 파일만 수정하면 됩니다.
 
보안 항목 구현 방식
CSRF 방어 모든 POST 요청에 토큰 검증 (dx_csrf_token/dx_csrf_verify)
XSS 방어 출력 시 dx_esc() 이스케이프 함수 강제 사용
세션 보안 HttpOnly • Secure • SameSite=Lax 쿠키 플래그
파일 업로드 보안 MIME 타입 + 확장자 이중 검증, 이중 확장자 공격 차단
경로 순회 방어 Path Traversal 공격 입력값 차단
비밀번호 해시 bcrypt (PHP 5.6 폴백 포함)
보안 헤더 X-Frame-Options • X-Content-Type-Options • Referrer-Policy 자동 삽입
Rate Limiting 단위 시간당 요청 횟수 제한
업로드 폴더 보호 data/boards/ 하위에 PHP 실행 차단 .htaccess 자동 생성


16. 훅 시스템

WordPress 방식의 훅 시스템을 지원합니다. 플러그인이나 extend 파일에서 특정 실행 시점에 코드를 삽입할 수 있습니다.
// 훅 등록
dx_add_hook('dx_head', function() {
    echo '<link rel="stylesheet" href="/my.css">';
}, 10); // 우선순위 (낮을수록 먼저 실행)

// 훅 실행
dx_do_hook('dx_head');
 
훅 이름 실행 위치
dx_head <head> 태그 내부
dx_body_bottom </body> 직전
dx_board_list_context 게시판 목록 컨텍스트 생성 후
dx_board_view_context 게시글 보기 컨텍스트 생성 후
dx_board_after_save 게시글 저장 후
dx_admin_top 관리자 본문 상단
dx_editor_render 에디터 렌더링 시점


17. 멀티사이트 구조

dx_sites 테이블에 도메인을 등록하면 도메인별로 완전히 독립된 사이트 설정이 적용됩니다. 하나의 CMS 설치로 여러 사이트를 운영할 수 있습니다.
 
독립 적용 항목 설명
사이트명 • 설명 • URL 각 도메인별 고유 사이트 정보
테마 도메인마다 다른 테마 적용 가능
메뉴 그룹 도메인마다 다른 내비게이션 메뉴
언어 • 시간대 다국어/다지역 사이트 운영 지원
SEO 사이트맵 각 도메인이 자신의 URL 기준으로 독립 생성


18. 전체 폴더 구조 요약

DXCMS/
├── index.php              단일 진입점
├── .htaccess              Apache URL Rewrite
├── nginx.conf.example     Nginx 설정 예시
├── web.config             IIS URL Rewrite
│
├── core/                  CMS 엔진 (Secure, Cache, SEO, Router, DB, 훅 등)
├── admin/                 관리자 패널 (게시판•회원•통계•설정 등 25개 메뉴)
├── boards/                게시판 핸들러 + 스킨 (default/gallery/shop)
├── themes/                프론트엔드 테마 (레이아웃•파트•위젯)
├── plugins/               확장 플러그인 (에디터•결제•소켓•예제)
├── assets/                정적 자원 (CSS•JS•CKEditor4•이미지)
├── controllers/           페이지 컨트롤러 (로그인•마이페이지•검색)
├── routes/                URL 라우팅 정의
├── extend/                자동 실행 코드 삽입 (top/middle/bottom)
├── data/                  런타임 데이터 (캐시•업로드 파일)
├── pages/                 커스텀 독립 페이지
├── api/                   외부 API 엔드포인트
├── install/               DB 설치 • 마이그레이션
└── docs/                  개발 문서
 
 

댓글0

로그인 후 댓글을 작성할 수 있습니다.
1. DX 철학 / 개념 왜 DXCMS를 만들었는가 2026.04.20 1. DX 철학 / 개념 DXCMS란 무엇인가 2026.04.20 DXCMS 활용 (CMS) DXCMS 날코딩•막코딩 완전 허용 2026.04.12
31
전체 회원
503
전체 게시글
775
전체 댓글
442
오늘 방문
33,174
전체 방문
3
현재 접속
인기글 7일 이내
최신글
최신댓글
목록