본문으로 건너뛰기
취준생을 위한 n8n 실전 워크플로우 레시피 · 28/44시리즈 보기 →

유튜브 새 영상, 키워드로 걸러서 알림받기 — RSS와 API 두 가지 방법

· 약 9분
Datapopcorn CEO / AI automation educator
이 글과 연결된 글 보기
7편 · 20개 연결
100%
n8n Data Table 처음 써보기 — 트렌드 3개를 합쳐 매일 아침 분석 주제 뽑는 워크플로우n8n으로 정적 웹서버 운영하기 — 수료증 발급부터 진위 확인까지, 멱등 처리로 안전하게벡터DB 없이 실시간으로 사이트를 읽는 챗봇 — 경복대학교 안내 챗봇 해부n8n으로 반복업무 자동화 포트폴리오 만들기구글시트에 쌓인 데이터를 인스타그램 카드뉴스로 — n8n 시트 인스타그램 자동발행서브워크플로우를 Tool로 감싸 AI Agent에게 서버 점검시키기 — 그리고 시스템 프롬프트만으로는 부족한 이유유튜브 새 영상, 키워드로 걸러서 알림받기 — RSS와 API 두 가지 방법

드래그로 이동 · 휠/두 손가락으로 확대 · 방향키로 글 선택 · 0으로 맞춤. 실선: 본문 링크, 점선: 시리즈·주제의 대표 연결.

표시된 글 7편 목록
전체 글 연결 탐색

유튜브에 새 영상이 올라온 걸 알림으로 받는 방법은 두 가지입니다. 관심 채널을 구독하듯 RSS로 받는 무료 방법과, 키워드로 검색해 조건에 맞는 영상만 걸러내는 YouTube Data API 방법입니다. n8n으로 두 방식을 각각 만들어보면 겉으로는 둘 다 "새 영상 알림"이지만 할 수 있는 일과 비용 구조가 다르다는 게 분명해지고, 그 차이가 곧 어느 쪽을 언제 써야 하는지에 대한 답이 됩니다.

이 워크플로우 하나로 보여줄 수 있는 것​

"유튜브 알림 만들었어요"라는 한 문장 뒤에는 사실 서로 다른 두 가지 역량이 숨어 있습니다.

  • RSS 폴링 트리거 — API 키도 credential도 없이, 정해진 형식의 URL만으로 외부 서비스의 변화를 감지하는 경험
  • REST API 직접 호출 — 공식 노드 없이 HTTP Request로 쿼리 파라미터를 조립하고 인증을 credential로 분리하는 경험
  • 페이지네이션 설계 — 응답에 다음 페이지 토큰이 있으면 한 번 더 호출하는 반복 로직을 짜는 경험
  • 도구 선택 근거 — "왜 이걸 API로 만들었나요"라는 질문에 quota·검색 가능 여부로 답할 수 있는 판단력

이 중 마지막이 실무에서 더 중요합니다. 자동화는 항상 "더 강력한 도구"가 답이 아니라, 문제에 맞는 도구를 고르는 일이기 때문입니다. 관심 채널이 정해져 있다면 RSS로 충분하고, 여러 채널에 흩어진 "n8n"이라는 키워드를 찾아야 한다면 RSS로는 애초에 불가능합니다.

배경 — 채널은 구독했는데, 키워드는 어떻게 찾죠​

이 시리즈 앞선 편에서는 유튜브 영상의 자막을 뽑아 정리하는 서브워크플로우와, 구글 뉴스 RSS로 매일 아침 기사를 모으는 워크플로우를 다뤘습니다. 두 편 모두 "이미 무엇을 볼지 정해진 소스"를 다루는 흐름이었습니다. 그런데 관심사가 특정 채널이 아니라 특정 키워드일 때는 이야기가 달라집니다. "n8n"이라는 단어가 들어간 영상이 어느 채널에서 올라올지는 아무도 미리 알 수 없고, 그렇다고 유튜브에 매일 들어가 검색창에 키워드를 치는 건 사람이 할 일이 아닙니다.

이 글은 데이터팝콘 n8n 인스턴스에 있는 워크플로우 두 개를 나란히 뜯어봅니다. 하나는 RSS 피드로 지정한 채널의 신규 영상을 감지하고 같은 캔버스 안에 키워드 검색용 HTTP Request 파이프라인도 같이 둔 워크플로우, 다른 하나는 n8n 내장 YouTube 노드로 같은 키워드를 검색하는 워크플로우입니다. n8n 설치나 기본 노드 조작법은 n8n으로 반복업무 자동화 포트폴리오 만들기에 정리돼 있으니, 이 글에서는 두 워크플로우 자체만 다룹니다.

구조 — Trigger / Task / Target​

RSS 경로 — 채널 구독형​

  • Trigger — 관심 채널 하나당 RSS 피드를 1분 간격으로 폴링
  • Task — 피드가 이미 준 제목·링크·발행일을 그대로 사용 (별도 변환 노드가 필요 없습니다)
  • Target — Discord 채널 또는 Slack 채널

