회원가입 | 고객센터 |
DESIGNONEX DXCMS BOARD
로그인
DESIGNONEX
디자인원엑스
About
Service
Q&A
PR리그
자유게시판
갤러리
포인트게임
공지사항
로그인 회원가입
고객센터
3.2 폴더 구조

core/ — CMS 엔진

A Administrator
2026.04.21 00:32(수정됨) 24 0

core/ — CMS 엔진

CMS 의 핵심 기능이 모두 담긴 폴더입니다. 직접 수정을 권장하지 않으며, 업데이트 시 이 폴더가 교체됩니다. 보안 패치는 예외적으로 core/Secure.php 한 파일만 수정하면 됩니다.

수정 지침
  • 기능 추가 → extend/ 폴더 또는 plugins/ 폴더를 이용하세요
  • 화면 수정 → themes/ 폴더의 스킨 파일을 수정하세요
  • 보안 패치 → core/Secure.php (또는 core/security/{hash}/Secure.php) 만 수정하세요
  • DB 쿼리 추가 → routes/ + controllers/ 또는 extend/ 를 활용하세요


1 functions.php — 전역 헬퍼 함수

index.php 에서 가장 먼저 로드되는 파일로, 클래스보다 앞서 전역 함수를 정의합니다. 모든 PHP 파일에서 접두사 dx_ 로 사용할 수 있습니다.
 
함수 그룹 주요 함수 설명
보안 난수 dx_random_bytes()` / `dx_random_hex() PHP 5.6~8.x 호환 안전 난수 (random_bytes → openssl → mcrypt → mt_rand 폴백)
경로 유틸 dx_realpath()` / `dx_path_inside() 크로스 플랫폼 경로 처리 (Windows \ → / 자동 변환)
URL 처리 dx_base_url()` / `dx_request_uri() 베이스 URL 생성, 현재 요청 URI 정규화
출력 보안 dx_esc()` / `dx_esc_attr()` / `dx_esc_js() XSS 방어 출력 이스케이프 (HTML/속성/JS 컨텍스트별)
CSRF dx_csrf_token()` / `dx_csrf_field()` / `dx_csrf_check() Secure 클래스 위임 — 기존 코드 호환 유지
설정 dx_config()` / `dx_set_config() 전역 $dx_config 배열 안전 접근
DB 단축 dx_db()` / `dx_find()` / `dx_rows() QueryBuilder 및 Database 단축 함수
테마 dx_theme_option()` / `dx_menu_group() 테마 옵션, 메뉴 그룹 조회
리다이렉트 dx_redirect()` / `dx_error() 헤더 리다이렉트, HTTP 오류 응답
로그 dx_log()` / `dx_error_log() data/error.log 기록


3.2 Secure.php — 보안 전담 클래스

CMS 의 모든 보안 로직이 집약된 단일 파일입니다. 설치 시 16자리 해시 경로에 복사되어 경로가 난독화됩니다.
 
// 실제 로드 경로 (index.php STEP 1)
// 1순위: core/security/{DX_SECURITY_PATH}/Secure.php
// 2순위: core/Secure.php  (파일 손실 또는 신규 설치 전 폴백)

// DX_SECURITY_PATH = 설치 시 생성된 16자리 랜덤 해시
// → 소스코드 유출 시에도 Secure.php 위치 예측 불가
 
담당 기능 구현 방식
세션 보안 HttpOnly • Secure • SameSite=Lax 쿠키 플래그 + 세션 토큰 검증
CSRF 방어 TTL 3시간 토큰 발급/검증, 하트비트로 자동 갱신
보안 헤더 X-Frame-Options • X-Content-Type-Options • Referrer-Policy • CSP Nonce
WAF SQL Injection • XSS 패턴 탐지 (에디터 필드는 오탐 방지 제외)
Rate Limit Redis 기반 (파일 fallback) — 10초 내 60회, IP별 분당 200회
파일 업로드 검증 MIME + 확장자 이중 검증 + getimagesize() 실제 이미지 확인
비밀번호 해시 bcrypt (PHP 5.6 polyfill 포함)
시크릿 키 DX_SECRET_KEY → 세션/CSRF 키 이름 동적 도출 (사이트마다 고유)


3.3 핵심 Dx*.php 클래스 파일 (21개)

