테이블 스캐너 v1.5.0
다운로드 : tablescanner-v1.5.0.zip
위는 php 7.4 이였습니다.
다운로드 1차 : tablescanner-v1.5.0.1.zip
php 7.4~8.3 까지 호환 패치
다운로드 2차 : tablescanner-v1.5.1.zip
이메일 부분 수정 완료
다운로드 3차 : tablescanner-v1.5.2.zip
리스트에서 메일 발송 여부 표시와
백업 예약/수동 여부 추가 됩니다.
테이블 스캐너 소개

펼치면 XE 테이블이 보입니다.

대시보드

테이블 최적화 탭

비대 로그

테이블 점검 탭

DB 백업 탭
=====================작업 및 패치 리스트 현황=============
# 테이블 스캐너 (tablescanner) — 패치노트
개발: 불패의초인 (BSplus) | https://bsplus.net/
---
## v1.5.2 — 2026-06-20
### 🐛 버그 수정
#### 예약 자동 백업이 설정 시각에 실행되지 않는 버그 수정
- **원인**: 트리거 조건이 `현재 시각 == 설정 시각` 정확히 일치 방식이었음
→ 설정 시각(예: 새벽 3시)에 방문자가 없으면 영원히 실행 안 됨
- **수정**: `오늘 예약 시각이 지났고 + 오늘 아직 백업 안 했으면 실행` 방식으로 변경
→ 새벽 3시 설정 시 3시 이후 첫 페이지 요청(일반 방문자 포함)에서 자동 실행
→ 로컬(XAMPP) 환경도 관리자가 오전에 접속하기만 하면 당일 백업 완료
### ✨ 신규 기능
#### 백업 파일 목록 — 이메일 발송 여부 표시
- 백업 파일 목록에 이메일 발송 결과 열 추가
- `✓ 발송` / `✗ 실패` / `용량초과` / `-` (미설정) 상태 표시
- 백업 탭 환경 상태표에 "마지막 이메일" 행 추가 (발송 시각 포함)
- 백업 실행 결과 메시지에 이메일 발송 성공/실패 여부 포함
#### 백업 파일 목록 — 수동/예약 구분 표시
- 백업 파일 목록에 `수동` / `예약` 구분 열 추가
- 관리자가 직접 실행한 백업: `수동` (파란 뱃지)
- 예약 트리거로 자동 실행된 백업: `예약` (초록 뱃지)
- 파일 삭제 시 이메일 로그 / 구분 로그도 함께 정리
#### 이메일 발송 안정성 개선
- `send()` → `send(true)` 동기 전송으로 변경 (Queue 환경에서도 즉시 발송 보장)
- `setFrom()` 추가 — Rhymix 메일 기본 발신자 설정값 자동 사용
- 본문 타입 `text/plain` 명시
---
### 📧 Gmail SMTP 설정 안내 (v1.5.2 추가)
> 2022년 5월부터 Google이 일반 비밀번호 SMTP 접속을 차단했습니다.
> **앱 비밀번호** 방식으로만 Gmail SMTP를 사용할 수 있습니다.
**설정 순서**:
1. Google 계정 → 보안 → **2단계 인증 활성화** (필수)
2. "앱 비밀번호" 검색 → 이름 입력 후 생성
3. 16자리 앱 비밀번호 복사
**Rhymix 관리자 → 시스템 설정 → 메일**:
| 항목 | 값 |
|------|---|
| SMTP 호스트 | `smtp.gmail.com` |
| 포트 | `587` |
| 암호화 | `TLS` (STARTTLS) ← SSL 아님 주의 |
| 비밀번호 | **앱 비밀번호 16자리** (Google 계정 비밀번호 아님!) |
> 포트 587 + SSL 조합 시 `wrong version number` 오류 발생 → TLS로 변경하세요.
---
## v1.5.0 — 2026-06-19
### 🆕 신규 기능
#### 💾 DB 백업 탭 추가
- **즉시 백업**: 관리자 화면에서 버튼 한 번으로 전체 DB 덤프 실행
- **이중 저장 경로**: 기본 경로 + 추가 경로(다른 드라이브/NAS 등) 동시 저장 지원
- 로컬 사용자는 웹서버 드라이브 외 별도 드라이브 지정 가능 (디스크 장애 대비)
- **백업 방법 자동 선택**: `mysqldump` 우선 사용, 쉘 실행 불가 호스팅은 순수 PHP 덤프로 자동 전환
- **gzip 압축**: PHP `gzopen` 지원 시 자동 압축 (`.sql.gz`)
- **자동 백업 스케줄**: 매일 지정 시각 자동 실행 (Rhymix 트리거 기반, 별도 크론 불필요)
- **보관 기간 자동 정리**: 설정일 초과 파일 자동 삭제
- **이메일 첨부 발송**: 백업 후 지정 주소로 파일 첨부 메일 발송 (용량 제한 설정 가능)
- **파일 목록 관리**: 백업 파일 다운로드 / 삭제 UI 제공
- **보안**: 백업 디렉토리에 `.htaccess` 자동 생성 (웹 직접 접근 차단)
- **비밀번호 안전 처리**: Rhymix 설정에서 DB 접속 정보 자동 읽기, 커맨드라인 비밀번호 노출 없음 (임시 `.cnf` 파일 사용)
---
### 🐛 버그 수정
#### 정상 테이블 120개가 "미생성" 목록에 표시되는 치명적 버그 수정
- **원인**: Rhymix `DB::query()`가 내부적으로 `addPrefixes()`를 호출해
`FROM information_schema.tables` → `FROM xe_information_schema.tables` 로 변환,
쿼리 실패 → `$db_tables = []` → 스키마 정의 테이블 전체가 "missing" 판정
- **수정**: SQL 키워드를 소문자(`from`, `table` 등)로 작성해 `addPrefixes()` 우회
(`addPrefixes()`는 대문자 키워드만 매칭하는 구조)
#### `deleted="true"` 테이블 오탐 수정
- **원인**: `counter/schemas/counter_site_status.xml` 등 Rhymix 마이그레이션 삭제 마커
(`deleted="true"`)가 붙은 테이블을 스캐너가 필터링하지 않아 "미생성" 오탐 발생
- **수정**: `<table>` 태그 파싱 시 `deleted="true"` 속성 감지 및 스킵 로직 추가
#### 스키마 파일 내 다중 테이블 미감지 수정
- **원인**: `preg_match()` 사용으로 XML 파일 당 첫 번째 `<table>` 만 인식
- **수정**: `preg_match_all()` + 속성 단위 파싱으로 한 파일 내 모든 테이블 인식
#### 최적화 탭 행 수 표시 오류 수정
- **원인**: v1 템플릿 파서에서 `{number_format($row['table_rows'])}` 가 PHP 함수 호출을 지원하지 않아 리터럴 문자열로 출력
- **수정**: `getOptimizeData()`에서 `number_format()` 처리 후 `table_rows_fmt` 키로 전달, 템플릿은 `{$row['table_rows_fmt']}` 사용
#### 구형 XE API 전면 교체
- `$oDB->_query()` / `$oDB->_fetch()` → `$oDB->query($sql, $params)` + `fetchAll(PDO::FETCH_OBJ)` 마이그레이션
- `_XE_PATH_` → `RX_BASEDIR` 상수 교체 (3개 파일)
---
### ✨ UI/UX 개선
- **탭 활성 표시 수정**: 현재 보고 있는 탭이 눌린(active) 상태로 강조 표시
- 기존 `{@삼항연산자}` 방식은 Rhymix v1 파서에서 출력이 되지 않는 문법이었음
- `<!--@if($current_tab=='...')-->active<!--@end-->` 인라인 조건으로 교체
- **스캔 탭**: "정상 매핑 테이블", "코어 테이블", "미생성 테이블 참고" 섹션 기본 접힘 처리
→ 페이지 열면 이상 항목(고아 테이블)만 즉시 확인 가능
- **미생성 테이블 섹션 개선**: 경고(노란) → 정보(회색) 스타일로 변경, "비활성 선택 기능은 정상" 안내 문구 추가
- **최적화 탭**: InnoDB 행 수 근사값 안내 메시지 추가
- **대시보드 탭**: `_header.html` 누락 탭 추가
---
### 📖 비대 로그 정리 — 각 테이블 삭제 영향 안내
로그를 지워도 되는지 판단할 수 있도록 테이블별 영향을 정리합니다.
| 테이블 | 삭제 시 영향 | 권장 |
|--------|-------------|------|
| `session` | 만료된 세션 제거. 90일 이전은 어차피 만료 상태 | ✅ 안전 |
| `counter_log` | **방문자 숫자(누적/일별)는 유지됨** — `counter_status`에 이미 집계 완료. 상세 raw 로그만 삭제 | ✅ 안전 |
| `spamfilter_log` | 차단 이력 삭제. 현재 차단 규칙(IP/단어)은 별도 테이블이라 차단 기능 유지 | ✅ 안전 |
| `document_readed_log` | 조회수 숫자는 `documents` 테이블에 별도 저장되어 유지. 상세 열람 이력만 삭제 | ✅ 안전 |
| `document_declared_log` | 오래된 신고 이력 삭제. 같은 글을 다시 신고 가능해질 수 있음 | ✅ 대체로 안전 |
| `comment_declared_log` | 위와 동일 | ✅ 대체로 안전 |
| `document_histories` | 게시글 수정 이력 삭제 → 해당 기간 "이전 버전 복원" 불가. **게시글 본문 자체는 안전** | ⚠️ 선택적 |
| `admin_log` | 관리자 행동 감사 이력 삭제. 보안 감사 필요 시 보존 권장 | ⚠️ 선택적 |
| `document_voted_log` | **추천 이력 삭제 → 이미 추천한 글에 다시 추천 가능해짐 (중복 방지 해제)** | ⚠️ 주의 |
| `comment_voted_log` | 위와 동일 (댓글 추천 중복 방지 해제) | ⚠️ 주의 |
> **`counter_log` 자주 묻는 질문**: 38MB짜리 로그를 지우면 방문자 기록이 사라지냐는 질문이 많습니다.
> 답: **사라지지 않습니다.** 사이트에 표시되는 오늘/누적 방문자 수는 `counter_status` 테이블에 이미 합산된 값이며,
> `counter_log`는 그 근거가 된 원시 기록일 뿐입니다. 안심하고 정리하세요.
---
## v1.0.0 — 2026-06-17
- 최초 릴리스
- 탭: 고아 테이블 스캐너 / DB 대시보드 / 테이블 최적화 / 비대 로그 정리 / 테이블 점검
- Rhymix PDO API 기반 구현
- 고아 테이블 DROP 기능
- 비대 로그 자동 정리 스케줄 (트리거 방식)
===========================================================================================
이메일 부분!

