Developer Technical Documentation
NAYEONGIL.SHOP 자율 클라우드 인텔리전스 포털의 전체 소프트웨어 구조, 6대 서비스 모듈, MySQL 데이터베이스 스키마 및 API 명세서입니다.
1. 시스템 개요 (System Overview)
본 포털은 AWS Lightsail (Debian Linux, Apache2, PHP 8.5, MySQL, Python 3) 환경 위에서 동작하며, 자율 AI 뉴스 수집 & 요약 파이프라인, 이메일 모닝 브리핑, SOLAPI SMS 전송 게이트웨이, 웹 기반 MySQL 관리 뷰어, 서버 리소스 실시간 진단 도구를 하나로 통합한 웹 인텔리전스 허브입니다.
2. 6대 서비스 모듈 및 엔드포인트 맵
메인 포털 허브
인터랙티브 파티클 애니메이션, 6대 기능 퀵 런처 및 서비스 통합 안내
https://nayeongil.shop/
AI 뉴스 & DB 스케줄러
실시간 수집, DB 아카이브, Chart.js 통계, 이메일 리포트 & DB 스케줄 관리
https://nayeongil.shop/NEWS/
MySQL 데이터베이스 뷰어
테이블 데이터 브라우저, 스키마/인덱스/DDL 명세, SQL 콘솔, 용량 차트
https://nayeongil.shop/DB/
SMS / LMS 메시징 센터
SOLAPI v4 연동, 010-5687-4454 발신, iPhone 실시간 뷰어, MySQL 전송 로그
https://nayeongil.shop/SMS/
서버 리소스 모니터링
CPU / RAM / Disk 실시간 추이, ps 프로세스 목록, 시스템 로드 진단
https://nayeongil.shop/INFO/
마스터 관리자 센터
6대 서비스 통합 KPI, 원클릭 비상 조작 콘솔, 실시간 크로스 모듈 이벤트 스트림
https://nayeongil.shop/ADMIN/
웹 파일 브라우저
서버 디렉터리 탐색, 코드 신택스 뷰어, 안전한 파일 다운로드
https://nayeongil.shop/FILE/
3. AI 뉴스 수집기 & DB 스케줄러 아키텍처
Google News RSS로부터 키워드별 뉴스를 크롤링하고, Trafilatura로 본문 전문을 정제한 뒤, Google Gemini 3.6 Flash AI 모델을 통해 3줄 핵심 요약, 중요도 점수(1~5★), 비즈니스/기술 시사점(Insight)을 도출하여 MySQL `articles` 테이블에 저장합니다.
3.1. 백엔드 구성 파일
/var/www/html/NEWS/index.php: 대시보드 4대 섹션 UI 및 AJAX API 핸들러/var/www/html/NEWS/agent_runner.py: Python RSS 크롤러 & Gemini AI 요약 파이프라인/var/www/html/NEWS/schedule_worker.py: MySQL `schedules` 테이블을 1분마다 폴링하는 마스터 스케줄러 워커/var/www/html/NEWS/send_morning_report.py: Gmail SMTP 이메일 모닝 브리핑 발송 엔진
3.2. 주요 API 엔드포인트
| 메서드 | Action 파라미터 | 설명 |
|---|---|---|
| GET | ?action=run_agent&keyword={kw} |
AI 뉴스 크롤러 및 요약 파이프라인 즉시 백그라운드 실행 |
| POST | ?action=add_schedule |
MySQL `schedules` 테이블에 새 자동화 스케줄(시간/키워드/수신자) 등록 |
| POST | ?action=toggle_schedule |
지정된 스케줄의 활성화/일시중지(is_active) 상태 토글 |
| POST | ?action=run_schedule_now |
지정된 스케줄 ID를 지금 즉시 강제 수동 실행 |
| GET | ?action=preview_email |
키워드/수신자 기준 실제 DB 기사로 동적 렌더링된 HTML 이메일 템플릿 반환 |
| POST | ?action=test_send_email |
Gmail SMTP를 통해 실시간 테스트 이메일 발송 실행 |
4. 이메일 모닝 브리핑 (Gmail SMTP)
매일 새벽 지정된 시각(기본 KST 06:00)에 등록된 구독자에게 애플 매거진 스타일의 반응형 HTML 이메일 리포트를 발송합니다.
# SMTP 연동 설정 (AWS.txt 및 send_morning_report.py)
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587 (STARTTLS)
SMTP_USER = 'euphoriagny050602@gmail.com'
SMTP_PASS = 'drbxhhtfmvkyvpjl' # Google 16자리 앱 비밀번호
5. SMS / LMS 메시징 게이트웨이 (SOLAPI v4)
SOLAPI (CoolSMS v4) REST API를 기반으로 구현된 초고속 단문/장문 메시징 발송 도구입니다. 90바이트를 초과하면 자동으로 LMS(장문)로 전환되며, 모든 발송 내역은 MySQL `sms_logs`에 저장됩니다.
5.1. SOLAPI HMAC-SHA256 인증 프로토콜 (PHP 구현)
function getSolapiAuthHeader() {
$apiKey = 'NCSO4LSWYGVIDLHE';
$apiSecret = 'QFBHIELDDYNQMMFO8OFUQE4MVEFFSXYI';
$date = gmdate('Y-m-d\TH:i:s\Z');
$salt = bin2hex(random_bytes(16));
$signature = hash_hmac('sha256', $date . $salt, $apiSecret);
return "HMAC-SHA256 apiKey={$apiKey}, date={$date}, salt={$salt}, signature={$signature}";
}
5.2. SMS API 엔드포인트
| 메서드 | Action | Payload | 설명 |
|---|---|---|---|
| POST | ?action=send_sms |
to, text, title |
단건/다건 SMS(90B이하) 및 LMS(2000B이하) 발송 및 MySQL 로깅 |
| GET | ?action=get_balance |
- | SOLAPI 실시간 포인트 및 잔액 조회 |
| POST | ?action=save_template |
title, content, category |
자주 쓰는 메시지 템플릿 저장 |
6. MySQL 데이터베이스 뷰어 (`/DB/`)
웹 브라우저에서 서버 내의 모든 MySQL 데이터베이스(`news_agent`, `lampdb` 등)를 탐색할 수 있는 관리 뷰어입니다.
- 데이터 브라우저: 페이징, 컬럼별 ASC/DESC 정렬, 전문 검색 필터, 레코드 JSON/상세 모달 뷰어, CSV Export
- 스키마 & 구조: 컬럼 타입, Nullability, Primary/Unique 키, Collation, 인덱스 목록,
SHOW CREATE TABLE원문 복사 - 인터랙티브 SQL 콘솔: Ctrl/Cmd + Enter 즉시 쿼리 실행, 실행 소요 시간(ms), 템플릿 칩 지원
- 서버 상태 & 메트릭: MySQL 버전, Uptime, Threads, 처리 쿼리 수, 데이터베이스별 용량(MB) Chart.js 차트
7. MySQL 데이터베이스 스키마 명세 (`news_agent` DB)
7.1. 핵심 테이블 목록
| 테이블명 | 역할 / 설명 | 주요 컬럼 |
|---|---|---|
articles |
수집 및 Gemini AI 요약 기사 저장 | id, title, url, source, importance_score, summary_3lines, insight, raw_text, created_at |
keywords |
관심 뉴스 수집 타겟 키워드 | id, keyword, category, is_active, created_at |
schedules |
DB 기반 자동 실행 스케줄 목록 | id, task_type, task_name, target_keyword, recipient_email, run_time, days_of_week, is_active, last_run_at |
schedule_logs |
스케줄러 워커 자동 실행 이력 | id, schedule_id, task_type, task_name, executed_at, duration_sec, status, output_summary |
sms_logs |
SOLAPI SMS/LMS 전송 이력 및 통신사 상태 | id, message_id, group_id, sender, recipient, message_type, message_text, byte_count, status_code, sent_at |
sms_templates |
자주 쓰는 문자 템플릿 모음 | id, title, category, content, created_at |
email_subscribers |
모닝 브리핑 이메일 구독자 목록 | id, email, keyword_name, send_time, is_active, last_sent_at |
email_logs |
이메일 발송 로그 및 전송 이력 | id, recipient_email, subject, keyword_name, article_count, status, sent_at |
8. DB 스케줄러 워커 아키텍처
리눅스 crontab에는 단 하나의 마스터 워커만 등록되어 있으며, 모든 세부 작업 시각은 MySQL `schedules` 테이블을 통해 동적으로 제어됩니다.
# Linux Root Crontab (서버에 등록된 단일 마스터 워커)
* * * * * /var/www/html/AGENT/venv/bin/python3 /var/www/html/NEWS/schedule_worker.py >> /var/log/schedule_worker.log 2>&1
- 워커는 매 분 1회 실행되어 현재 한국 표준시(KST)를 계산합니다.
- MySQL `schedules` 테이블의 `run_time`과 `is_active = 1` 조건을 조회하여 대상 작업을 자동 실행합니다.
- 당일 중복 실행 방지 알고리즘 및 실행 결과 `schedule_logs` 적재를 완벽하게 처리합니다.
9. 배포 및 서버 동기화 명령어
로컬 워크스페이스(`/Users/nayeon/Desktop/AWS`)에서 서버로 파일 배포 시 사용하는 기본 명령어입니다:
# 1. 파일 동기화 (SCP)
scp -i /Users/nayeon/Desktop/SSHkey.pem -o StrictHostKeyChecking=no \
/Users/nayeon/Desktop/AWS/news_dashboard.php \
/Users/nayeon/Desktop/AWS/db_viewer.php \
/Users/nayeon/Desktop/AWS/sms_sender.php \
/Users/nayeon/Desktop/AWS/schedule_worker.py \
/Users/nayeon/Desktop/AWS/send_morning_report.py \
/Users/nayeon/Desktop/AWS/README.html \
admin@43.203.81.151:/tmp/
# 2. 웹 디렉터리 반영 및 권한 설정 (SSH)
ssh -i /Users/nayeon/Desktop/SSHkey.pem -o StrictHostKeyChecking=no admin@43.203.81.151 "
sudo cp /tmp/news_dashboard.php /var/www/html/NEWS/index.php &&
sudo cp /tmp/news_dashboard.php /var/www/html/NEWS/news_dashboard.php &&
sudo cp /tmp/db_viewer.php /var/www/html/DB/index.php &&
sudo cp /tmp/sms_sender.php /var/www/html/SMS/index.php &&
sudo cp /tmp/schedule_worker.py /var/www/html/NEWS/schedule_worker.py &&
sudo cp /tmp/send_morning_report.py /var/www/html/NEWS/send_morning_report.py &&
sudo cp /tmp/README.html /var/www/html/README.html &&
sudo chmod +x /var/www/html/NEWS/*.py &&
sudo chown -R www-data:www-data /var/www/html
"