기역월드 K-POP 방송 운영 안내서

Cloudflare 통합판 · 시험 배포(gwkpop-test)부터 일상 운영까지

시험 배포 순서

이번 시험 배포는 새 프로젝트 gwkpop-test에만 올립니다. 지금 운영 중인 gwkpop.com 프로젝트, 가비아·Cloudflare DNS는 건드리지 않습니다.

1폴더 준비

  1. giyeok-site.zip의 압축을 풀면 giyeok-site 폴더가 생깁니다.
  2. 노래-1.zip, 노래-2.zip을 풀어 나온 heal-01~14.m4a 14곡을 giyeok-site/music 폴더 안에 넣습니다.
  3. 확인: giyeok-site 바로 안에 _worker.js, _routes.json, index.html, admin.html이 보이고, music 폴더에 14곡이 있어야 합니다.

2시험용 프로젝트 만들기

  1. dash.cloudflare.com 로그인 → 왼쪽 Workers & Pages → Create(생성).
  2. Pages 탭 → Upload assets(파일 업로드) 선택.
  3. 프로젝트 이름에 gwkpop-test 입력 → Create project.
  4. giyeok-site 폴더 전체를 끌어다 놓고 → Deploy site.
  5. 완료되면 https://gwkpop-test.pages.dev 주소가 생깁니다. (이 상태에선 방송 화면만 되고, 관리자는 아직 안 됩니다.)

3데이터베이스(D1) 만들기 — 필수, 무료

  1. 왼쪽 Storage & Databases → D1 SQL Database → Create.
  2. 이름 gwkpop-db → Create. (표는 첫 접속 때 자동으로 만들어집니다. 따로 할 일 없음)

4파일 저장소(R2) 만들기 — 선택

  1. 왼쪽 R2 Object Storage → 처음이면 이용 신청 → Create bucket → 이름 gwkpop-media.
  2. R2는 처음 신청할 때 결제 카드 등록을 요구할 수 있습니다. 무료 한도(10GB 보관, 내려받기 무료) 안에서는 0원입니다.
  3. 카드 등록이 꺼려지면 건너뛰어도 됩니다. 이 경우 올린 사진·음원은 D1에 나눠 저장됩니다(5GB까지 무료). 영상은 유튜브 링크를 쓰므로 용량 걱정이 거의 없습니다.

5프로젝트에 연결(바인딩)

  1. Workers & Pages → gwkpop-test → Settings(설정) → Bindings(바인딩) → Add.
  2. D1 database 선택 → 변수 이름 DB (대문자 그대로) → 데이터베이스 gwkpop-db → 저장.
  3. (R2를 만들었다면) R2 bucket 선택 → 변수 이름 MEDIA → 버킷 gwkpop-media → 저장.

6관리자 비밀번호 저장 — 서버에만 보관

  1. 같은 Settings → Variables and Secrets(변수 및 비밀) → Add.
  2. Type(유형): Secret(비밀) · 이름 ADMIN_PASSWORD · 값: 새 비밀번호 → 저장.
  3. 비밀번호는 10자 이상, 영문·숫자·기호 섞어서. 예전 임시 비밀번호(1005)는 쓰지 마세요.
  4. Secret으로 저장하면 Cloudflare 화면에서도 다시 보이지 않습니다. 따로 안전한 곳에 적어 두세요.

7한 번 더 올리기(설정 적용)

  1. 바인딩과 비밀번호는 다음 배포부터 적용됩니다.
  2. gwkpop-test → Deployments(배포) → Create deployment(새 배포) → 같은 giyeok-site 폴더를 다시 끌어다 놓기 → Save and Deploy.

8관리자 첫 로그인

  1. https://gwkpop-test.pages.dev/admin.html 접속 → 비밀번호 입력.
  2. 처음 로그인하면 기존 내용(뮤직비디오·노래 14곡·라이브·숏츠·홍보모델·공지·편성표)이 자동으로 서버에 옮겨집니다.
  3. 위에 “즉시 반영” 표시가 보이면 성공입니다. “비밀번호가 설정되지 않음”이 나오면 6·7단계를 다시 확인하세요.

확인 체크리스트 (PC · 모바일)

체크는 이 화면에서만 표시되고 저장되지 않습니다.

방송 화면 gwkpop-test.pages.dev

관리자 화면 /admin.html

AI DJ 자동방송 (2차 업그레이드)

  1. 음원 채널 편성: 관리자 → 음원 → 수정 → 「AI DJ 라디오 채널 편성」에서 곡이 나올 채널을 체크합니다. 한 곡을 여러 채널에 넣을 수 있습니다.
  2. 방송 편성: 관리자 → 방송 편성 → 시작 시간·DJ·채널·요일·홍보 멘트 간격을 정합니다. 방송 화면 라디오의 「📅 편성대로」가 켜져 있으면 시간에 맞춰 DJ와 채널이 바뀝니다.
  3. 멘트: 관리자 → AI DJ 멘트 → 새로 추가 → 「기본 초안」 또는 「AI 초안」 → 읽고 고치기 → 상태 「승인」 → 저장. 승인한 멘트만 방송에 나갑니다.
  4. 음성: 「AI 음성 만들기」를 누르면 MP3로 저장해 계속 재사용합니다. 음성이 없는 멘트는 듣는 사람의 브라우저 음성으로 읽습니다(무료, 기기마다 목소리가 다름).
  5. 사람 DJ 편성: 방송 편성에서 DJ를 사람 DJ로 고르면 그 시간에 「생방송 시간」 안내가 나오고, ON AIR가 되면 LIVE ON AIR로 전환됩니다.

