1. 플러그인 개요
| 항목 | 내용 |
| 플러그인 ID | dx-cache-monitor |
| 플러그인명 | DX Cache Monitor (캐시 상태 모니터) |
| 버전 | 1.0.3 |
| 제작사 | DesignOneX |
| PHP 호환 | PHP 5.6 이상 |
| 대상 | 관리자 전용 (비관리자에게는 표시 안 됨) |
DX Cache Monitor는 DXCMS 관리자가 모든 페이지에서 현재 캐시 드라이버 상태와 캐시 키 HIT/MISS 현황을 실시간으로 확인할 수 있는 사이드 패널 모니터링 플러그인입니다. Redis, APCu, 파일 캐시 중 어떤 드라이버가 활성화되어 있는지, 주요 캐시 키가 정상적으로 적중하고 있는지를 직관적으로 파악할 수 있습니다.
2. 주요 기능
• 우측 중간 탭 버튼 — 클릭하면 360px 사이드 패널이 슬라이드로 열림• localStorage 상태 저장 — 패널 열림/닫힘 상태가 페이지 이동 후에도 유지
• 현재 요청 통계 — 캐시 히트 수, 미스 수, 피크 메모리(MB), 실행시간(ms)
• 드라이버 상태 — Redis, APCu, 파일 캐시 각각의 활성/대기/불가 상태 표시
• 드라이버 상세 정보 — 버전, 메모리 사용량, 캐시 키 수 표시
• 캐시 키 HIT/MISS — 주요 캐시 키 및 파일캐시 자동 감지 키 조회
• 현재 페이지 정보 — URI, 라우트 타입, 게시판 키 표시
• 캐시 전체 삭제 버튼 — 클릭 즉시 DxCache::flush() 실행
• 새로고침 버튼 — 최신 상태 재측정
• 관리자 전용 — 비관리자에게는 탭과 패널이 전혀 표시되지 않음
3. 설치 방법
3.1 파일 업로드
2. 아래 경로에 폴더를 업로드합니다.
| 업로드 경로 | 내용 |
| plugins/dx-cache-monitor/ | 플러그인 본체 (plugin.php, manifest.php, core/) |
3.2 플러그인 활성화
2. DX Cache Monitor 플러그인을 찾아 [활성화] 버튼을 클릭합니다.
3. 활성화 후 모든 페이지 우측 중간에 캐시 드라이버 이름이 표시된 탭이 나타납니다.
3.3 활성화 확인
| 탭 색상 | 의미 |
| 빨간색 | Redis 드라이버 활성 |
| 주황색 | APCu 드라이버 활성 |
| 파란색 | 파일 캐시 드라이버 활성 |
| 회색 | 캐시 없음 (none) |
4. 화면 구성
4.1 탭 버튼
4.2 사이드 패널 구성
| 섹션 | 내용 |
| 📊 현재 요청 통계 | 캐시 히트 수 / 캐시 미스 수 / 피크 메모리(MB) / 실행시간(ms) |
| 🔌 캐시 드라이버 | Redis · APCu · 파일 각각의 상태, 버전, 메모리, 키 수 |
| 🗝 캐시 키 상태 | 주요 키 및 자동 감지 키의 HIT/MISS 표시 |
| 📄 현재 페이지 | 요청 URI, 라우트 타입, 게시판 키 |
| 측정 시각 | 데이터 수집 시각 (HH:MM:SS) |
| 🗑 캐시 전체 삭제 | 모든 캐시 즉시 삭제 후 자동 새로고침 |
| ↺ 새로고침 | 현재 페이지 새로고침으로 최신 상태 재측정 |
5. 캐시 드라이버 상태 안내
5.1 드라이버 우선순위
| 우선순위 | 드라이버 / 조건 |
| 1순위 | Redis — REDIS_SESSION_URL 상수 정의 + Redis PHP 익스텐션 + 연결 성공 |
| 2순위 | APCu — APCu PHP 익스텐션 설치 + apc.enabled=On |
| 3순위 | 파일 캐시 — data/cache/ 폴더 쓰기 가능 |
| 4순위 | 없음(none) — 위 모두 실패 시 |
5.2 드라이버 뱃지 의미
| 뱃지 | 의미 |
| ● 활성 (녹색) | 현재 이 드라이버가 캐시로 사용 중 |
| ○ 대기 (회색) | 사용 가능하지만 우선순위에 밀려 대기 중 |
| ✕ 불가 (빨간색) | 익스텐션 없음, 연결 실패, 폴더 없음 등으로 사용 불가 |
5.3 드라이버별 추가 정보
| 드라이버 | 표시 정보 |
| Redis | Redis 버전, 메모리 사용량, 이 사이트 캐시 키 수 |
| APCu | 히트 수, 미스 수, 메모리 사용량, 이 사이트 캐시 키 수 |
| 파일 | 캐시 파일 수, 전체 파일 용량(KB), 캐시 디렉토리 경로 |
6. 캐시 키 HIT / MISS 안내
6.1 HIT과 MISS의 의미
| 상태 | 의미 |
| HIT (녹색) | 캐시에 해당 키가 존재 → DB 조회 없이 캐시에서 즉시 반환 |
| MISS (빨간색) | 캐시에 해당 키 없음 → DB에서 직접 조회 필요 |
6.2 MISS가 발생하는 정상적인 경우
• TTL 만료 — 캐시 유효시간이 지나 자동 삭제된 경우
• 게시글 작성/수정/삭제 — 최신 데이터 반영을 위해 관련 캐시 무효화
• 캐시 전체 삭제 후 — 삭제 직후 첫 요청은 MISS
• 파일캐시 키 이름 불일치 — 모니터가 체크하는 키와 실제 저장 키가 다른 경우
6.3 자동 감지 캐시 키
6.4 체크하는 주요 캐시 키
| 캐시 키 | 내용 |
| dx_site_config | 사이트 기본 설정 |
| dx_boards_all | 전체 게시판 목록 |
| dx_menus | 메뉴 구조 |
| dx_theme_config | 테마 설정 |
| dx_popups | 팝업 목록 |
| dx_global_notices | 전체 공지 |
| dxstat_download_widget | 다운로드 통계 위젯 |
| board_list_{board_key}_p1 | 게시판 목록 1페이지 (현재 게시판) |
| board_info_{board_key} | 게시판 정보 (현재 게시판) |
| board_cats_{board_key} | 게시판 카테고리 (현재 게시판) |
7. 캐시 전체 삭제
패널 하단의 [🗑 캐시 전체 삭제] 버튼을 클릭하면 확인 팝업 후 DxCache::flush()가 실행됩니다.| 드라이버 | 삭제 방식 |
| Redis | SCAN으로 이 사이트 네임스페이스 키만 선택 삭제 (다른 앱 캐시 보존) |
| APCu | 이 사이트 네임스페이스로 시작하는 키만 선택 삭제 |
| 파일 | data/cache/*.cache 파일 전체 삭제 |
8. 패널 열림 상태 유지
패널의 열림/닫힘 상태는 브라우저 localStorage에 저장됩니다. 키: dxcm_panel_open (값: 1=열림, 0=닫힘)• 페이지를 이동해도 마지막 상태가 유지됩니다
• 새 탭에서도 같은 상태로 열립니다
• 브라우저 캐시/데이터 삭제 시 초기화됩니다 (기본: 닫힘)
9. 파일 구조
| 파일/폴더 | 설명 |
| plugin.php | 플러그인 진입점 — 훅 등록, 활성화 체크, 패널 출력 |
| manifest.php | 플러그인 메타 정보 (ID, 버전, 설명) |
| core/helper.php | 캐시 드라이버 상태 수집, 캐시 키 HIT/MISS 조회 함수 |
10. 동작 구조
플러그인은 DXCMS의 dx_bottom 훅(우선순위 999)에서 동작합니다.| 단계 | 동작 |
| 1. 관리자 여부 확인 | Auth::getInstance()->isAdmin() — 비관리자면 즉시 반환 |
| 2. 드라이버 상태 수집 | Redis 연결 시도, APCu 정보, 파일 캐시 파일 수 집계 |
| 3. 캐시 키 조회 | 주요 키 + 파일캐시 자동 감지 키 HIT/MISS 확인 |
| 4. 패널 HTML 출력 | 페이지 최하단에 CSS + HTML + JavaScript 삽입 |
| 5. localStorage 복원 | JS에서 저장된 열림 상태를 읽어 패널 표시 |
11. 활성화 체크 방식
플러그인은 시작 시 plugins 테이블을 직접 조회하여 status=1인 경우에만 동작합니다.| 상태 | 동작 |
| 활성화 (status=1) | 드라이버 상태 수집 및 패널 표시 |
| 비활성화 (status=0) | 즉시 return — 훅 등록 자체를 건너뜀 |
| 미등록 (테이블에 없음) | 즉시 return — 동작 안 함 |
12. 트러블슈팅
| 증상 | 해결 방법 |
| 탭이 보이지 않음 | 관리자로 로그인했는지 확인 / 플러그인 활성화 여부 확인 |
| 모두 MISS로 표시됨 | 정상 (첫 접속 후 새로고침 시 HIT으로 바뀜) |
| 파일캐시인데 키가 안 보임 | data/cache/ 폴더 파일이 있는지 확인 |
| 캐시 삭제 버튼 오류 | CSRF 토큰 만료 — 페이지 새로고침 후 재시도 |
| Redis ✕ 불가로 표시 | REDIS_SESSION_URL 상수 설정 또는 PHP Redis 익스텐션 설치 필요 |
| APCu ✕ 불가로 표시 | php.ini에서 apc.enabled=1 설정 또는 APCu 익스텐션 설치 필요 |
| 게시판 페이지에서 오류 | dx_bottom 훅(999)이 안전한지 확인 — 이 플러그인은 게시판 핸들러 영향 없음 |