1. 보안 경로 구조
1.1 설치마다 고유한 Secure.php 경로
설치 시 도메인 + microtime + 난수를 SHA-256으로 해시한 앞 16자리를 core/security/ 하위 폴더 이름으로 사용합니다. 이 경로를 DX_SECURITY_PATH 상수로 data/config.php에 저장하고, index.php는 매 요청마다 이 경로에서 Secure.php를 로드합니다.
# 구조 예시
core/
├── Secure.php ← 원본 (폴백용)
└── security/
└── a3f8b2c1d4e5f6a7/ ← 설치 고유 해시 (16자리)
├── Secure.php ← 복사본 (실제 로드 대상)
└── .htaccess ← 직접 접근 차단
1.2 보안 경로의 목적
| 목적 |
설명 |
| 경로 예측 불가 |
공격자가 /core/Secure.php를 직접 공략해도 실제 동작 파일은 다른 경로에 존재 |
| 설치마다 고유 |
소스코드가 공개되어도 특정 설치 환경의 경로를 알 수 없음 |
| 보안 패치 용이 |
원본 core/Secure.php를 수정 후 관리자에서 경로 재생성 가능 |
| 폴백 안전망 |
security/ 경로 파일 없으면 core/Secure.php 폴백으로 서비스 중단 없음 |
1.3 data/config.php 생성 내용
설치 완료 후 data/config.php에 자동으로 생성되는 주요 내용입니다.
<?php
// DB 연결
$db = Database::getInstance();
$db->connect('localhost', 'db_name', 'user', 'pass', 'utf8mb4', 'dx_');
// 전역 설정 로드 (DxCache → DB 순 우선순위)
global $dx_config;
$dx_config = array();
// 1순위: 캐시에서 로드, 2순위: DB에서 로드 후 캐시 저장(300초)
define('DX_DEBUG', false);
define('DX_CHARSET', 'UTF-8');
date_default_timezone_set('Asia/Seoul');
define('DX_SECRET_KEY', '64자리_랜덤_시크릿_키');
define('DX_SECURITY_PATH', 'a3f8b2c1d4e5f6a7');
2. 설치 후 체크리스트
2.1 보안 체크리스트
| 항목 |
확인 방법 |
조치 |
| install/ 폴더 처리 |
/install/ 접속 시 403 또는 빈 페이지 |
폴더 삭제 또는 .htaccess로 차단 |
| data/ 직접 접근 차단 |
/data/config.php 접속 시 403 |
.htaccess 및 web.config 확인 |
| core/ 직접 접근 차단 |
/core/Secure.php 접속 시 403 |
.htaccess 확인 |
| PHP 직접 실행 차단 |
/admin/index.php 직접 접속 시 403 또는 빈 페이지 |
.htaccess FilesMatch 확인 |
| 관리자 비밀번호 변경 |
기본 admin/admin 등 사용 여부 |
관리자 > 회원 관리에서 변경 |
| DX_DEBUG 비활성화 |
config.php의 define('DX_DEBUG', false) |
운영 환경에서 반드시 false |
| HTTPS 적용 |
https:// 접속 확인 |
SSL 인증서 설치 후 사이트 URL을 https://로 변경 |
2.2 동작 확인 체크리스트
| 확인 항목 |
테스트 방법 |
| 홈페이지 정상 표시 |
브라우저에서 / 접속 |
| 관리자 로그인 |
/admin 접속 후 설치 시 입력한 계정으로 로그인 |
| 게시판 생성 및 글쓰기 |
관리자 > 게시판 관리에서 게시판 생성 후 글 작성 |
| 파일 업로드 |
글쓰기에서 파일 첨부 후 저장 |
| 회원가입 |
/auth/register 접속 후 가입 시도 |
| URL Rewrite 동작 |
/admin 형태의 깔끔한 URL로 접속 가능한지 확인 |
| 캐시 동작 |
관리자 > 설정에서 캐시 드라이버 확인 (FILE/APCU/REDIS) |
| 사이트맵 |
/sitemap.xml 접속 시 XML 출력 확인 |
2.3 성능 최적화 권장사항
| 항목 |
권장 설정 |
효과 |
| PHP OPcache |
opcache.enable=1 |
PHP 파일 컴파일 캐시. 응답 속도 대폭 향상 |
| APCu 또는 Redis |
DxCache 드라이버 자동 선택 |
DB 쿼리 감소 (설정 캐시 300초) |
| MySQL 쿼리 캐시 |
query_cache_type=1 (MySQL 5.x) |
반복 쿼리 캐시 |
| FULLTEXT 인덱스 |
ft_min_word_len=2 (my.cnf) |
2자 이상 검색어 지원 |
| gzip 압축 |
gzip on (Nginx) / mod_deflate (Apache) |
HTML/JS/CSS 전송 크기 감소 |
| HTTP/2 |
웹 서버에서 활성화 |
다중 자원 병렬 전송 성능 향상 |