파일명 역할 요약
DxCache.php 멀티 드라이버 캐시 — Redis → APCu → 파일 → None 자동 선택
DxSeo.php SEO 헬퍼 — OG/Twitter Card, JSON-LD 구조화 데이터, 동적 사이트맵•robots.txt
DxCategory.php DB 기반 무한 깊이 카테고리 렌더링 + 스킨 폴백
DxSanitizer.php 입력 정제•HTML 필터링 (XSS 공격 방지)
DxTheme.php 테마 엔진 — 폴백 체인 resolve(), 변수 주입 render()
DxSite.php 멀티사이트 — HTTP_HOST 감지 → 도메인별 dx_config 오버라이드
DxExtend.php extend/ 폴더 자동 실행 엔진 (오류 격리 포함)
DxPoint.php 포인트•경험치•레벨 시스템 — 게시글•댓글•추천 시 자동 적립
DxBoardSkin.php 게시판 스킨 폴백 체인 (6단계 탐색)
DxMarket.php 플러그인 마켓 — 상품 등록•구매•라이선스 관리
PluginRegistry.php 플러그인 등록•활성화 관리 (dx_register_plugin)
DxRouter.php 라라벨 스타일 라우터 (GET/POST/PUT/PATCH/DELETE/resource/group)
DxContainer.php DI 컨테이너 — bind/singleton/instance/alias, 컨트롤러 자동 로드
DxMailer.php 메일 발송 — 드라이버 패턴 (SMTP/sendmail/PHP mail)
DxSms.php SMS 발송 — 드라이버 패턴 (CoolSMS/NCP/KT Bizmeka/Twilio)
DxSocialAuth.php 소셜 로그인 OAuth2 처리 (카카오•네이버•구글•GitHub)
DxShop.php 쇼핑몰 기능 — 상품•주문•결제 플러그인 연동
DxNotification.php 실시간 알림 시스템 — 생성•조회•읽음 처리
DxPopup.php 팝업 렌더링 — dx_body_bottom 훅에 자동 등록
DxThumb.php 이미지 썸네일 생성 — GD 리사이즈 + 투명 PNG 처리
DxCss.php CSS 변수 동적 생성 (테마 색상 주입)
DxCaptcha.php 캡차 드라이버 관리자 (Built-in/reCAPTCHA v2•v3/hCaptcha/Turnstile)
DxMigration.php DB 마이그레이션 자동 실행
DxMemberMonitor.php 회원 온라인 상태 추적 (last_seen 갱신)
DxFriend.php 친구•팔로우 기능


3.4 core/api/ — 내부 API 핸들러 (25개)

AJAX 요청 등 프론트엔드에서 직접 호출하는 API 엔드포인트 파일들입니다. URL 패턴은 /api/{파일명} 형식이며, 모든 파일은 CSRF 검증을 포함합니다.
 
파일 URL 예시 기능
upload.php /api/upload 파일 업로드 — MIME•이중확장자 검증, 멀티 업로드
download.php /api/download 파일 다운로드 — 권한 검증, 다운로드 수 증가
comment.php /api/comment 댓글 CRUD — 작성•수정•삭제•목록
comment_delete.php /api/comment_delete 댓글 hard delete + 좋아요 일괄 삭제
post_delete.php /api/post_delete 게시글 완전 삭제 — 첨부파일•댓글•좋아요•스크랩
like.php /api/like 좋아요 토글 (게시글•댓글)
scrap.php /api/scrap 스크랩 토글
sitemap.php /api/sitemap 동적 XML 사이트맵 인덱스•게시글 페이지
robots.php /api/robots 동적 robots.txt 생성
notification.php /api/notification 알림 목록•읽음 처리•전체 삭제
memo.php /api/memo 쪽지 발송•조회
friend.php /api/friend 친구•팔로우 추가•삭제
chat_dm.php /api/chat_dm 실시간 DM 메시지
draft_save.php /api/draft_save 게시글 임시저장
draft_load.php /api/draft_load 임시저장 불러오기
shop.php /api/shop 쇼핑몰 주문•결제 API
csrf_refresh.php /api/csrf_refresh CSRF 토큰 갱신 (하트비트)
member_profile.php /api/member_profile 회원 프로필 정보 조회
post_row.php /api/post_row 단일 게시글 HTML 행 반환 (실시간 갱신용)
captcha_image.php /api/captcha_image Built-in 캡차 이미지 생성
check_duplicate.php /api/check_duplicate 아이디•이메일 중복 확인
global_notice_row.php /api/global_notice_row 전역 공지사항 행 반환
js_log.php /api/js_log 프론트엔드 에러 로그 수신
link_click.php /api/link_click 링크 클릭 통계 기록
receive_socket_key.php /api/receive_socket_key WebSocket 인증 키 발급


