관리자 글 목록 페이징
관리자 화면의 글 목록이 끝없이 이어져 내려가는 문제가 있었다. 기존에는 글을 최대 200개까지 한 번에 가져왔다.
- 전체 글 수를 먼저 세고,
?page=N에 해당하는 20개만 DB에서 가져오도록 바꿨다. - 페이지 번호는 첫 페이지, 끝 페이지, 현재 페이지 앞뒤 2개만 보이고 나머지는
…로 줄였다. 글이 빠르게 늘어날 것을 고려한 것이다. 번호 계산은pageNumbers()로 분리하고 테스트 4개를 추가했다. npm run verify는 통과했다. 린트 0 에러, 테스트 43개 통과, 빌드 성공.
커밋은 두 개로 나눴다. 하나는 자동 발행 스크립트가 쓰는 주소를 yongdev.dev로 바꾼 커밋이고, 다른 하나는 페이징 커밋이다. 배포는 첫 시도에 성공했다. 홈은 200으로 열리고, 로그인하지 않은 상태로 관리자 화면에 들어가면 로그인 화면으로 넘어간다. 로그인한 상태에서 페이지 번호가 제대로 보이는지는 아직 직접 확인하지 못했다.
자동 발행이 멈춘 원인 추정
오전 10시가 넘어도 AI 뉴스 글이 올라오지 않았다. 처음에는 발행 작업 자체가 멈춘 줄 알고 원인을 찾았다. 응답은 로그인 쿠키 문제를 유력한 원인으로 짚었다. 로그인 쿠키는 도메인마다 따로 저장되는데, 도메인을 vercel.app에서 yongdev.dev로 옮긴 뒤로 기존 로그인이 새 도메인에서는 쓰이지 않는다는 설명이다. 이 원인은 아직 확인하지 않았다. 발행 작업이 쓰는 브라우저에서 yongdev.dev로 다시 로그인하면 다음 발행부터 정상으로 돌아갈 것으로 보고 있다. 오늘 놓친 글은 자동 발행을 수동으로 한 번 실행하면 된다.
교육 영상 에이전트 파이프라인
영상을 여러 에이전트로 나눠 만드는 흐름을 시험했다. 탐색, 편집, 음성, 그림, 모션, 검증으로 역할을 나누고, 메인 세션은 지휘만 하는 구조다. 결과물의 속도와 품질이 괜찮으면 이 흐름을 스킬로 굳히기로 했다.
- 홍보 영상 (yongdev.dev): 1분 58.6초, 10장면, 1920x1080이다. 자막 24개가 대본과 글자까지 같고, 장면마다 맞는 그림이 나왔다. 음성은 아무도 귀로 듣지 않았다. whisper가 "용데브"를 "용대부"로 받아 적어서, 실제 발음 문제인지 확인해야 한다.
- 지구 자전 영상 ("낮과 밤"): 2분 5.5초다. 과학 도표와 장면 구성은 측정으로 통과했다. Gemini 무료 한도에 걸려 음성은 edge-tts로 다시 녹음했다. 이 과정에서 약 8분이 더 들었다. 최종 판정은 "검증 미완료"다. 발음을 사람이 들어 봐야 하기 때문이다.
- 곤충 영상 (2분 7초): 첫 검증에서 과학 오류(P0)가 나와 대본, 녹음, 모션을 모두 다시 했다. 그 수정에서 딱정벌레 도해에 다리와 더듬이가 빠지는 문제가 새로 생겨 마지막 수정 라운드를 돌렸다.
스킬로 굳히기
검증 에이전트 정의는 사용자가 넣어 준 파일을 기준으로 맞추고, 나머지 에이전트 정의 5개를 같은 형식으로 만들었다. 이후 ~/.claude/skills/agent-video/에 SKILL.md, 에이전트 정의 6개, 스크립트를 묶었다. 곤충 영상은 이 스킬로 처음부터 끝까지 돈 사례다.
테스트하면서 얻은 원칙은 세 가지다.
- 음성은 edge-tts를 기본으로 하고, Gemini를 쓸 때는 시작 전에 한도를 먼저 확인한다.
- 개념 영상의 주인공은 도표다. 그림은 흐린 배경으로만 쓴다.
- 문제가 생기면 그 장면이나 파일만 고친다. 처음부터 다시 하지 않는다.
곤충 영상은 62분(11:16~12:18)이 걸렸다. 첫 렌더까지 28분, 검증과 수정에 34분이 들었다. 사용자 지시에 따라 3차 에이전트 검증은 빼고 자동 최소 검수(36개 항목)만 돌렸다. 사람이 볼 곳은 따로 8곳을 정리했다.
에이전트마다 호출할 때 몇 초씩 지연되는 문제도 원인을 찾았다. context-mode 플러그인의 Agent 훅이 프롬프트를 바꿔서, 자동 모드 검사를 한 번 더 받게 만들고 있었다. Agent 훅 항목 하나만 지우고 백업을 남겼다. 다음 세션에서 적용되는지는 확인이 필요하다.
로컬 Qwen 추론 서버 (Strata)
M1 Ultra 128GB 장비에 Strata로 Qwen3.8-Flash-Next를 띄우는 작업을 했다. 속도 기준으로 Q2_0 양자화를 골랐다. 공식 측정에서 가장 빠르지만 품질은 IQ3_S보다 낮다. 품질이 우선이면 IQ3_S로 바꾸면 된다.
512K 컨텍스트는 모델이 학습한 최대 길이(262,144토큰)를 넘는다. 그래서 YaRN으로 2배 확장하는 옵션을 설정 파일에 넣었다. 설치 스크립트는 자동 모드가 외부 코드 실행으로 막아서 직접 실행했다.
실행하니 8080 포트를 Docker가 이미 쓰고 있었다. Strata를 8081로 옮겼다.
Mac에서는 Docker 컨테이너가 GPU(Metal)를 쓸 수 없어서 Docker 배포는 맞지 않는다고 판단했다. 대신 launchd 서비스로 등록하는 방향을 잡았다. 로그인하면 자동 시작하고, 비정상 종료 때만 재시작한다. plist 파일은 만들었지만, 자동 모드가 LaunchAgents 폴더에 쓰는 것을 막아서 등록은 직접 해야 한다.
남은 것
- 관리자 페이징: 로그인한 상태에서 페이지 번호가 보이는지 확인하지 않았다.
- 자동 발행: 발행 브라우저에서 yongdev.dev로 다시 로그인한 뒤, 다음 발행이 올라가는지 확인해야 한다. 오늘 글은 수동으로 실행해야 한다.
- Gemini 무료 한도: 유료 키로 바꿀지, 시작 전에 한도를 확인할 절차를 둘지 정해야 한다.
- 홍보 영상: "용데브" 발음을 직접 들어 확인해야 한다.
- 낮과 밤 영상: 발음이 의심되는 세 곳을 들어 봐야 한다. S01 약 4.2초 "져요", S06 약 54.7초 "해 질 녘이나"가 포함된다.
- 곤충 영상: 사람이 볼 8곳이 남았다. 28.4초 "지네와", 44.4초 "얇은", 64.6초·71.6초 "벌목", 49~51초 딱정벌레 도해, 화면의 목 이름 6개(출처를 찾지 못함), S06 자막 상자와 개미의 간격 등이다.
- Strata: 서버가 실제로 뜨는지, 512K 설정이 동작하는지 확인하지 않았다. launchd 등록도 아직이다.
setup.sh를 다시 돌리면 설정 파일이 덮어써져 포트와 YaRN 수정이 사라질 수 있다. - context-mode: Agent 훅 제거가 새 세션에서 적용되는지 확인해야 한다.
댓글 0개
아직 댓글이 없습니다. 첫 댓글을 남겨보세요.