이제, 너가 저번에 만든 대본수집->분석->새대본만드는 프로그램과 이걸 연동할건데, 그 프로그램을 이제 클라욷런에 올려도 될까? 올려놓고 테스트 할까? 아니면 크롬 ->정보전송




짧게 결론부터:

먼저 로컬에서 “크롬 확장 → API 서버 →(옵션) 분석 파이프라인”까지 E2E로 확인하고,

문제 없으면 스테이징 Cloud Run에 올려서 실제 트래픽으로 1~2일 테스트 → 그 다음 프로덕션 전환이 가장 안전합니다.


추천 진행 순서 (베스트 프랙티스)

  1. 로컬 E2E 점검

  • 크롬 확장(CAP 버튼) → http://localhost:8000/captions/process 전송

  • API 서버가 요약을 구글 시트에 Append하는지 확인

  • (옵션) 오케스트레이터 /pipeline/run까지 한 번 호출해 “분석→새 대본”까지 한 바퀴

  1. 컨테이너라이즈 & 스테이징 배포(Cloud Run)

  • 동일 이미지를 Cloud Run에 staging 서비스로 배포

  • 크롬 확장 API Endpoint를 스테이징 URL로 바꾸고 10~20건 실사용 테스트

  • 콜드스타트, CORS, 인증, 시트 쓰기 권한 등 실환경 이슈 체크

  1. 프로덕션 전환

  • 문제가 없으면 prod 서비스로 복제 배포

  • 확장에서 엔드포인트를 prod로 전환

바로 Cloud Run에 올려도 되긴 하지만, 확장에서 보내는 페이로드/인증/CORS 한 번만 어긋나도 디버깅이 길어져요. 그래서 로컬 → 스테이징 → 프로덕션 권장입니다.


로컬에서 반드시 확인할 체크리스트

  • CORS: OPTIONS /captions/process 프리플라이트 허용(메서드/헤더)

  • 요약 필드: 시트에는 대본 제외하고 extracted_at, title, url, view_count, like_count, comment_count, category, tags, language, is_auto_generated, channel_name, duration_seconds, extension_version 등이 잘 들어가는지

  • YouTube Data API 키(선택): 키 없을 때 DOM 폴백이 문제없이 null 처리되는지

  • 에러 핸들링: 자막 없음/비공개/라이브/연령제한 영상에서 실패 토스트가 의미 있게 뜨는지

  • 중복 전송 방지: 버튼 연타 시 디바운스 작동

  • 용량: 캡션이 긴 영상에서 요청 바디 크기가 과하지 않은지(Cloud Run 기본 32MB)


Cloud Run 배포 요약

1) Dockerfile (예시: FastAPI + Uvicorn)

dockerfile
FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . ENV PORT=8080 CMD ["uvicorn", "api_server:app", "--host", "0.0.0.0", "--port", "8080"]

2) 배포 커맨드

bash
gcloud builds submit --tag gcr.io/PROJECT_ID/captions-api:staging gcloud run deploy captions-api-staging \ --image gcr.io/PROJECT_ID/captions-api:staging \ --region asia-northeast3 \ --platform managed \ --allow-unauthenticated \ --max-instances 3

서울 리전: asia-northeast3

콜드스타트 줄이고 싶으면 --min-instances 1(비용 증가). 당장은 0 유지로 시작해도 OK.

3) 환경변수(중요)

  • ORCH_URL : (옵션) 오케스트레이터 /pipeline/run 주소

  • SHEETS_CREDENTIALS_JSON : 서비스계정 JSON(내용 문자열 or 파일경로)

  • SHEET_ID : 대상 스프레드시트 ID

  • SHEET_NAME : 탭 이름(예: Logs)

  • (필요 시) AUTH_TOKEN : 확장에서 보낼 Bearer 토큰

Cloud Run에 환경변수 등록:

bash
gcloud run services update captions-api-staging \ --region asia-northeast3 \ --set-env-vars ORCH_URL=https://orchestrator.../pipeline/run,SHEET_ID=...,SHEET_NAME=Logs

4) CORS 허용 스니펫(FastAPI)

python
from fastapi.middleware.cors import CORSMiddleware app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=["chrome-extension://*", "https://www.youtube.com", "*"], allow_credentials=True, allow_methods=["POST", "OPTIONS"], allow_headers=["*"], )

확장과 “대본수집→분석→새대본” 파이프라인 연결 팁

  • 비동기 체인: /captions/process에서 요약만 시트에 기록하고, 긴 작업(분석/새대본)은 백그라운드 큐(예: Cloud Tasks or 간단한 스레드)로 넘기면 사용자 체감이 빨라요.

  • 리트라이/아이덴포턴시: video_id + 날짜로 중복 검사(같은 날 중복 수집 시 덮어쓰기 or Skip).

  • 에러 관찰성: Cloud Run 로그 + 시트에 “status/error” 컬럼 하나 더 두면 운영이 쉬워집니다.


지금 당장 무엇을 하면 좋나

  1. 로컬에서 E2E 한 바퀴: 확장 → API → 시트 Append → (옵션) 오케스트레이터 호출

  2. OK면 스테이징 Cloud Run 배포하고, 확장 API Endpoint만 스테이징 URL로 교체

  3. 10~20건 실데이터로 테스트(서로 다른 영상 유형)

  4. 문제 없으면 prod로 복제 배포

원하시면 제가 Cloud Run 스테이징 배포용 브랜치/환경변수 템플릿까지 바로 정리해 드릴게요. 어디부터 손댈지 말만 주세요!

댓글 남기기