사람 DJ 생방송 (유튜브 라이브)

  1. 사람 DJ 명단: 관리자 → 더보기 → 사람 DJ 명단 → 이름·국가·방송 언어·정기 방송 시간·유튜브 링크·사진을 등록합니다.
  2. 생방송 등록: 유튜브 스튜디오에서 실시간 스트리밍(예약)을 만들고, 관리자 → 사람 DJ 생방송 → 새로 추가 → 그 주소(또는 영상 ID 11자리)를 붙여 넣습니다. 방송 시작 시각과 「방송이 끝나면(다시보기 / AI DJ 라디오)」을 고릅니다.
  3. 방송 시작: 유튜브에서 방송을 시작한 뒤 목록의 🔴 ON AIR를 누르면 방송국 LIVE ON AIR 화면에 유튜브 공식 플레이어와 실시간 채팅이 바로 나옵니다. 누구나 로그인 없이 무료로 볼 수 있습니다.
  4. 방송 종료: ■ 방송 종료를 누르면 설정에 따라 다시보기를 보여 주거나 AI DJ 라디오로 안내합니다.
  5. 라디오에서 「편성대로」로 듣는 사람은 ON AIR가 되면 생방송 화면으로 자동 안내되고, AI DJ 소리는 멈춰 겹치지 않습니다.

자동 감지 (선택 · 무료): Google Cloud에서 YouTube Data API v3를 사용 설정하고 API 키를 만든 뒤(키 제한: YouTube Data API v3만), Cloudflare에 비밀값 YOUTUBE_API_KEY로 넣고 다시 배포합니다. 생방송 항목에서 「유튜브 상태 자동 감지」를 체크하면 1분마다 실제 방송 상태를 확인해 ON AIR와 종료가 저절로 바뀝니다. 시청자가 많아도 확인은 1분에 한 번이라 하루 약 1,440 단위(무료 한도 10,000 단위)만 씁니다.

유튜브 실시간 채팅은 유튜브 정책상 방송국 주소(도메인)에서만 열리고, 글을 쓰려면 시청자의 유튜브 로그인이 필요합니다. 휴대폰 브라우저에서는 채팅 창이 보이지 않을 수 있어 「유튜브에서 보기 · 채팅 쓰기」 버튼을 함께 두었습니다. 방송에 쓰는 음악은 권리를 확인해 주세요(유튜브 저작권 정책).

AI 기능 연결 (선택)

A. AI 초안 — Cloudflare Workers AI (하루 10,000 뉴런 무료)

  1. gwkpop-test → Settings → Bindings → Add → Workers AI → 변수 이름 AI → 저장.

B. AI 음성 — Google Cloud Text-to-Speech (매월 무료 한도 안에서 0원)

  1. console.cloud.google.com → 새 프로젝트 만들기 (예: gwkpop-voice).
  2. 결제 계정 연결 (카드 등록 필요 · 무료 한도 안에서는 청구 없음). 예산 알림을 1,000원 정도로 걸어 두면 안심입니다.
  3. 「API 및 서비스」 → 라이브러리 → Cloud Text-to-Speech API → 사용.
  4. 「사용자 인증 정보」 → 사용자 인증 정보 만들기 → API 키 → 키 제한에서 Cloud Text-to-Speech API만 허용.
  5. Cloudflare → gwkpop-test → Variables and Secrets → Add → 유형 Secret · 이름 GOOGLE_TTS_KEY · 값: 방금 만든 키.

C. A·B 설정 후 한 번 더 배포(Create deployment)해야 적용됩니다. 관리자 → AI DJ 멘트 화면 위에 「연결됨」이 보이면 성공입니다.

서비스무료 한도넘으면
Google 음성 Neural2 · Chirp3 HD매월 100만 자100만 자당 $16 · $30
Google 음성 WaveNet · Standard매월 400만 자100만 자당 $4
Workers AI (초안)하루 10,000 뉴런무료 플랜은 그날만 멈춤
브라우저 음성무제한 무료—

멘트 1개를 100자로 잡으면 200개를 만들어도 2만 자로, 무료 한도의 2% 수준입니다. 음성은 한 번 만들면 다시 만들지 않으므로 청취자가 늘어도 음성 비용은 늘지 않습니다.

매일 운영하는 법

  1. /admin.html 로그인 → 아이콘(뮤직비디오·라이브·쇼츠·드라마·음원·홍보모델) 선택.
  2. + 새로 추가 → 유튜브 주소 붙여넣기 → 저장. 저장 즉시 방송국에 반영됩니다.
  3. 여러 개 한꺼번에: 왼쪽 체크 → 아래 공개 / 숨김 / 삭제 버튼.
  4. 잘못 지웠으면 휴지통에서 복구. “영구 삭제”만 되돌릴 수 없습니다.
  5. 한 달에 한 번쯤 홈 화면의 백업(data.js) 받기를 눌러 보관하세요.
  6. 영상은 유튜브에 올리고 링크만 등록하세요. 저장 공간과 비용이 들지 않습니다.

무료 사용량과 비용

항목무료 한도넘으면
Pages (화면 파일)방문 무제한, 대역폭 무제한—
서버(API) 요청하루 10만 회그날만 일시 오류, 자동 과금 없음
D1 데이터베이스5GB, 하루 읽기 500만 · 쓰기 10만그날만 멈춤, 자동 과금 없음
R2 파일 저장(선택)10GB, 내려받기 무료10GB 넘으면 GB당 월 약 $0.015

방송 화면은 1분 단위로 캐시하고, 사진·음악 파일은 서버를 거치지 않도록 해 두어 한도를 아낍니다. 한도는 매일 오전 9시(한국 시간)에 초기화됩니다. 유료 플랜(Workers Paid, 월 $5)은 지금 필요 없으며, 필요해지면 먼저 말씀드립니다.

비상시