이 부분이 설정이 되어 있어야 이메일이 갑니다.
https://myaccount.google.com/apppasswords
앱 비밀번호 설정 주소입니다.
2024년부터 Gmail SMTP 보안 정책을 강화해서 일반 비밀번호로는 안 되고 "앱 비밀번호"를 써야합니다.
📧 Gmail SMTP 안 되는 이유 & 해결법
문제: 예전엔 "보안 수준이 낮은 앱 액세스 허용"으로 됐는데, 이제는 이 설정으로도 안 됨 3rdeyesys
해결: 구글 2단계 인증 켜고 → 앱 비밀번호 발급 받아서 비밀번호 란에 입력
앱 비밀번호 발급 방법
- 구글 계정 → 보안 탭 이동
- 2단계 인증 켜기 (이미 켜져 있으면 패스)
- 보안 탭 검색창에 "앱 비밀번호" 검색
- 앱 이름 아무거나 입력 (ex:
bsplus-smtp) - 16자리 비밀번호 발급됨
Rhymix 설정에 적용
지금 화면 기준으로:
| 항목 | 값 |
|---|---|
| SMTP 서버 | smtp.gmail.com |
| SMTP 포트 | 587 |
| SMTP 보안 | TLS (STARTTLS) ✅ |
| 아이디 | ybs7415@gmail.com |
| 비밀번호 | 기존 구글 비번 ❌ → 발급받은 16자리 앱 비번 ✅ |
┌────────┬────────────────────────────────┐
│ 상태 │ 표시 │
├────────┼────────────────────────────────┤
│ 발송 성공 │ 🟢 발송 성공 2026-06-20 03:00:05 │
├────────┼────────────────────────────────┤
│ 발송 실패 │ 🔴 발송 실패 ⚠ 2026-06-20 03:00:05 — SMTP 설정을 확인하세요 │
├────────┼────────────────────────────────┤
│ 용량 초과 │ 🟡 용량 초과 2026-06-20 03:00:05 — 파일이 최대 크기 초과 │
├────────┼────────────────────────────────┤
│ 이메일 미설정 │ (회색) 이메일 미설정 (백업만 완료) │
├────────┼────────────────────────────────┤
│ 아직 없음 │ (회색) 기록 없음 │
└────────┴────────────────────────────────┘
이메일 부분이 설정이 됬을때 화면

이메일이 정상 발송 되면 위에 표시가 됩니다.

각 파일마다 직관적으로 보이게 리스트에도 메일 발송성공 여부를 추가하였습니다.
각 파일마다 직관적으로 보이게 리스트에도 수동/예약 표시를 추가하였습니다.
예약시간설정에 백업이 진행이 안되던 오류를 수정하였습니다.
다음 배포에 추가 됩니다.
배포하였습니다. 1.5.2 버전
이메일 발송 테스트 현황


이메일 백업파일 전송에 대한 용량문제는 좀 더 보겠습니다.
1.5.x 이후에 추가될 예정입니다.
피드백을 기다리고 있습니다.
감사합니다.


