회원가입 | 고객센터 |
DESIGNONEX
dxcms.kr
로그인 회원가입
고객센터
3.2 폴더 구조

core/ — CMS 엔진

D DX
2026.04.21 00:32(수정됨) 138 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

로그인 후 댓글을 작성할 수 있습니다.
3.10 모듈 로딩 구조 플러그인 / 확장 로딩 방식 2026.04.21 3.9 공통 함수 / 유틸 재사용 방식 2026.04.21 3.9 공통 함수 / 유틸 공통 클래스 구조 2026.04.21 3.9 공통 함수 / 유틸 전역 함수 구조 2026.04.21 3.8 Extend 구조 실제 적용 흐름 2026.04.21 3.8 Extend 구조 Extend 개념 2026.04.21 3.7 Hook 시스템 Hook 시스템 활용 사례 2026.04.21 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
31
전체 회원
503
전체 게시글
775
전체 댓글
442
오늘 방문
33,174
전체 방문
3
현재 접속
인기글 7일 이내
최신글
최신댓글
목록