# 경계와 실패

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

- 수치: 밖으로 0
- 상태: wip
- 사람이 보는 화면: https://aitryed.com/ko/built/watch/boundary/
- 반대 언어: https://aitryed.com/en/built/watch/boundary/index.md
- 이 사이트 안내(AI용): https://aitryed.com/ko/llms.txt

---

**남의 영상을 다루는 도구라, 「무엇이 이 기계 밖으로 나가는가」가 기능 목록만큼 중요합니다. 그래서 문서에 박아 뒀습니다.**

## 왜 이걸 적어 두나

이 도구는 **남이 만든 영상**을 다룹니다. 그러면 자연히 이런 질문이 생깁니다.

> **이 도구를 돌리면 무엇이 내 컴퓨터 밖으로 나가나?**

이걸 **코드를 읽어야 알 수 있게** 두면, 실제로는 아무도 모릅니다. 그래서 **문서에 명시적으로** 적어 뒀습니다.

## 나가는 것과 안 나가는 것

| | 상태 |
|---|---|
| **영상 자체** | **어디에도 안 올라감** |
| 소리 | **자막이 없을 때만** 나감. 그것도 **음질을 낮춰 다시 만든 것** |
| 플랫폼 로그인 | **안 함** — 쿠키도, 글쓰기도, 구독도 없음 |
| 열쇠(API 키) | **제공자끼리 안 섞임** — 한쪽 키가 다른 쪽 주소로 갈 일 없음 |
| 열쇠를 기록에 | **안 씀** — 실수로 새는 경로를 **아예 안 만듦** |
| 남는 파일 | **작업 폴더 밖으로 안 남김.** 끝나면 치움 |

## 특히 중요한 두 줄

**「로그인하지 않는다」** — 이건 기능을 포기한 것입니다. 로그인하면 비공개 영상도 볼 수 있습니다. 대신 **제 계정으로 무슨 일이 일어날 수 있는 통로**가 생깁니다.

그래서 **공개된 것만, 공개된 방식으로** 받습니다.

**「열쇠를 기록에 안 쓴다」** — 이게 실질적으로 제일 중요합니다.

열쇠가 새는 흔한 경로는 **해킹이 아니라 로그**입니다. 문제를 찾으려고 「지금 상태를 전부 찍어 보자」 했는데, **거기에 열쇠가 같이 찍힙니다.** 그리고 그 로그를 어딘가에 붙여넣습니다.

**안 찍으면 그 사고가 구조적으로 불가능합니다.**

## 준비 상태는 매번 확인하고, 되면 조용합니다

돌릴 때마다 **필요한 도구가 깔려 있는지** 먼저 봅니다.

그리고 **다 있으면 아무 말도 안 하고** 그냥 진행합니다.

이게 작은데 중요합니다. 「점검 완료」 「모두 정상」 같은 걸 매번 띄우면, **사람이 그 줄을 안 읽게** 됩니다. 그러면 **진짜 문제가 생긴 날에도 안 읽습니다.**

> **잘 될 때 조용해야, 울릴 때 들립니다.**

## 안 되면 「안 된다」고 말합니다

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

왜냐면 — **반복 재시도는 실패를 「느림」으로 바꿉니다.**

| | 사용자가 보는 것 |
|---|---|
| 바로 실패 알림 | **「안 됐구나」** — 다른 방법을 찾음 |
| 조용히 10번 재시도 | **「왜 이렇게 오래 걸리지」** — 기다림 |

그리고 10번 다 실패하면 **10배 걸려서 같은 결과**가 나옵니다. 기다린 시간만 날립니다.

## 긴 영상 경고를 «결과에» 남깁니다

이게 이 글에서 제일 값나가는 설계입니다.

10분이 넘으면 **성기게 훑는다는 경고**가 뜹니다. 그 경고를 **기록에만 남기지 않고 «답변에 같이»** 적게 했습니다.

차이가 큽니다.

| 어디에 적히나 | 결과 |
|---|---|
| 실행 기록에만 | **아무도 안 읽음.** 나중에 이 분석을 쓰는 사람은 **경고가 있었는지도 모름** |
| **답변 안에** | **이 분석을 읽는 사람이 반드시 봄** |

분석 결과는 **혼자 걸어 다닙니다.** 며칠 뒤에 그 결과만 보고 판단할 수도 있고, 남에게 넘길 수도 있습니다. 그때 **「이건 성기게 본 결과다」가 같이 붙어 다녀야** 합니다.

**단서는 만들 때가 아니라 읽을 때 필요합니다.** 그래서 결과물 안에 있어야 합니다.

## 여기부터는 자세한 기록입니다

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

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

## 나가는 것과 안 나가는 것

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

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

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

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

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

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

## 안 되면 안 된다고 말한다

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

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

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

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

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

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

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

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