📁uploads/jobs/ 폴더 6개 Job 분석 결과
결론: 모든 Job 파일은 100% 살아있고 시스템에 다시 연결할 수 있습니다.
경로 마이그레이션 1회 실행하면 즉시 dashboard에 영상 카드로 표시됩니다.
각 Job 상세 (실제 데이터)
| Job ID | 주제 | 모드 | 엔진 | 장면 | 상태 | final.mp4 | 비고 |
20260504_143347_af23bd |
7광구가 다가온다 | 나레이션 | Kling/PiAPI | 1 |
done | 619KB |
최초 테스트, 무음 |
20260505_041141_9c60a8 |
이재명 대통령 지지율 상승 | 나레이션 | Kling/PiAPI | 1 |
error | — |
"합성할 클립이 없습니다" → Kling 호출 실패 |
20260505_042843_4e20b3 |
이재명 대통령 지지율 상승 | 나레이션 | Kling/PiAPI | 1 |
done | 782KB |
재시도 성공, 무음 |
20260505_051338_testff |
TEST-Fix: 이재명 지지율 | 나레이션 | FFmpeg(로컬) | 2 |
done | 542KB |
FFmpeg-only 폴백 검증 성공 |
20260505_053051_faee70 |
이재명 대통령 지지율 상승 | 나레이션 | Kling/PiAPI | 1 |
fallback | 199KB |
"AI 실패 → FFmpeg 대체" 폴백 로직 발동 |
20260512_092453_9df60d |
5월 가정의달 |
AI(자동) | Kling/PiAPI | 3 |
done | 4.8MB |
환경음+배경음+자막burn 풀 합성 성공 ⭐ |
대시보드에 즉시 표시될 영상 카드 (목업)
즉시 실행 가능한 복원 패치 (B-01)
모든 params.json의 job_dir 경로를 mg → vag로 일괄 치환합니다.
cd /var/www/webapp/vag/uploads/jobs
for f in */params.json; do
sed -i 's|/var/www/webapp/mg/uploads|/var/www/webapp/vag/uploads|g' "$f"
done
chown -R www-data:www-data /var/www/webapp/vag/uploads
echo "✅ 6개 Job 경로 복원 완료"
실행 후 효과: dashboard.html이 즉시 6개 카드를 렌더링, 사용자가 final.mp4를 바로 재생/다운로드 가능.
🐛식별된 12개 버그 — 우선순위별 수정 패치
CRIT 즉시 수정 · 핵심 기능 죽음
HIGH 사용자 체감 큼
MID 품질 개선
CRITB-01 · uploads/jobs 경로 마이그레이션 누락 params.json#job_dir
영향: 모든 Job 6개
모든 params.json의 job_dir이 구 경로 /var/www/webapp/mg/uploads/jobs/...를 가리킴.
서버 이동 후 sed 일괄 치환을 누락. 영상 카드 클릭 시 일부 메타 표시 오류 가능.
cd /var/www/webapp/vag/uploads/jobs && \
for f in */params.json; do
sed -i 's|/var/www/webapp/mg/|/var/www/webapp/vag/|g' "$f"
done
CRITB-02 · 예약 배포 cron 미등록 /etc/cron.d/vag-deploy
영향: M3 모듈 전체 죽음
api/deploy/cron.php는 정상 작성되어 있으나 crontab에 등록되지 않아 영원히 실행 안됨.
예약 배포한 영상이 영구 pending 상태로 머무름. 설계도 M3의 핵심 기능 무력화.
cat > /etc/cron.d/vag-system << 'EOF'
# AI Video Factory: 예약 배포 (매 1분)
* * * * * www-data /usr/bin/php /var/www/webapp/vag/api/deploy/cron.php >> /var/www/webapp/vag/logs/cron-deploy.log 2>&1
# AI Video Factory: 성과 통계 수집 (매 4시간)
0 */4 * * * www-data /usr/bin/php /var/www/webapp/vag/api/stats/collect.php >> /var/www/webapp/vag/logs/cron-stats.log 2>&1
EOF
mkdir -p /var/www/webapp/vag/logs && chown www-data:www-data /var/www/webapp/vag/logs
systemctl reload cron
CRITB-03 · trend/api/step1/ 폴더 부재 6-step Wizard 진입 불가
영향: 트렌드 분석 솔루션 전체
VAG_AI_영상_트렌드_분석_솔루션 설계도에 따르면 step1~6 각 폴더에 save/collect/analyze/extract/design/create_job 등의 PHP가 있어야 함.
현재 step1/save.php 자체가 없음 → 위저드 1단계 "주제 저장"이 실행 불가.
mkdir -p /var/www/webapp/vag/trend/api/step1
# step1/save.php 신규 작성 (다음 페이지 코드 블록 참조)
# 입력: { session_id, topic, platform, direction, keywords[] }
# 처리: trend_sessions UPDATE + trend_step_status INSERT(step=1, status='completed')
# 응답: { ok:true, next_step:'step2' }
CRITB-04 · PiAPI 잔액 엔드포인트 변경 check_apis.php#checkKling
영향: 관리자 API 상태판 오작동
https://api.piapi.ai/api/account/balance → HTTP 404.
PiAPI가 v2 엔드포인트로 마이그레이션됨. 현재는 항상 "잔액조회 실패 → 영상생성 테스트로 폴백" 처리되어 관리자 화면에서 정확한 잔액 안 보임.
// includes/KlingAPI.php에 신규 메서드 추가
public function getBalance(): array {
// 신규: account/info 또는 user/info 엔드포인트 사용
[$resp,$code] = $this->curlGet('https://api.piapi.ai/api/user/info',
['X-API-Key: '.$this->apiKey]);
if ($code === 200) {
$d = json_decode($resp, true);
return ['ok'=>true, 'balance'=>$d['data']['credit_balance'] ?? 0];
}
return ['ok'=>false];
}
HIGHB-05 · OpenAI API 키 미설정 .env
영향: TTS·자막 두 기능 모두 폴백
"AI 성우" "AI 자막" 두 직원이 사실상 휴직 중. worker.log마다 "TTS 건너뜀 (OPENAI_API_KEY 없음)" 메시지 출력.
대안: 무료/저렴한 TTS로 전환 (Edge TTS, ElevenLabs free tier) 또는 OpenAI 키 발급.
# .env에 추가
OPENAI_API_KEY=sk-proj-...
TTS_VOICE=alloy # alloy/echo/fable/onyx/nova/shimmer
TTS_MODEL=tts-1 # 또는 tts-1-hd
WHISPER_MODEL=whisper-1 # 자막 자동 생성
HIGHB-06 · SuperAI 모델명 하드코딩 불일치 DeepSeekAI.php + generate.php
영향: 모델 변경 시 일괄 수정 어려움
deepseek-v4-flash가 코드 곳곳에 하드코딩됨 (.env의 DEEPSEEK_MODEL과 동기화 안됨).
현재 모델은 작동하지만, 향후 모델 변경 시 grep으로 찾아 일괄 교체 필요.
// 패턴: 항상 getenv('DEEPSEEK_MODEL') 사용
$model = getenv('DEEPSEEK_MODEL') ?: 'deepseek-v4-flash';
// 모든 'model' => 'deepseek-...' 부분을 'model' => $model로 치환
HIGHB-07 · Claude API 키 부재 → SuperAI 대체 권장 /trend/includes/ClaudeAnalyzer.php
영향: 트렌드 6단계 위저드 Step 4·5 미동작
트렌드 분석 설계도는 Claude API를 사용하도록 되어있으나, .env에 키 미설정.
제안: SuperAI로 대체 (이미 운영중·검증됨·한글 우수)하여 의존성 단순화.
// /trend/includes/ClaudeAnalyzer.php → DeepSeekPatternExtractor.php로 리네임
// 또는 두 엔진 모두 지원하는 어댑터 패턴
class TrendAIAnalyzer {
public function __construct(string $engine = 'deepseek') {
$this->engine = $engine; // 'deepseek' | 'claude'
}
public function extractPattern(array $videos): array { /* ... */ }
}
HIGHB-08 · 성과 모니터링 cron 미구현 api/stats/collect.php
영향: M4 모듈 미동작
api/stats/collect.php 파일은 존재하나 cron 등록 안되어 실행 안됨.
→ AI 분석가가 "주간 리포트"를 만들 데이터가 영원히 0건.
# B-02 패치에 포함됨 (성과 통계 cron 4시간마다 실행)
# api/stats/collect.php가 channel_stats, video_stats 두 테이블에 INSERT
# - YouTube videos.list(id=...) API로 viewCount/likeCount/commentCount 수집
# - channels.list(id=...) API로 subscriberCount 수집
MIDB-09 · 멀티 엔진 자동 폴백 로직 검증 부족 worker.php#engine fallback
영향: 안정성
Kling 실패 시 FFmpeg로만 폴백. 설계도 의도(Pika → Runway → FFmpeg 순차 폴백)와 달리 fal.ai 엔진들이 활용 안됨.
// worker.php에 자동 폴백 체인 구현
$fallbackChain = ['piapi_kling', 'fal_kling_std', 'fal_wan', 'fal_minimax', 'ffmpeg'];
foreach ($fallbackChain as $engine) {
try { $clips = generateWithEngine($engine, $scenes); break; }
catch (\Throwable $e) { logFallback($engine, $e); }
}
MIDB-10 · 사용량 미터링 누수 user_subscriptions.videos_used
영향: 결제 정합성
worker.php가 영상 완성 시 videos_used를 증가시키나, 실패 시 롤백 없음.
사용자가 실패 영상에도 크레딧 차감되는 경우 발생.
// worker.php 마지막에 status='error'면 차감 안하도록
if ($finalStatus === 'done') {
Database::query("UPDATE user_subscriptions SET videos_used=videos_used+1
WHERE user_id=? AND status='active'", [$userId]);
}
MIDB-11 · 관리자 UI 디자인 일관성 부족 pages/admin/*.html
영향: UX
메인 사이트는 다크 모드(#0a0a1a) 통일이나 관리자 페이지는 라이트 모드 잔존.
통합 디자인 시스템 필요 (CSS Variables 공유).
// /pages/admin/_shared.css 신규 (본 목업의 :root 변수 그대로 이식)
// 또는 본 v3.0 블루프린트의 디자인 토큰을 그대로 채택
MIDB-12 · 폼 유효성·에러 메시지 한글화 미흡 index.php JS
영향: UX
"engine is required", "duration must be 5-120" 등 영문 에러 그대로 노출되는 경우 다수.
// includes/Validator.php 신규
class Validator {
public static function video($p): array {
$err = [];
if (empty($p['topic'])) $err[] = '주제를 입력해주세요.';
if (($p['duration'] ?? 0) < 5) $err[] = '영상 길이는 5초 이상이어야 합니다.';
// ...
return $err;
}
}
권장 적용 순서 (1일 차)
- B-01 (5분): jobs 경로 일괄 치환 → 즉시 대시보드 부활
- B-02 (10분): cron 2개 등록 → M3·M4 모듈 즉시 가동
- B-04 (15분): PiAPI 잔액 API 교체 → 관리자판 정상화
- B-05 (5분 + 키발급): OpenAI 키 → TTS·자막 부활 → 영상 품질 즉시 ↑
- B-03 (1시간): trend step1 작성 → 위저드 가동
- B-06, B-07, B-08 (당일): 모델·엔진 어댑터 패턴
- B-09 ~ B-12 (3일): 안정성·UX 마무리
🔍AI Video Factory 트렌드 분석 6단계 위저드
현재 구현 상태
1주제 입력
step1/save.php
❌ 폴더 부재
2트렌드 수집
step2/collect.php
✓ 존재
3영상 분석
step3/analyze.php
✓ 존재
4패턴 추출
step4/extract.php
⚠ Claude키 없음
5영상 설계
step5/design.php
⚠ Claude키 없음
6제작 연동
step6/create_job.php
✓ 존재
치명적 문제: 1단계가 빠져 있어 위저드가 시작 자체를 못 함.
trend/api/step1/ 폴더 및 4개 파일(save.php · approve.php 등)을 작성해야 합니다.
v3.0 권장 흐름 — SuperAI 단일화 + 자동 진행 옵션
❌ 현재 설계 (사용자 단계별 승인 필요)
- 각 단계마다 "승인" 버튼 클릭 필요 (6번)
- Claude API 의존 (키 추가 발급 필요)
- step1 폴더 부재로 시작 불가
- 1회 분석에 5~10분 소요 (대기 지루)
- 실패 시 처음부터 다시
✅ v3.0 개선 (1-클릭 자동 모드 추가)
- "전체 자동 진행" 버튼 1번 클릭 → 6단계 일괄
- SuperAI 단일 엔진 (이미 검증·운영중)
- step1 + 자동 모드 라우터 신규 추가
- 실시간 진행률 표시 (SSE 또는 폴링)
- 실패 단계만 재시도 (멱등성 보장)
📄 신규 작성 코드: trend/api/step1/save.php
<?php
header('Content-Type: application/json; charset=utf-8');
require_once dirname(__DIR__, 3) . '/config.php';
$user = Auth::user();
if (!$user) { http_response_code(401); echo json_encode(['ok'=>false,'error'=>'로그인 필요']); exit; }
$in = json_decode(file_get_contents('php://input'), true) ?: [];
$sessionId = $in['session_id'] ?? '';
$topic = trim($in['topic'] ?? '');
$platform = $in['platform'] ?? 'youtube'; // youtube | tiktok | instagram
$direction = $in['direction'] ?? 'info'; // info | emotion | promo
$keywords = $in['keywords'] ?? [];
if (!$sessionId || !$topic) {
echo json_encode(['ok'=>false,'error'=>'session_id, topic 필수']); exit;
}
// trend_sessions 업데이트
Database::query(
"UPDATE trend_sessions SET topic=?, platform=?, direction=?,
keywords_json=?, current_step=1, updated_at=NOW()
WHERE session_id=? AND user_id=?",
[$topic, $platform, $direction, json_encode($keywords, JSON_UNESCAPED_UNICODE),
$sessionId, $user['id']]
);
// 단계 상태 기록
Database::insert('trend_step_status', [
'session_id' => $sessionId, 'step' => 1, 'status' => 'completed',
'message' => "주제 저장: {$topic}", 'created_at' => date('Y-m-d H:i:s')
]);
echo json_encode([
'ok' => true,
'next_step' => 'step2',
'session_id'=> $sessionId,
'topic' => $topic,
'next_url' => '/trend/api/step2/collect.php',
], JSON_UNESCAPED_UNICODE);
🗺️8주 재설계 로드맵 — v3.0 완성까지
전략: "지금 살아있는 7할(영상 생성·결제·인증)을 깨뜨리지 않고, 죽어있는 3할(cron·트렌드·컨시어지)을 살린다."
Week 0 (오늘) · 종합 진단 완료
2026-05-23
설계도 13종 분석 + 시뮬레이션 + 12개 버그 식별 + 본 블루프린트 v3.0 작성.
✓13개 설계도 본문 추출 분석
✓현재 vag.kiam.kr 실 동작 점검
✓jobs 폴더 6개 복원 가능성 확인
✓외부 API 5개 실시간 시뮬레이션
✓마스터 블루프린트 목업 완성
Week 1 (5/24~5/30) · 🚨 긴급 버그 패치 (4개 Critical)
목표: 7할이 즉시 정상 작동
즉시 효과가 보이는 4개 치명 버그 처리. 사용자가 보기엔 "갑자기 시스템이 살아났다" 수준의 체감.
B-01 jobs 경로 sed 일괄 치환 (5분)
B-02 cron 2개 등록 (예약배포 + 통계수집) (10분)
B-04 PiAPI 잔액 엔드포인트 v2 마이그레이션 (15분)
B-05 OpenAI API 키 발급 + .env 추가 (TTS+자막 부활) (1일)
회귀 테스트: Job 1건 풀 파이프라인 (5장면·1분·TTS+자막)
Week 2 (5/31~6/6) · 🔍 트렌드 분석 위저드 완성
목표: 6단계 위저드 End-to-End 동작
Step1 부재 해결 + SuperAI 단일화(Claude 제거) + 1-클릭 자동 모드 추가.
B-03 trend/api/step1/ 폴더 + 4개 PHP 신규 작성
B-07 ClaudeAnalyzer → TrendAIAnalyzer 어댑터 패턴 리팩토링
step4/extract.php · step5/design.php를 SuperAI로 전환
"1-클릭 자동 모드" 라우터 (trend/api/auto_run.php)
실시간 진행률 표시 (SSE 또는 폴링)
실제 테스트: "5월 가정의 달" 주제로 1회 풀 위저드 + 영상 제작
Week 3 (6/7~6/13) · 🚀 SNS 배포 자동화 검증·확장
목표: YouTube 1회 실제 업로드 성공
YouTube OAuth 실연결·업로드 검증, 자동 메타데이터 생성 강화.
OAuth 동의화면 등록·검증 (Google Console)
실제 YouTube 채널 연결 + 영상 1편 업로드 성공
AI 메타데이터 생성 (제목·설명·태그·썸네일) 자동화
예약 배포 실 동작 시나리오 검증 (cron 매분)
업로드 실패 시 자동 재시도 (3회, 지수 백오프)
Week 4 (6/14~6/20) · 📈 성과 모니터링 + AI 분석가 출근
목표: AI 분석가가 첫 주간 리포트 발송
stats/collect.php cron 작동 + 주간 리포트 자동 생성·메일 발송.
B-08 api/stats/collect.php 구현 (YouTube videos.list)
api/stats/weekly_report.php 신규 (매 월요일 9시 cron)
SMTPMailer 연동 HTML 리포트 템플릿
대시보드 위젯: 조회수/팔로워 차트 (Chart.js)
"쇼츠 재가공 추천" 알고리즘 (조회수 상위 30% 영상)
Week 5 (6/21~6/27) · 💬 AI 컨시어지 출근 ⭐ v3.0 핵심
목표: 대화형 24시간 응대 가동
v3.0 차별점. 대시보드 우측 하단 상주, SuperAI 기반 대화형. 사용자 컨텍스트(영상 이력, 채널, 결제) 자동 인지.
api/concierge/chat.php (Function Calling 패턴)
의도 인식 함수: create_video, schedule_deploy, show_stats, recommend_topic
대시보드 우측 하단 챗 위젯 (본 목업 컴포넌트 그대로 이식)
온보딩 가이드: 첫 로그인 시 자동 대화 시작
대화 히스토리 DB (concierge_messages 신규 테이블)
Week 6 (6/28~7/4) · 🎨 멀티 엔진 강화 + 폴백 체인
목표: 7-엔진 자동 폴백 동작
B-09 패치 + DALL·E 4 이미지 폴백 + TikTok API 추가.
B-09 worker.php 자동 폴백 체인 (Kling→fal_wan→fal_minimax→FFmpeg)
DALL·E 4 이미지 폴백 (Pexels 검색 결과 부족 시)
TikTok Content Posting API + OAuth 구현
엔진별 비용·품질 자동 추천 (사용자 예산 기반)
Week 7 (7/5~7/11) · 🎁 마무리 안정화 + 디자인 통일
목표: UX 완성도 95%
B-10, B-11, B-12 패치 + 관리자 페이지 다크모드 통일.
B-10 사용량 차감 트랜잭션 안전화
B-11 관리자 페이지 다크모드 (본 v3.0 디자인 토큰 적용)
B-12 Validator.php · 에러 메시지 한글화
API 응답 표준화 (success/error/data/meta)
로딩 스피너·진행률 일관성
Week 8 (7/12~7/18) · 🎉 v3.0 정식 출시
목표: 베타 사용자 30명 온보딩
전체 회귀 테스트 + 부하 테스트 + 출시.
End-to-End 시나리오 10건 (회원가입→트렌드→영상→배포→리포트)
동시 사용자 30명 부하 테스트
관리자 운영 매뉴얼 작성
사용자 가이드 영상 (자체 솔루션으로 제작!)
🎉 vag.kiam.kr v3.0 공식 출시
v3.0 출시 시 달성 KPI
1분 영상 제작비용
₩2.8K
기존 30만원 대비 99% 절감
🎬 "AI 7명이 24시간 운영하는 무인 콘텐츠 스튜디오"
8주 뒤, 사용자는 주제 한 줄만 입력하면
AI 기획자가 트렌드를 분석하고 → AI 아트디렉터가 이미지를 모으고 → AI 성우가 목소리를 입히고 →
AI 편집자가 영상을 만들고 → AI 후반작업이 자막을 붙이고 → AI 배포매니저가 최적 시각에 SNS에 올리고 →
AI 분석가가 성과를 리포팅하고 → AI 컨시어지가 다음 영상을 제안합니다.
— 아리가 만드는 최고의 작품, AI Video Factory v3.0 —