3.5 core/auth/ — 인증 핸들러 (16개)

로그인•회원가입•마이페이지•소셜 로그인 처리 파일들입니다. Dispatcher 가 /auth/* URL 을 이 폴더로 라우팅합니다.
 
파일 URL 기능
Auth.php (클래스) 세션 인증 싱글턴 — isLoggedIn, isAdmin, login, logout
login.php /auth/login 로그인 폼 GET + POST 처리
logout.php /auth/logout 세션 파기 + 리다이렉트
register.php /auth/register 회원가입 폼 + DB 저장 + 이메일 인증
mypage.php /auth/mypage 마이페이지 — 내 게시글•댓글•스크랩•알림•포인트
profile.php /auth/profile 프로필 수정 — 이미지•자기소개•SNS
social.php /auth/social 소셜 로그인 선택 화면
social_callback.php /auth/social_callback 공통 소셜 콜백 처리
kakao.php / kakao_callback.php /auth/kakao 카카오 OAuth2 인증
naver.php / naver_callback.php /auth/naver 네이버 OAuth2 인증
google.php / google_callback.php /auth/google 구글 OAuth2 인증
github.php / github_callback.php /auth/github GitHub OAuth2 인증
_social_common.php (공통) 소셜 로그인 공통 로직 (계정 연결•신규 생성)
_social_notice.php (공통) 소셜 로그인 결과 알림 HTML


3.6 core/db/ — 데이터베이스 레이어

core/db/
├── Database.php      ← PDO 래퍼 싱글턴 (연결•쿼리•트랜잭션)
└── QueryBuilder.php  ← 메서드 체이닝 쿼리 빌더 + dx_db() 전역 함수
  • Database::getInstance() — PDO 싱글턴, prefix 자동 처리 (dx_posts → 실제 테이블명)
  • Database::row() / rows() / insert() / update() / delete() / find() / count()
  • QueryBuilder: dx_db('posts')->where('status',1)->orderBy('id','DESC')->limit(10)->get()
  • 트랜잭션: beginTransaction() / commit() / rollback()


3.7 core/router/ — 라우팅 레이어

core/router/
├── Router.php      ← URL 파싱 + 라우트 타입 결정 (home/board/page/admin/auth/api/search/404)
└── Dispatcher.php  ← 라우트 타입 → 핸들러 파일 실행 위임

Router.php 는 URL 세그먼트를 분석하여 요청 타입(TYPE_HOME, TYPE_BOARD, TYPE_PAGE, TYPE_ADMIN, TYPE_AUTH, TYPE_API, TYPE_SEARCH, TYPE_404)을 결정합니다. Dispatcher.php 는 그 결과를 받아 실제 핸들러 파일(boards/handler.php, admin/index.php 등)로 실행을 위임합니다.

라우터 타입 결정 우선순위
① /admin    → TYPE_ADMIN → admin/index.php
② /auth/*   → TYPE_AUTH  → core/auth/{액션}.php
③ /api/*    → TYPE_API   → core/api/{엔드포인트}.php
④ /search   → TYPE_SEARCH → core/search/handler.php
⑤ /         → TYPE_HOME  → pages/home.php 또는 테마 page/home.php
⑥ /{slug}   → DB에서 pages 테이블 조회 → 있으면 TYPE_PAGE
⑦ /{key}/*  → DB에서 boards 테이블 조회 → 있으면 TYPE_BOARD
⑧ 없음      → TYPE_404   → 테마 page/404.php


3.8 core/hook/ — 훅 시스템

HookManager.php 하나로 구성된 이벤트 버스입니다. WordPress의 add_action / apply_filters 와 동일한 철학으로 Action Hook (실행) 과 Filter Hook (값 변환) 두 종류를 지원합니다.
 
// Action Hook — 특정 시점에 코드 실행 (반환값 없음)
dx_add_hook('dx_body_bottom', function() {
    echo '<script src="/custom.js"></script>';
}, 10); // 우선순위 10 (낮을수록 먼저 실행)

// Filter Hook — 값을 받아 변환 후 반환
dx_add_filter('dx_board_content', function($content, $args) {
    return nl2br($content);
}, 20);


3.9 core/captcha/ — 캡차 드라이버

core/captcha/
├── DxCaptchaDriverInterface.php  ← 드라이버 인터페이스 (render, verify 메서드)
├── DxBuiltinDriver.php           ← 자체 GD 이미지 캡차 (외부 의존 없음)
├── DxRecaptchaV2Driver.php        ← Google reCAPTCHA v2 (체크박스)
├── DxRecaptchaV3Driver.php        ← Google reCAPTCHA v3 (점수 기반)
├── DxHcaptchaDriver.php           ← hCaptcha
└── DxTurnstileDriver.php          ← Cloudflare Turnstile

DxCaptcha.php (core 루트) 가 설정에 따라 적절한 드라이버를 선택하여 실행합니다. 관리자 > 사이트 설정에서 캡차 종류를 변경할 수 있으며, 코드 수정 없이 교체됩니다.


3.10 core/mailer/ — 메일 드라이버

core/mailer/
├── DxMailDriverInterface.php  ← 드라이버 인터페이스 (send 메서드)
├── DxMailMessage.php          ← 메일 메시지 DTO (from/to/subject/body/attachments)
├── DxMailFuncDriver.php       ← PHP mail() 함수 드라이버 (공유호스팅용)
├── DxSendmailDriver.php       ← sendmail 프로그램 드라이버
└── DxSmtpDriver.php           ← SMTP 드라이버 (TLS/SSL, 인증 지원)


3.11 core/sms/ — SMS 드라이버

core/sms/
├── DxSmsDriverInterface.php  ← 드라이버 인터페이스 (send 메서드)
├── DxCoolSmsDriver.php       ← CoolSMS (국내)
├── DxNcpSmsDriver.php        ← NAVER Cloud Platform SMS
├── DxKtBizmekaDriver.php     ← KT Bizmeka (알림톡•친구톡 지원)
└── DxTwilioDriver.php        ← Twilio (해외)
 

댓글0

로그인 후 댓글을 작성할 수 있습니다.
번호 제목 작성자 날짜 조회
11
Administrator
04.21 16
3.2 폴더 구조
install/ — 설치 및 마이그레이션
Administrator 04.21 조회 16
10
Administrator
04.21 19
3.2 폴더 구조
pages/ — 커스텀 페이지
Administrator 04.21 조회 19
9
Administrator
04.21 21
3.2 폴더 구조
data/ — 런타임 데이터
Administrator 04.21 조회 21
8
Administrator
04.21 18
3.2 폴더 구조
extend/ — 코드 자동 삽입
Administrator 04.21 조회 18
7
Administrator
04.21 21
3.2 폴더 구조
routes/ + controllers/ — 라라벨 스타일 라우팅
Administrator 04.21 조회 21
6
3.2 폴더 구조 assets/ — 정적 자원
Administrator
04.21 23
3.2 폴더 구조
assets/ — 정적 자원
Administrator 04.21 조회 23
5
Administrator
04.21 22
3.2 폴더 구조
plugins/ — 플러그인 시스템
Administrator 04.21 조회 22
4
Administrator
04.21 22
3.2 폴더 구조
themes/ — 테마 시스템
Administrator 04.21 조회 22
3
Administrator
04.21 23
3.2 폴더 구조
boards/ — 게시판 시스템
Administrator 04.21 조회 23
2
Administrator
04.21 20
3.2 폴더 구조
admin/ — 관리자 패널
Administrator 04.21 조회 20
3.2 폴더 구조 core/ — CMS 엔진
Administrator
04.21 24
3.2 폴더 구조
core/ — CMS 엔진
Administrator 04.21 조회 24
25
전체 회원
195
전체 게시글
81
전체 댓글
148
오늘 방문
4,124
전체 방문
1
현재 접속
인기글 7일 이내
최신글
최신댓글
목록 글쓰기