큐는 하나였고, 채널도 하나였습니다
영상 파이프라인은 한국어만 알고 있었습니다. 렌더 훅은 폰트를 하나만 참조했고, 업로드 스크립트는 토큰 파일을 하나만 열었고, 게시 큐도 하나였습니다. 언어를 늘리는 일은 큐 파일을 하나 더 만드는 일이라고 생각했습니다.
아니었습니다. 언어를 붙이자 파이프라인의 거의 모든 단계가 '언어'라는 인자를 요구했습니다. 렌더에서는 폰트, 메타 생성에서는 제목과 설명, 업로드에서는 어떤 채널의 토큰을 쓸지, 스케줄러에서는 몇 번을 도는지. 한 군데라도 언어가 전달되지 않으면 파이프라인은 멈추지 않고, 그냥 조용히 이상한 결과물을 냅니다.
질문 하나 드립니다. 당신의 파이프라인에서 '언어'라는 값은 어느 단계까지 전달되고, 어느 단계부터 하드코딩된 기본값으로 바뀝니까?
가장 먼저 걸린 건 폰트였습니다. 한 언어만 쓸 때는 폰트 상수 하나면 충분했습니다. 일본어를 렌더하려면 가나와 한자를 그릴 수 있는 폰트가 필요합니다. 그래서 FONTS를 언어로 분기했습니다. ja는 Hiragino 마루고딕, zh는 PingFang, ASCII 경로는 그대로 복사해 두고 설정의 lang 값으로 고릅니다. 그리고 실제 일본어 렌더를 돌려 가나와 한자가 깨지지 않고 나오는지 눈으로 확인했습니다. 폰트 분기는 코드가 통과한다고 검증되는 종류의 변경이 아닙니다. 화면에 글자가 나와야 검증됩니다.
진짜 병목은 폰트가 아니라 신원이었습니다
업로드 쪽은 더 깊었습니다. 채널이 여러 개라는 건 자격증명이 여러 개라는 뜻입니다. 서비스 객체를 만드는 함수가 토큰 경로를 받도록 바꾸고, 메타 생성 함수는 ko/en/ja 문구를 언어별로 만들도록 바꿨습니다. 일일 게시 스크립트에는 --lang 옵션을 붙여 채널별 토큰과 채널별 큐를 물고 도는 루프로 만들었습니다. 재인증도 마찬가지라 인증 점검 스크립트에도 --lang을 붙여 채널 단위로 다시 받게 했습니다.
여기서 결정해야 할 게 하나 남습니다. 어떤 언어의 토큰이 아직 없을 때 어떻게 할 것인가.
당신이라면 토큰 없는 언어를 만났을 때 전체를 실패시키겠습니까, 그 언어만 건너뛰겠습니까?
저는 스킵을 골랐습니다. 토큰이 없으면 그 언어는 조용히 넘어가고 나머지는 그대로 올라갑니다. 한 채널의 인증 만료가 전체 게시를 막는 게 더 나쁘다고 봤기 때문입니다. 그런데 이 선택은 예상하지 못한 성질을 하나 만들었습니다. 기존 launchd 잡은 이미 --lang all로 돌고 있습니다. 지금은 en/ja 토큰이 없으니 매일 스킵합니다. 토큰 파일이 생기는 순간, 저는 코드도 스케줄도 손대지 않았는데 그날부터 예약 작업이 세 채널에 게시를 시작합니다.
즉 게시 범위를 정하는 건 코드가 아니라 디스크에 있는 파일입니다. OAuth 런북에 다국어 섹션을 따로 쓴 이유가 이겁니다. 채널을 만들고 인증을 받는 절차는 문서가 아니라 배포 트리거이기 때문입니다.
자가진단 체크리스트
- 언어 인자가 렌더·메타·업로드·스케줄러 중 어느 단계에서 기본값으로 바뀌는지 코드에서 짚을 수 있습니까?
- 자격증명이 없을 때의 동작이 실패인지 스킵인지 명시되어 있고, 그 선택을 누가 볼 수 있습니까?
- 파일 하나가 생기는 것만으로 이미 돌고 있는 예약 작업의 동작 범위가 바뀌는 지점이 있습니까?
솔직한 부분
aen/ja 채널은 아직 토큰이 없습니다. 그래서 다채널 게시 경로는 실제로 한 번도 끝까지 돌지 않았습니다. 지금 있는 건 시드 큐 두 개(animalface, zodiac)와 스킵되는 루프뿐입니다. zh는 폰트 분기만 있고 큐도 채널도 없습니다. 언어별 메타가 실제 시청자에게 어떻게 보이는지, 언어별 채널이 각자 다른 성과를 낼지는 전혀 모릅니다. 지금 검증된 것은 일본어 글자가 프레임에 정상적으로 그려진다는 것, 그리고 토큰 없는 언어가 전체를 무너뜨리지 않는다는 것 두 가지뿐입니다.