만든 것진행 중

경계와 실패

남의 영상을 다루는 도구라 무엇이 나가는지 문서에 박아 뒀습니다. 그리고 안 되면 그냥 안 된다고 말합니다.

밖으로 0

이 도구는 남이 만든 영상을 다룬다. 그러면 “무엇이 이 기계 밖으로 나가는가”가 기능 목록만큼 중요해진다.

그래서 경계를 문서에 명시적으로 적어 뒀다. 코드를 읽지 않아도 알 수 있게.

나가는 것과 안 나가는 것

  • 영상 자체는 어디에도 안 올라간다. 나가는 건 자막이 없을 때의 오디오뿐이고, 그것도 모노 16kHz로 다시 인코딩한 것이다.
  • 어떤 플랫폼 계정에도 로그인하지 않는다. 세션 쿠키도, 글쓰기도, 구독도 없다. 공개된 것만 공개된 방식으로 받는다.
  • 키는 제공자끼리 섞이지 않는다. 한쪽 키가 다른 쪽 주소로 가는 일이 없다.
  • 키를 로그·출력·파일에 쓰지 않는다. 실수로 새는 경로를 아예 안 만든다.
  • 작업 폴더와 설정 파일 밖으로는 아무것도 남기지 않는다. 끝나면 작업 폴더를 치운다.

이 목록이 길어 보이지만, 실은 하나만 지키면 나머지가 따라온다 — 필요한 최소한만 밖으로 보낸다. 영상 전체를 올려서 분석시키는 설계였다면 위의 다섯 줄이 전부 무의미해진다.

셋업은 매번 확인하고, 되면 조용하다

호출할 때마다 필요한 도구가 깔려 있는지 먼저 본다. 다 있으면 아무 말도 안 하고 그냥 진행한다.

앞에서 보는 이유는 하나다. 없는 상태로 절반쯤 가다 죽는 게 제일 나쁘다. 영상은 이미 받았고 프레임도 뽑았는데 받아쓰기에서 멈추면, 쓴 시간과 디스크는 그대로 날아간다. 앞에서 30초 확인하고 안 되면 안 시작하는 편이 훨씬 싸다.

그리고 실패했을 때 에러만 뱉지 않고 깔아야 할 명령을 찍어 준다. 여기서 사람이 검색하러 나가면 그 세션은 대개 안 돌아온다. “무엇이 없는지”와 “어떻게 넣는지”가 같은 화면에 있어야 한다.

안 되면 안 된다고 말한다

실패 처리에서 규칙이 하나 있다. 재시도를 반복하지 않는다.

  • 로그인이 필요한 영상 — 그렇다고 말하고 멈춘다. 우회하지 않는다.
  • 지역 차단 — 마찬가지다. 다른 경로를 찾지 않는다.
  • 다운로드 실패 — 원본 도구가 낸 에러를 그대로 보여준다. 요약하거나 다듬지 않는다.

이 셋을 “실패했으니 다른 방법을 시도”로 처리하면 도구의 성격이 바뀐다. 접근할 수 있게 만들어진 것만 보는 도구와 접근을 뚫는 도구는 다른 물건이고, 앞의 것만 만들 생각이었다.

에러를 다듬지 않는 이유도 같다. 원본 메시지에는 “왜 안 됐는지”가 들어 있는데, 그걸 “영상을 가져오지 못했습니다”로 요약하면 다음에 뭘 해야 할지가 사라진다.

긴 영상 경고는 결과에 남긴다

10분을 넘기면 성기게 훑는다는 경고가 뜬다. 그 경고를 로그에만 남기지 않고 답변에 같이 적게 해 뒀다.

성기게 본 결과와 촘촘히 본 결과는 신뢰도가 다른데, 겉보기에는 똑같이 자신 있게 쓰여 있다. 그래서 얼마나 촘촘히 봤는지를 결과에 붙이는 게 이 도구가 할 수 있는 최소한의 정직함이다.

같은 이유로 대본이 없으면 “없음”이라고 적는다. 이 사이트에서 반복해 나오는 이야기와 같다 — 못 한 것을 안 적으면 안 한 게 아니라 안 보이는 것이 된다.