구글 문서 공유 한 번이면 자막 추출부터 번역, 문서 작성, 이메일 알림까지 완전 자동화 구현
🌱상황🌱
교회 번역팀에서 매주 YouTube Shorts 영상의 한국어 자막을 영어로 번역하는 일을 새롭게 담당했다. 문제는 기존 팀에서 업무를 수행하는 과정이 전부 수작업이었다는 것.
영상 자막을 직접 듣고 받아적기
직접번역 혹은 Google, ChatGPT에 복붙해서 번역
번역 결과를 Google Docs에 옮겨 적기
담당자에게 "번역 완료됐어요" 연락하기
교정담당자들이 해당 문서에 가서 댓글로 교정필요사항 적기
담당자에게 "교정 완료됐어요" 연락하기
번역가 교정내용 확인 검수 후 반영
팀장에게 "교정반영 완료됐어요" 연락하기
영상제작자에게 토스
영상이 2~3개면 괜찮은데, 매주 반복되니 시간도 들고 빠뜨리는 영상도 생겼다. "구글 문서에 영상 링크만 공유하면 나머지는 알아서 되면 안 되나?"라는 생각에서 시작했다.
📌진행 방법📌
사용한 도구: Claude Code (CLI), Google Drive/Docs API, Gemini API, OpenAI Whisper, Vercel
전체 흐름을 Claude Code에게 설명하고, 모듈별로 하나씩 만들어나갔다.
1단계: 전체 시스템 설계를 Claude에게 맡겼다
교회에서 매주 YouTube Shorts 영상을 한->영 번역하는 작업을 자동화하고 싶어.
워크플로우는 이래:
1. 담당자가 Google Docs에 YouTube 링크를 정리해서 나한테 공유
2. 프로그램이 공유된 문서를 자동 감지
3. 각 영상에서 한국어 자막 추출
4. 영어로 번역
5. 새 Google Docs 문서에 번역 결과 작성
6. 완료 이메일 발송
이걸 Python으로 만들어줘.
Claude가 6개 모듈로 나눠서 전체 구조를 잡았다:
drive_monitor.py— Google Drive에서 '쇼츠' 문서 자동 감지transcript_extractor.py— YouTube 자막 추출 (API 우선, 없으면 Whisper 음성인식)translator.py— Gemini로 한→영 번역docs_writer.py— 번역 결과를 새 Google Docs에 작성notifier.py— 완료 이메일 발송glossary.py— 번역 피드백 수집 및 용어사전 학습
2단계: 번역 품질을 교회 맥락에 맞게 튜닝했다
일반적인 번역이 아니라 교회 간증/설교 영상이기 때문에, 번역 프롬프트를 세밀하게 작성했다.
TRANSLATE_PROMPT = """당신은 영어권 교회에서 통역 경험이 풍부한 전문 번역가입니다.
[번역 품질 규칙]
1. 직역하지 마세요. 영어권 교회에서 자연스럽게 들리는 간증/설교체로 의역하세요.
2. 기독교 용어: 하나님=God, 예수님=Jesus, 주님=the Lord, 말씀=the Word,
은혜=grace, 믿음=faith, 순종=obey, 치유=healing
3. 성도님/자매님은 "this sister (in Christ)" 또는
"one of our church members"로 번역하세요.
4. 사랑하는교회=Beloved Church, 치유 간증=Healing Testimony
5. "사사모"는 영어 번역에서 완전히 생략하세요.
[형식 규칙]
1. 의미가 연결되는 한국어 줄들을 하나의 그룹으로 묶으세요 (2~4줄).
2. 한국어 그룹의 모든 줄을 먼저 쓰고, 바로 아래에 영어 번역을 쓰세요.
3. 각 줄은 반드시 한 가지 언어만 사용하세요."""
핵심은 의미 단위 그룹핑이다. 한 줄씩 번역하면 문맥이 끊기고, 전체를 한 번에 번역하면 대조가 안 된다. "한국어 및 영어 각각 2-4줄" 형식으로 묶어서, 번역 검수하는 팀원이 한눈에 비교할 수 있게 했다.
3단계: 자막이 없는 영상은 Whisper로 해결했다
YouTube 자막 API로 안 되는 영상이 꽤 있었다. Claude에게 "자막 없는 영상도 처리해야 해"라고 했더니, OpenAI Whisper를 fallback으로 붙여줬다.
def get_video_transcript_text(url):
# 1순위: YouTube 자막 API
transcript = try_youtube_api(url)
if transcript:
return transcript
# 2순위: Whisper 음성인식
audio_path = download_audio(url)
result = whisper.load_model("base").transcribe(audio_path, language="ko")
return result["text"]
자막 API가 있으면 바로 쓰고, 없으면 오디오를 다운받아서 Whisper로 음성인식한다. 사용자는 차이를 모른다.
4단계: 번역 피드백이 자동으로 쌓이게 했다
번역 결과 문서에 팀원들이 댓글로 수정 피드백을 남기면, 다음 실행 시 프로그램이 그 댓글을 읽고 Gemini로 분석해서 용어사전에 반영한다.
[피드백 수집] 댓글 확인 중...
-> 댓글 23개 발견. 문서 본문 로딩 중...
-> AI 분석 중...
-> 12개 규칙 저장 완료
팀원이 "이 표현은 이렇게 번역해줘"라고 댓글을 달면, 다음부터는 자동으로 그 규칙이 적용된다. 쓸수록 번역 품질이 좋아지는 구조.
5단계: Windows 작업 스케줄러로 완전 자동화
처음엔 터미널에서 수동 실행했는데, "PC 켜지면 자동으로 돌아가게 해줘"라고 했더니 Claude가 작업 스케줄러 등록까지 해줬다.
매일 오전 9시, 오후 3시에 자동 실행
PC 로그온 시 즉시 1회 실행
실행 로그는 logs.txt에 저장
동시 실행 방지용 잠금 파일(.lock)도 넣어서, 9시 작업이 아직 끝나지 않았는데 또 실행되는 일을 방지했다.
6단계: 소개 페이지를 만들어 Vercel에 배포했다
시스템을 교회 팀원들에게 설명하기 위해 랜딩 페이지도 만들었다. Claude에게 "이 시스템의 작동 과정을 보여주는 웹페이지를 만들어줘"라고 했더니, 한국어/영어 전환 기능까지 포함된 반응형 페이지를 만들어줬다.
항상 옵션을 먼저 제안해줘.
한국어/영어 선택 기능 넣어줘.
반응형 디자인으로 만들어.
Google Forms 연동으로 피드백 수집 기능도 추가했다.
🎁 결과와 배운 점🎁
결과:
구글 문서 공유 1번 → 자막 추출, 번역, 문서 작성, 이메일 알림까지 완전 자동
매주 1~2시간 걸리던 번역 작업이 0분 (사람이 할 일이 없다)
팀원 댓글 피드백이 자동으로 용어사전에 반영 → 쓸수록 번역 품질 향상
코드 한 줄 직접 안 씀
과정 중에 겪었던 시행착오
이미 번역한 문서를 또 번역하는 버그 — 테스트 중 프로그램을 2번 동시에 실행해서 같은 문서를 중복 처리했다. Claude에게 알려줬더니 잠금 파일(.lock) 메커니즘을 추가해줬다.
영상 제목이 번역 안 되는 문제 — YouTube 스마트 칩(richLink)에 들어있는 영상 제목을 코드가 무시하고 있었다. "영상 제목도 번역해줘"라고 했더니 Google Docs API의 richLink 구조에서 title을 추출하도록 수정했다.
<분야> 담당자000같은 카테고리가 번역되는 문제 — "이건 번역하지 마"라고 한 마디 했더니,<>패턴이 있는 줄은 원문 유지하고 영상 제목만 번역하도록 분기 처리해줬다.Gmail OAuth 403 에러 — Google의 보안 정책 변경으로 발생. Claude가 원인을 파악하고 OAuth 동의 화면 설정 방법을 안내해줬다.
나만의 꿀팁:
"이건 번역하지 마", "이건 유지해"처럼 예외 케이스를 구체적으로 알려주는 게 중요하다. AI는 "전부 번역해"라고 하면 전부 번역 한다. 경계 조건은 사람이 잡아줘야 한다.
한 번에 완벽하게 안 나와도 괜찮다. 실행 → 결과 확인 → "이거 고쳐줘" 반복이 가장 빠르다. 처음부터 완벽한 프롬프트를 쓰려고 고민하는 것보다 빠르게 돌려보고 피드백 주는 게 낫다.
동시 실행, 중복 처리 같은 운영 이슈는 직접 겪어봐야 나온다. 개발할 때는 몰랐는데, 실제로 자동 실행하니까 바로 터졌다. 테스트 환경과 운영 환경은 다르다.
앞으로의 계획:
용어사전 관리 UI (Google Sheets 연동)
이메일 수신자 관리 기능
번역 대상 영상 자동 발굴 (교회 YouTube 채널 모니터링)
다른 교회에서도 쓸 수 있도록 설정 일반화
개인적 성장
이번 프로젝트에서 Google Drive API, Docs API, Gmail API, Gemini API를 처음으로 연결해봤다. Google Cloud Console에 직접 들어가서 프로젝트를 만들고, API를 활성화하고, OAuth 동의 화면을 설정하고, 사용자 인증 정보를 발급받는 과정을 하나씩 해냈다. "API"라는 단어 자체가 어렵게 느껴졌는데, 막상 해보니 설정 화면을 읽고 따라가는 것이었다.
API 연결 설정은 내가 직접 했고, 그 API를 활용하는 코드 작성은 Claude Code가 했다. 역할 분담이 자연스럽게 생긴 셈이다. 그리고 돌려보면서 문제가 생길 때마다 — Google OAuth 403 에러가 터졌을 때 원인을 파악하고 동의 화면 설정을 수정한 것도, 이미 번역한 문서가 중복 처리되는 걸 발견해서 잠금 파일 메커니즘을 요청한 것도, 영상 제목이 번역 안 되는 걸 캐치해서 수정을 지시한 것도 전부 나였다. 문제를 발견하고, 원인을 추론하 고, 해결 방향을 제시하는 건 결국 사람의 몫이었다.
이 과정을 통해 느낀 건, "코딩을 할 줄 아느냐"보다 "무엇이 문제이고 어떻게 풀어야 하는지 판단할 수 있느냐"가 더 중요한 시대가 됐다는 것이다. Claude Code는 도구일 뿐이고, 그 도구를 들고 어디를 두드릴지 결정하는 건 나였다. 그 과정에서 느낀 효능감이 이번 프로젝트의 가장 큰 성과다.