API 경로 — 키워드 검색형​

  • Trigger — 스케줄(원본은 매시 30분, 또 다른 원본은 매일 아침 한 번)
  • Task — 키워드·기간 조립 → 검색 API 호출 → 다음 페이지 토큰 확인 → 중복 제거
  • Target — 구글시트 기록, Discord/Slack 알림

만들기​

1. RSS로 채널 구독 알림 만들기​

RSS Feed Trigger 노드의 Feed URL에 https://www.youtube.com/feeds/videos.xml?channel_id=<채널ID> 형식의 주소를 넣으면 끝입니다. 채널 ID는 해당 채널 페이지의 정보에서 확인할 수 있고, API 키나 credential은 전혀 필요하지 않습니다. Poll Times를 Every Minute로 두면 1분 간격으로 피드를 확인합니다.

원본에는 관심 채널 세 개를 각각 이 방식으로 모니터링합니다. 그중 두 채널은 같은 알림 파이프라인(Discord + Slack)으로 합쳐져 있고, 나머지 하나는 별도 Discord 채널로 보내도록 나뉘어 있습니다. 여러 채널을 모니터링하고 싶으면 RSS Feed Trigger를 채널 수만큼 늘리기만 하면 되고, 서로 다른 알림 노드에 연결해 채널별로 알림 목적지를 갈라도 됩니다.

알림 메시지는 트리거가 준 필드를 바로 조합합니다.

={{ $json.pubDate.toDateTime().setZone('Asia/Seoul').format('yyyy-MM-dd T') }}
[{{ $json.title }}]({{ $json.link }})

RSS 피드가 이미 제목·링크·발행일을 정리해 주기 때문에, 이 노드 하나로 알림 문구가 완성됩니다. 여기까지가 "채널을 안다면" 가장 가벼운 방법입니다.

2. API로 키워드 검색 알림 만들기​

키워드 검색은 RSS로는 아예 불가능합니다. YouTube Data API의 search.list를 호출해야 하고, 이때 API 키가 필요합니다. Google Cloud 콘솔에서 YouTube Data API v3를 활성화하고 키를 발급받은 뒤, n8n에는 이 키를 URL에 직접 적지 않습니다. Generic Credential Type을 Query Auth로 만들어 파라미터 이름을 key, 값을 발급받은 키로 넣으면 n8n이 매 요청마다 이 값을 붙여줍니다.

HTTP Request 노드의 쿼리 파라미터는 다음과 같이 구성합니다.

GET https://www.googleapis.com/youtube/v3/search
?part=snippet&type=video&q="n8n"&order=date&maxResults=50
&key={API_KEY}&regionCode=KR&relevanceLanguage=ko
&publishedAfter={{ $json.yesterday }}&publishedBefore={{ $json.today }}
&videoDuration=medium

publishedAfter·publishedBefore는 별도 Set 노드에서 만듭니다. 원본은 이렇게 계산합니다.

today: {{ $now.toDateTime().setZone('Asia/Seoul') }}
yesterday: {{ $now.minus(1,'days').toDateTime().setZone('Asia/Seoul') }}

videoDuration은 medium(4~20분)과 long(20분 이상) 중 하나만 지정할 수 있는 파라미터라, 두 길이를 다 보려면 같은 요청을 videoDuration 값만 바꿔 두 번 보내야 합니다. 원본도 이 두 호출을 병렬로 두고 결과를 나중에 합칩니다.

3. 페이지네이션 — 다음 페이지 부르기​

search.list 응답에는 결과가 더 있을 때 nextPageToken 필드가 함께 옵니다. 이 값이 있으면 IF 노드로 분기해 같은 요청을 pageToken 파라미터에 그 값을 넣어 한 번 더 보내면 다음 50개를 받아올 수 있습니다. 이게 표준 패턴이고, 두 원본 모두 이 구조를 시도한 흔적이 있습니다. 다만 실제로 완성된 형태는 아니었는데, 자세한 내용은 아래에서 다룹니다.

4. 한국어 제목만 남기기 — 없는 필터를 채워 넣기​

두 번째 원본 워크플로우의 이름은 "Korean Title Filter"지만, 실제로 제목을 검사하는 Filter나 IF 노드는 없었습니다. 이름값을 하려면 검색 결과 뒤에 Filter 노드를 하나 추가하면 됩니다.

  • 왼쪽 값: {{ $json.title }}
  • 연산자: String → Matches Regex
  • 오른쪽 값: [가-힣]

한글 유니코드 범위가 제목에 하나라도 있으면 통과시키는 조건입니다. q 파라미터의 키워드 검색과 이 필터는 역할이 다릅니다. 키워드는 "n8n이 들어간 영상"을 찾고, 이 필터는 그중 "제목이 한국어인 것"만 한 번 더 걸러냅니다.

5. 중복 제거와 전달​

같은 영상이 medium·long 검색에 동시에 걸리거나 여러 날에 걸쳐 반복 조회될 수 있어서, Remove Duplicates 노드로 한 번 걸러줍니다. 원본은 시트에 적재할 때 매칭 컬럼(link 또는 videoId)을 기준으로 Append or Update를 씁니다. 마지막은 Discord나 Slack으로 결과를 보내면 됩니다.

