n8n 유튜브 자막 추출 — 외부 API로 만드는 가벼운 서브워크플로우
이 글과 연결된 글 보기
드래그로 이동 · 휠/두 손가락으로 확대 · 방향키로 글 선택 · 0으로 맞춤. 실선: 본문 링크, 점선: 시리즈·주제의 대표 연결.표시된 글 7편 목록
n8n.io 공식 템플릿을 가져오면, 유튜브 videoId와 API 토큰만 넘겨도 자막 텍스트와 단어 수·글자 수를 돌려주는 서브워크플로우를 만들 수 있습니다. 커뮤니티 노드 설치나 별도 스크래핑 서비스 없이, 외부 API 서비스 하나와 기본 HTTP Request 노드만으로 끝나는 가벼운 구조입니다.
이 템플릿 하나로 보여줄 수 있는 것
면접에서 "콘텐츠 자동화 해본 적 있어요?"라는 질문을 받으면, 이 템플릿은 구체적인 사례로 답할 재료가 됩니다. "유튜브 영상 ID 하나만 넘기면 자막을 뽑아 텍스트로 돌려주는 서브워크플로우를 만들었고, 이걸 블로그나 뉴스레터 자동화의 부품으로 붙여 썼습니다"라고 말할 수 있습니다.
짧은 문장이지만 안에 들어간 역량은 세 가지입니다.
- 외부 API 연동 — HTTP Request 노드로 서드파티 API를 호출하고 토큰으로 인증한 경험
- 서브워크플로우 설계 — Execute Workflow Trigger로 입력을 받아, 여러 워크플로우에서 재사용할 수 있는 부품 단위로 기능을 쪼갠 경험
- 응답 정규화 — 외부 API가 돌려준 원본 응답을 그대로 쓰지 않고 파싱·정제해서 바로 쓸 수 있는 형태로 바꾼 경험
이 세 가지는 유튜브 자막뿐 아니라 AI 요약·감성분석·키워드 추출, 사내 인덱싱·SEO, 블로그나 뉴스레터용 콘텐츠 파이프라인처럼 "외부 콘텐츠를 가져와 다른 자동화의 재료로 쓰는" 유형 전부에 그대로 쓰입니다.
이 템플릿은 무엇인가
이 워크플로우는 데이터팝콘이 만든 게 아닙니다. n8n 공식 템플릿 마켓플레이스(n8n.io/workflows)에 Extract transcripts from external YouTube videos using YouTube Transcript API라는 이름으로 공개된 템플릿이고, 제작자는 Joel Cantero입니다. 카테고리는 Document Extraction(문서 추출)으로 등록돼 있습니다.
공식 설명에 따르면 이 템플릿은 공개된 유튜브 영상의 videoId 하나로 깨끗한 자막을 뽑아주는 추출기입니다. 유튜브 자체 API가 아니라 youtube-transcript.io라는 외부 서드파티 서비스에 요청을 보내는 방식이라서, 커뮤니티 노드를 설치할 필요 없이 n8n 기본 HTTP Request 노드만으로 동작합니다. 공식 활용 사례로는 AI 요약·감성분석·키워드 추출, 사내 인덱싱·SEO, 블로그·뉴스레터용 콘텐츠 파이프라인, 여러 영상을 한 번에 처리하는 배치 자막 처리가 꼽힙니다.
n8n 설치나 기본 노드 조작법은 n8n으로 반복업무 자동화 포트폴리오 만들기에 정리돼 있으니, 이 글은 이 템플릿의 구조 자체에 집중합니다.
구조 — Trigger / Task / Target
공식 문서의 "How it works"는 Input, API, Parse, Clean, Output 다섯 단계로 설명돼 있습니다. 데이터팝콘 방식인 Trigger/Task/Target 세 칸으로 정리하면 이렇습니다.
- Trigger — Execute Workflow Trigger가
youtubeVideoId와apiToken두 값을 입력으로 받으며 시작합니다. 단독으로 실행되는 워크플로우가 아니라, 다른 워크플로우가 불러줘야 움직이는 서브워크플로우입니다. - Task — HTTP Request 노드가 youtube-transcript.io에 POST 요청을 보내고, 응답 형식을 정규화한 뒤 텍스트와 공백을 정제합니다.
- Target — 정제된 자막 텍스트와 함께
wordCount(단어 수)·charCount(글자 수) 지표를 호출한 쪽 워크플로우로 돌려줍니다.
템플릿 상세 페이지의 노드 미리보기에는 HTTP Request, If, Edit Fields(Set) 노드 이름이 나와 있고, 나머지 다섯 개는 이름 없이 "+5 more"로만 표시돼 있습니다. If 노드가 있는 걸 보면 파싱 단계 어딘가에서 응답이 정상인지(자막이 실제로 있는지, 토큰이 유효한지) 확인하는 분기가 들어 있는 것으로 보입니다. 정확한 노드 이름과 연결 순서까지는 공식 페이지에 전부 공개돼 있지 않아서, 여기서는 확인된 범위까지만 다룹니다.
만들기
공식 페이지의 Setup 안내는 한 줄뿐입니다. 대신 How it works 다섯 단계를 따라가며 실제로 무엇을 준비해야 하는지 풀어씁니다.
1. youtube-transcript.io에서 계정 만들고 API 토큰 발급받기
먼저 유튜브 자체가 아니라 youtube-transcript.io라는 별도 서비스에 가입해야 합니다. 가입 후 프로필 페이지에서 API 토큰을 발급받을 수 있는데, 이 토큰을 앞으로 이 서브워크플로우를 호출할 때마다 함께 넘겨야 합니다. 무료 요금제는 매달 25 토큰까지 쓸 수 있고, 그 이상 쓰려면 월 9.99달러부터 시작하는 유료 요금제로 올라갑니다(2026년 8월 기준, 공식 요금제 페이지). API 요청에는 10초에 5건이라는 속도 제한이 걸려 있어서, 이보다 빠르게 여러 영상을 처리하려 하면 429 응답과 함께 얼마나 기다려야 하는지 알려주는 Retry-After 헤더가 돌아옵니다(공식 API 문서).
2. 템플릿 임포트 — 독립 실행이 아니라는 점 이해하기
공식 Setup 안내는 이 서브워크플로우가 다른 워크플로우에서 Execute Workflow Trigger로 호출되도록 만들어졌다는 한 문장입니다. 템플릿을 임포트하고 캔버스 상단의 실행 버튼을 눌러도 자막이 바로 나오지 않는 이유가 여기 있습니다. 이 워크플로우는 완제품이 아니라 부품이라서, 실제로 쓰려면 이 워크플로우를 호출하는 또 다른 워크플로우가 있어야 합니다.
3. Execute Workflow Trigger — 입력값 두 개
캔버스 맨 앞의 Execute Workflow Trigger 노드는 youtubeVideoId와 apiToken 두 값을 입력으로 받습니다. 공식 문서에 실린 호출 예시는 이렇습니다.
{"youtubeVideoId":"xObjAdhDxBE", "apiToken": "xxxxxxxxxx"}
youtubeVideoId는 유튜브 URL의 watch?v= 뒤에 오는 값이고, apiToken은 1번에서 발급받은 그 토큰입니다. xxxxxxxxxx는 실제 토큰이 아니라 자리표시자이니, 호출할 때는 자신의 진짜 토큰으로 바꿔야 합니다.
4. HTTP Request — youtube-transcript.io 호출
다음 노드는 이 두 값을 받아 youtube-transcript.io에 POST 요청을 보냅니다. 여기서 실제로 요청이 나가는 곳이 유튜브 서버가 아니라 제3의 서비스라는 점을 다시 짚어둘 필요가 있습니다. 유튜브 계정이나 유튜브 API 키가 아니라, 1번에서 만든 youtube-transcript.io 계정과 토큰이 이 워크플로우 전체를 움직이는 인증 수단입니다.
5. If·파싱·정제 — 응답을 쓸 수 있는 텍스트로
공식 설명은 이 구간을 "Parse(응답 형식 정규화)"와 "Clean(텍스트와 공백 정리)" 두 단계로 나눕니다. 노드 미리보기에 있는 If 노드는 이 사이 어딘가에서 응답이 정상인지 아닌지를 갈라내는 역할로 보입니다. 자막이 없는 영상이거나 토큰이 잘못됐을 때 뒤 노드가 그대로 도는 대신 다른 경로로 빠지게 하는 장치로 짐작할 수 있습니다.
6. 출력 — transcript, wordCount, charCount
마지막 Edit Fields(Set) 노드는 정제된 자막 텍스트와 함께 wordCount(단어 수), charCount(글자 수) 두 지표를 계산해 반환합니다. 자막 텍스트만 오는 게 아니라 길이 지표까지 같이 오기 때문에, 호출한 쪽 워크플로우에서 "자막이 너무 짧으면 요약을 건너뛴다" 같은 후속 조건을 바로 붙일 수 있습니다.
7. 상위 워크플로우에서 호출하기
이 서브워크플로우 자체는 여기서 끝나지만, 실제로 쓰려면 별도의 워크플로우를 하나 더 만들어야 합니다. 그 워크플로우에서 Execute Workflow 노드로 이 템플릿을 지정하고 youtubeVideoId와 apiToken을 넘기면, 이 서브워크플로우가 실행되고 자막 결과가 돌아옵니다. 여러 영상의 자막을 한 번에 처리하고 싶다면, 이 Execute Workflow 노드를 반복 호출하는 구조를 상위 워크플로우 쪽에 만들면 됩니다. 공식 활용 사례에 나온 "배치 자막 처리"가 바로 이런 구성입니다.
주의할 점 · 제약
공식 문서와 서비스 페이지에서 확인되는 제약을 정리하면 네 가지입니다.
- 유튜브 공식 API가 아니라 제3의 서비스 — 자막을 뽑는 주체가 youtube-transcript.io라는 외부 API 서비스입니다. 무료 요금제는 매달 25 토큰이고, 그 이상은 유료 요금제로 넘어갑니다(2026년 8월 기준, 공식 요금제 페이지). 서비스 자체가 요금제를 바꾸거나 운영을 중단하면 이 워크플로우도 함께 영향을 받습니다.
- API 속도 제한 — 10초에 5건으로 제한돼 있어서, 여러 영상을 한꺼번에 빠르게 돌리면 429 응답을 받을 수 있습니다(공식 API 문서).
- 서브워크플로우 전용 구조 — 이 템플릿 하나만 임포트해서는 아무 일도 일어나지 않습니다. 반드시 Execute Workflow 노드로 이 워크플로우를 호출하는 또 다른 워크플로우가 있어야 합니다.
- 공개 영상 대상 — 공식 설명에 "Any Public Video"라는 표현이 붙어 있는 것으로 보아, 비공개나 제한된 영상까지 다루는 구조는 아닌 것으로 보입니다. 또한
apiToken이 별도 크리덴셜이 아니라 워크플로우 입력값으로 그대로 흘러 들어오는 구조라서, 실행 로그나 다른 노드의 출력 화면에 토큰 값이 그대로 노출되지 않도록 주의할 필요가 있습니다.
포트폴리오·면접 포인트
포트폴리오에는 videoId 하나를 넣었을 때 자막 텍스트와 단어 수가 돌아오는 실행 화면 캡처와, 이 서브워크플로우를 부르는 상위 워크플로우(예: 자막을 요약해 슬랙으로 보내는 흐름) 캡처를 함께 넣으면 좋습니다. 서브워크플로우 하나를 여러 자동화에서 재사용했다는 그림이 그려지기 때문입니다.
면접에서는 "왜 자막 추출 로직을 따로 서브워크플로우로 뺐나요?" 같은 질문이 나올 수 있습니다. 답은 재사용성입니다. 블로그 자동화, 뉴스레터 재료 수집, SEO 인덱싱처럼 자막이 필요한 상위 워크플로우가 여러 개라면, 자막을 뽑는 로직을 워크플로우마다 반복 작성하는 대신 한 곳에 모아두고 필요할 때마다 호출하는 편이 유지보수 관점에서 낫다고 답할 수 있습니다.
데이터팝콘 자체 n8n 워크플로우 레시피 시리즈에도 유튜브 자막을 다루는 편이 있는데, 그쪽은 커뮤니티 노드가 막힌 환경에서 HTTP Request와 Code 노드로 자막 추출 로직을 직접 구현해 서브워크플로우로 만든 방식입니다. 반면 이 템플릿은 직접 구현 대신 youtube-transcript.io라는 외부 API 서비스에 요청 한 번을 보내는 훨씬 가벼운 방식입니다. 같은 "유튜브 자막을 서브워크플로우로 뽑는다"는 목표를 서로 다른 재료로 푸는 셈이라, 두 방식을 비교해보면 "언제 직접 구현하고 언제 외부 API에 맡길지"를 판단하는 기준을 면접 답변에 넣을 수 있습니다.
다음 액션
다음 편에서는 같은 마켓플레이스에 공개된, n8n 워크플로우 자체를 4시간마다 구글드라이브에 백업하는 템플릿을 다룹니다. 자막을 처리 대상으로 삼는 이번 편과 달리, n8n이 자기 자신의 운영 데이터를 다루는 메타적인 주제라서 서브워크플로우와는 또 다른 관점의 자동화 설계를 보게 됩니다.
