경계와 실패
남의 영상을 다루는 도구라 무엇이 나가는지 문서에 박아 뒀습니다. 그리고 안 되면 그냥 안 된다고 말합니다.
남의 영상을 다루는 도구라, 「무엇이 이 기계 밖으로 나가는가」가 기능 목록만큼 중요합니다. 그래서 문서에 박아 뒀습니다.
왜 이걸 적어 두나
이 도구는 남이 만든 영상을 다룹니다. 그러면 자연히 이런 질문이 생깁니다.
이 도구를 돌리면 무엇이 내 컴퓨터 밖으로 나가나?
이걸 코드를 읽어야 알 수 있게 두면, 실제로는 아무도 모릅니다. 그래서 문서에 명시적으로 적어 뒀습니다.
나가는 것과 안 나가는 것
| 상태 | |
|---|---|
| 영상 자체 | 어디에도 안 올라감 |
| 소리 | 자막이 없을 때만 나감. 그것도 음질을 낮춰 다시 만든 것 |
| 플랫폼 로그인 | 안 함 — 쿠키도, 글쓰기도, 구독도 없음 |
| 열쇠(API 키) | 제공자끼리 안 섞임 — 한쪽 키가 다른 쪽 주소로 갈 일 없음 |
| 열쇠를 기록에 | 안 씀 — 실수로 새는 경로를 아예 안 만듦 |
| 남는 파일 | 작업 폴더 밖으로 안 남김. 끝나면 치움 |
특히 중요한 두 줄
「로그인하지 않는다」 — 이건 기능을 포기한 것입니다. 로그인하면 비공개 영상도 볼 수 있습니다. 대신 제 계정으로 무슨 일이 일어날 수 있는 통로가 생깁니다.
그래서 공개된 것만, 공개된 방식으로 받습니다.
「열쇠를 기록에 안 쓴다」 — 이게 실질적으로 제일 중요합니다.
열쇠가 새는 흔한 경로는 해킹이 아니라 로그입니다. 문제를 찾으려고 「지금 상태를 전부 찍어 보자」 했는데, 거기에 열쇠가 같이 찍힙니다. 그리고 그 로그를 어딘가에 붙여넣습니다.
안 찍으면 그 사고가 구조적으로 불가능합니다.
준비 상태는 매번 확인하고, 되면 조용합니다
돌릴 때마다 필요한 도구가 깔려 있는지 먼저 봅니다.
그리고 다 있으면 아무 말도 안 하고 그냥 진행합니다.
이게 작은데 중요합니다. 「점검 완료」 「모두 정상」 같은 걸 매번 띄우면, 사람이 그 줄을 안 읽게 됩니다. 그러면 진짜 문제가 생긴 날에도 안 읽습니다.
잘 될 때 조용해야, 울릴 때 들립니다.
안 되면 「안 된다」고 말합니다
실패 처리에 규칙이 하나 있습니다. 재시도를 반복하지 않습니다.
왜냐면 — 반복 재시도는 실패를 「느림」으로 바꿉니다.
| 사용자가 보는 것 | |
|---|---|
| 바로 실패 알림 | 「안 됐구나」 — 다른 방법을 찾음 |
| 조용히 10번 재시도 | 「왜 이렇게 오래 걸리지」 — 기다림 |
그리고 10번 다 실패하면 10배 걸려서 같은 결과가 나옵니다. 기다린 시간만 날립니다.
긴 영상 경고를 «결과에» 남깁니다
이게 이 글에서 제일 값나가는 설계입니다.
10분이 넘으면 성기게 훑는다는 경고가 뜹니다. 그 경고를 기록에만 남기지 않고 «답변에 같이» 적게 했습니다.
차이가 큽니다.
| 어디에 적히나 | 결과 |
|---|---|
| 실행 기록에만 | 아무도 안 읽음. 나중에 이 분석을 쓰는 사람은 경고가 있었는지도 모름 |
| 답변 안에 | 이 분석을 읽는 사람이 반드시 봄 |
분석 결과는 혼자 걸어 다닙니다. 며칠 뒤에 그 결과만 보고 판단할 수도 있고, 남에게 넘길 수도 있습니다. 그때 「이건 성기게 본 결과다」가 같이 붙어 다녀야 합니다.
단서는 만들 때가 아니라 읽을 때 필요합니다. 그래서 결과물 안에 있어야 합니다.
여기부터는 자세한 기록입니다
이 도구는 남이 만든 영상을 다룬다. 그러면 “무엇이 이 기계 밖으로 나가는가”가 기능 목록만큼 중요해진다.
그래서 경계를 문서에 명시적으로 적어 뒀다. 코드를 읽지 않아도 알 수 있게.
나가는 것과 안 나가는 것
- 영상 자체는 어디에도 안 올라간다. 나가는 건 자막이 없을 때의 오디오뿐이고, 그것도 모노 16kHz로 다시 인코딩한 것이다.
- 어떤 플랫폼 계정에도 로그인하지 않는다. 세션 쿠키도, 글쓰기도, 구독도 없다. 공개된 것만 공개된 방식으로 받는다.
- 키는 제공자끼리 섞이지 않는다. 한쪽 키가 다른 쪽 주소로 가는 일이 없다.
- 키를 로그·출력·파일에 쓰지 않는다. 실수로 새는 경로를 아예 안 만든다.
- 작업 폴더와 설정 파일 밖으로는 아무것도 남기지 않는다. 끝나면 작업 폴더를 치운다.
이 목록이 길어 보이지만, 실은 하나만 지키면 나머지가 따라온다 — 필요한 최소한만 밖으로 보낸다. 영상 전체를 올려서 분석시키는 설계였다면 위의 다섯 줄이 전부 무의미해진다.
셋업은 매번 확인하고, 되면 조용하다
호출할 때마다 필요한 도구가 깔려 있는지 먼저 본다. 다 있으면 아무 말도 안 하고 그냥 진행한다.
앞에서 보는 이유는 하나다. 없는 상태로 절반쯤 가다 죽는 게 제일 나쁘다. 영상은 이미 받았고 프레임도 뽑았는데 받아쓰기에서 멈추면, 쓴 시간과 디스크는 그대로 날아간다. 앞에서 30초 확인하고 안 되면 안 시작하는 편이 훨씬 싸다.
그리고 실패했을 때 에러만 뱉지 않고 깔아야 할 명령을 찍어 준다. 여기서 사람이 검색하러 나가면 그 세션은 대개 안 돌아온다. “무엇이 없는지”와 “어떻게 넣는지”가 같은 화면에 있어야 한다.
안 되면 안 된다고 말한다
실패 처리에서 규칙이 하나 있다. 재시도를 반복하지 않는다.
- 로그인이 필요한 영상 — 그렇다고 말하고 멈춘다. 우회하지 않는다.
- 지역 차단 — 마찬가지다. 다른 경로를 찾지 않는다.
- 다운로드 실패 — 원본 도구가 낸 에러를 그대로 보여준다. 요약하거나 다듬지 않는다.
이 셋을 “실패했으니 다른 방법을 시도”로 처리하면 도구의 성격이 바뀐다. 접근할 수 있게 만들어진 것만 보는 도구와 접근을 뚫는 도구는 다른 물건이고, 앞의 것만 만들 생각이었다.
에러를 다듬지 않는 이유도 같다. 원본 메시지에는 “왜 안 됐는지”가 들어 있는데, 그걸 “영상을 가져오지 못했습니다”로 요약하면 다음에 뭘 해야 할지가 사라진다.
긴 영상 경고는 결과에 남긴다
10분을 넘기면 성기게 훑는다는 경고가 뜬다. 그 경고를 로그에만 남기지 않고 답변에 같이 적게 해 뒀다.
성기게 본 결과와 촘촘히 본 결과는 신뢰도가 다른데, 겉보기에는 똑같이 자신 있게 쓰여 있다. 그래서 얼마나 촘촘히 봤는지를 결과에 붙이는 게 이 도구가 할 수 있는 최소한의 정직함이다.
같은 이유로 대본이 없으면 “없음”이라고 적는다. 이 사이트에서 반복해 나오는 이야기와 같다 — 못 한 것을 안 적으면 안 한 게 아니라 안 보이는 것이 된다.