원본 캔버스에 남아 있는 흔적​

두 원본 모두 실행 이력이 없는 비활성(inactive) 상태라 "실제로 돌려보니" 대신, JSON에 남은 흔적을 그대로 옮깁니다.

첫 번째 원본의 페이지네이션 분기 IF 노드는 {{ $json.pageToken }}이 존재하는지를 검사합니다. 그런데 유튜브 검색 API가 실제로 응답에 담아 주는 필드명은 nextPageToken입니다. 다음 페이지 호출 노드 자체는 {{ $json.nextPageToken }}을 정확히 참조하는데, 그 앞의 분기 조건은 존재하지 않는 필드를 검사하고 있는 셈입니다. 두 번째 원본의 페이지네이션 처리 Code 노드는 아예 주석으로 미완성임을 밝혀 둡니다. "For now, we'll return the current items with the token information"라고 적고, 실제 재호출 없이 hasMorePages·needsPagination 플래그만 반환합니다. 두 원본 모두 페이지네이션이 절반만 지어진 채로 남아 있는 셈입니다.

두 번째 원본에는 또 다른 흔적이 있습니다. 이름이 medium인 검색 노드와 long인 검색 노드가 나란히 있는데, connections를 보면 medium 노드는 입력도 출력도 어디에도 연결돼 있지 않습니다. 내장 YouTube 노드 중 실제로 실행되는 건 long 쪽 하나뿐입니다. 게다가 두 노드의 필터 파라미터를 비교해 보면 publishedAfter와 q만 있고 길이를 구분하는 값 자체가 없어서, 설령 두 노드가 다 연결돼 있었더라도 같은 결과를 두 번 가져왔을 가능성이 있습니다. 노드 이름이 "medium"·"long"이라고 해서 실제 동작까지 그렇다고 단정할 수 없다는 걸 보여주는 사례입니다.

첫 번째 원본의 스티키 노트에는 "영어 & 대한민국 콘텐츠만 가져오기"라는 TODO가 남아 있는데, 실제 쿼리 파라미터를 보면 첫 페이지 호출은 regionCode=KR, 다음 페이지 호출은 regionCode=US로 서로 다른 값을 쓰고 있어 이 TODO도 완전히 해결되지는 않은 상태로 보입니다.

한계​

  1. API에는 쓸 수 있는 만큼의 한도가 있습니다 — YouTube Data API의 search.list는 별도 quota 버킷을 쓰고, 2026년 8월 기준 공식 문서에 따르면 새 프로젝트의 기본 한도는 하루 100회입니다. medium·long을 각각 매시간 부른다면 하루 안에 이 한도에 닿을 수 있으니, 스케줄 간격을 넉넉히 잡거나 필요한 시간대에만 돌리는 조정이 필요합니다. RSS는 이런 한도 자체가 없습니다.
  2. RSS는 채널 전용입니다 — 채널 ID를 모르면 애초에 구독할 수 없고, 여러 채널을 가로지르는 키워드 검색은 RSS 규격에 없는 기능입니다. "n8n이라는 단어가 들어간 영상 전부"를 원한다면 API 말고는 방법이 없습니다.
  3. 페이지네이션은 직접 완성해야 합니다 — 위에서 본 대로 두 원본 모두 다음 페이지를 실제로 불러오는 로직이 비어 있습니다. 하루에 검색 결과가 50개를 넘지 않는다면 지금 상태로도 문제가 드러나지 않지만, 검색량이 늘어나는 순간 결과가 조용히 잘려 나갑니다.

포트폴리오·면접 포인트​

이 워크플로우 두 개를 함께 뜯어본 경험 자체가 포트폴리오 소재입니다. "이름이 Korean Title Filter인데 실제로는 필터가 없더라"거나 "IF 노드가 존재하지 않는 필드를 검사하고 있더라" 같은 발견은 노드를 따라 만드는 것보다 한 단계 위의 역량, 즉 워크플로우를 읽고 검증하는 능력을 보여줍니다.

면접에서 "왜 RSS 말고 API를 썼나요"라는 질문을 받으면 "더 강력해서"가 아니라 "채널이 아니라 키워드가 기준이라서 RSS로는 불가능했다"고 답할 수 있어야 합니다. 반대로 "왜 API 대신 RSS를 골랐나요"라는 질문에는 "채널이 정해져 있으면 quota도 credential도 필요 없는 RSS가 더 가볍다"고 답하면 됩니다. 두 질문에 다 답할 수 있다는 건 도구를 안다는 뜻이 아니라 문제를 안다는 뜻이고, 그게 면접에서 더 좋은 인상을 남깁니다.

다음 액션​

같은 "관심사를 걸러서 알림으로" 구조는 플랫폼만 바꾸면 그대로 이어집니다. 다음 편은 레딧의 인기 게시글을 매일 슬랙으로 받아보는 워크플로우입니다. 유튜브의 채널·키워드 자리에 레딧의 서브레딧·정렬 기준이 들어가는 정도의 차이라, 이 글에서 정리한 "구독으로 충분한가, 검색이 필요한가"라는 판단 기준을 그대로 가져가 쓸 수 있습니다.