자동화 파이프라인7 분 읽기

채널을 하나 늘리자 비밀 파일도 하나 늘어나고 있었다

개발 블로그 글을 영상으로 올리려고 한국어·영어 유튜브 채널용 파이프라인을 만들었습니다. 브랜딩, 업로드, 분석 스크립트 세 개보다 먼저 손봐야 했던 건 .gitignore 한 줄이었습니다. 채널 수만큼 토큰 파일이 생기는 구조라 이름 하나를 막는 걸로는 부족했습니다.

#youtube#gitignore#oauth#secrets#pipeline
왼쪽은 토큰 파일 이름 하나만 적힌 .gitignore와 채널이 늘면서 그 아래에 쌓이는 새 토큰 파일들, 오른쪽은 yt_token*.json 패턴 한 줄이 모든 토큰 파일을 덮는 그림
채널을 하나 추가할 때마다 비밀 파일도 하나씩 늘어나는 구조였습니다.

채널 두 개, 스크립트 세 개

개발 블로그 글을 영상으로도 올리기로 했습니다. 채널은 한국어와 영어 두 개입니다. 커밋 하나에 파일 네 개, 226줄을 넣었습니다.

  • devlog_channel.py — 채널 브랜딩을 API로 설정합니다. ko/en 채널별로 따로 적용합니다.
  • devlog_upload.py — mp4와 메타데이터를 올리고, 블로그 글 링크를 첫 댓글로 답니다.
  • devlog_analytics.py — 이 채널들의 영상별 조회수, 시청 지속률, 구독자 변화를 가져옵니다.
  • .gitignore — yt_token*.json 와일드카드 한 줄.

스크립트 세 개는 예상했던 작업입니다. 이 글은 네 번째 줄 이야기입니다. 먼저 하나 여쭤보겠습니다. 지금 쓰시는 .gitignore는 이미 있는 비밀 파일의 이름을 막고 있습니까, 아니면 앞으로 생길 비밀 파일의 이름까지 막고 있습니까?

영상만 늘어나는 게 아니었습니다

유튜브 Data API는 OAuth 토큰으로 움직이고, 토큰은 채널 단위로 따로 받습니다. 채널이 하나일 때는 토큰 파일도 하나라서 그 파일 이름 하나만 무시 목록에 넣어도 충분해 보입니다.

그런데 채널을 늘리면 토큰 파일도 같이 늘어납니다. 한국어 채널, 영어 채널, 그리고 그전부터 쓰던 채널까지 전부 yt_token으로 시작하는 파일이 됩니다. 파일 이름이 정확히 하나만 적혀 있었다면 새로 생긴 토큰 파일은 무시 목록에 없습니다. 그 상태로 git add .를 한 번만 쳐도 새 토큰이 스테이징에 올라갑니다.

이 문제가 까다로운 건 아무것도 실패하지 않는다는 점입니다. 업로드는 잘 되고, 브랜딩도 적용되고, 분석도 숫자를 가져옵니다. 파이프라인이 다 초록불인 동안 커밋 대상에 비밀 파일이 하나 더 끼어 있을 수 있습니다.

당신이라면?

새 채널을 추가할 때마다 .gitignore에 파일 이름을 한 줄씩 더하시겠습니까, 아니면 이름 규칙을 정해 놓고 패턴 하나로 막으시겠습니까?

이름을 막지 않고 규칙을 막았습니다

저는 패턴으로 막았습니다. 토큰 파일 이름은 전부 yt_token으로 시작하게 하고, .gitignore에는 yt_token*.json 한 줄을 넣었습니다. 이러면 채널이 셋이 되든 다섯이 되든 이 규칙만 지키면 됩니다.

이 방식에도 전제가 두 가지 있습니다.

첫째, 이름 규칙이 깨지면 소용이 없습니다. 누군가(대개 몇 달 뒤의 저) 토큰 파일을 token_en.json처럼 저장하면 패턴에 걸리지 않습니다. 와일드카드는 규칙을 지킬 때만 작동합니다.

둘째, .gitignore는 이미 추적 중인 파일에는 효과가 없습니다. 예전에 토큰 파일이 한 번이라도 커밋된 적이 있다면 무시 목록에 넣어도 계속 추적됩니다. 그때는 git rm --cached로 추적을 끊고 토큰을 다시 발급해야 합니다.

나머지 두 가지도 같은 생각으로 짰습니다

브랜딩을 스튜디오 화면에서 손으로 하지 않고 API 스크립트로 만든 이유도 채널이 두 개이기 때문입니다. 손으로 하면 두 채널 설정이 조금씩 어긋나기 쉽고, 코드로 두면 ko와 en 설정이 같은 절차를 거칩니다.

블로그 링크를 첫 댓글로 다는 작업도 업로드 스크립트에 넣었습니다. 영상을 올린 뒤에 따로 하는 일로 남겨 두면 언젠가 빠지기 때문입니다.

분석 스크립트는 업로드와 같은 커밋에 넣었습니다. 영상이 올라가기 시작한 뒤에 측정 코드를 만들면 처음 며칠은 숫자가 없는 상태로 지나가기 쉽습니다.

자가진단 체크리스트

  • 계정이나 채널을 하나 더 붙이면 비밀 파일이 하나 더 생기는 구조입니까? 그렇다면 .gitignore가 파일 이름이 아니라 이름 규칙을 막고 있는지 확인해 보세요.
  • git ls-files | grep -i token을 돌렸을 때 아무것도 나오지 않습니까? 이미 추적 중인 파일은 .gitignore로 빠지지 않습니다.
  • 새 비밀 파일을 만드는 코드가 이름 규칙을 강제합니까, 아니면 사람이 그때그때 이름을 정합니까?

솔직한 부분

이 커밋에 남은 건 와일드카드를 넣었다는 사실뿐입니다. 그전 .gitignore에 토큰 파일 이름이 정확히 한 줄로 적혀 있었는지, 토큰이 실제로 커밋될 뻔한 적이 있었는지는 기록에 없습니다. 그래서 이 글의 위험 시나리오는 실제로 겪은 사고가 아니라 이 구조에서 생길 수 있는 일입니다. 분석 스크립트도 이 시점에는 만들어 놓기만 했고, 이 두 채널의 조회수나 시청 지속률이 어떻게 나왔는지는 이 소재에 없습니다. 브랜딩 API가 스튜디오 설정을 전부 대신할 수 있는지도 확인하지 않았습니다.

관련 글