본문 바로가기
C.W.K.
Stream
Lesson 03 of 05 · published

들을 땐 보이게, 끝나면 잊게

~11 min · retention, privacy, opt-in, history

Level 0불씨 없음
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"앱은 듣는 동안엔 잊을 수 없어야 하고, 멈추는 순간 스스로 잊어야 해."

한 약속의 두 반쪽

신뢰 계약엔 상관없어 보이는데 사실 같은 생각인 두 반쪽이 있어. 들을 땐 보이게. 마이크가 살아 있는 동안엔 놓칠 수 없는 표시가 떠. 파형이 움직이는 알약 모양 오버레이. 메뉴바 색이 살짝 바뀌는 정도가 아니라 눈에 확 걸리는 걸로. 끝나면 잊게. 받아쓰기가 끝나면 오디오는 기본으로 버려져. 둘이 같이 이렇게 말해. 언제 널 듣는지 늘 알 수 있고, 들은 건 안 쥐고 있어.

파형이 중요한 이유

라이브 파형은 장식이 아니야. 가만히 떠 있는 '녹음 중' 라벨은 거짓말을 할 수 있어. 아무것도 녹음 안 하는데 떠 있을 수도 있고, 더 나쁘게는 뭔가 녹음 중인데 안 떠 있을 수도 있고. 네 목소리에 맞춰 움직이는 파형은 증거야. 실제 캡처 탭에서 나오니까 오디오가 진짜로 흐를 때만 움직일 수 있거든. 표시기가 자기가 표시하는 것에 붙어 있는 거지. 주장을 시연으로 바꿔 놓는 작은 설계 선택이야.

잊기와 잃기 사이의 긴장

'전부 버리기' 는 진짜 필요랑 부딪혀. STT 나 정리가 실패했는데 오디오를 버리면 유저 단어가 영영 사라지잖아. Firekeeper 는 한쪽을 고르는 대신 이걸 의도적으로 풀어.

성공한 받아쓰기   -> 오디오 버림 (기본)
STT 실패          -> 오디오를 recovery-audio/ 로 옮김, 10개로 정리
정리 실패         -> 원시 전사가 이미 상태에 있음; 단어 절대 안 잃음
디스크 히스토리   -> 옵트인만

# 기본은 잊기. 실패 시에만, 짧게, 제한적으로 보존.

원시 전사가 정리가 돌기 전에 상태로 들어가. 그래서 정리가 실패해도 네 문장을 먹을 수가 없어. 복구 오디오는 실패한 경우에만 생기고, 개수에 상한이 있고, 돌아가면서 지워져. 보존은 이유가 붙은 예외지, 변명이 붙은 기본값이 아니야.

표시기를 메커니즘에 붙여. 별도 플래그로 켜지는 프라이버시 표시기는 누락으로 거짓말할 수 있어. 누가 그 플래그 세우는 걸 잊으면 그만이니까. 메커니즘 자체에서 나오는 표시기는, 그러니까 캡처 탭이 먹여 주는 파형 같은 건 구조적으로 솔직해. 사실이 아니면 뜰 수가 없고, 사실인 동안엔 숨을 수가 없거든. '언제 X 가 일어나는지 알게 될 거야' 라고 약속하는 자리마다, 그 신호를 따로 보내는 알림이 아니라 X 의 부산물로 만들어.
허용하는 보존마다 상한을 걸어. 예외를 인정하는 순간, 그러니까 'STT 실패하면 오디오 유지' 를 받아들이는 순간, 바로 천장이랑 회전 규칙을 붙여. 상한 없는 예외는 조용히 아카이브가 돼. 실패한 녹음 열 개는 안전망이지만, 일 년 치가 쌓이면 그건 안 만들겠다고 약속한 바로 그 창고야.

Code

기본은 잊기, 실패했을 때만 제한적으로 보존·swift
func finish(_ clip: AudioClip) async {
    // 원시 전사가 정리 전에 상태에 들어감, 그래서 정리
    // 실패가 유저 단어를 절대 못 잃음.
    guard let raw = try? await stt.finalize(clip) else {
        recoveryStore.keep(clip, max: 10)   // STT 실패: 제한된 구조
        return
    }
    history.recordRaw(raw)                  // 인메모리; 디스크 지속은 옵트인

    let result = await cleanup.run(raw)
    await insertion.insert(result)

    clip.discard()                          // 성공: 오디오 사라짐. 기본값.
}

External links

Exercise

민감한 걸 캡처하는 앱을 하나 찾아봐. 오디오든 화면이든 위치든. 그게 지금 켜져 있는지 어떻게 알아? 그냥 주장이야, 아니면 메커니즘에 붙어 있는 증거야? 그다음 보존도 확인해봐. 버리는 게 기본이고 예외에 상한이 걸려 있어, 아니면 유지가 기본이고 삭제 버튼이 하나 있어?
Hint
제일 강한 표시기는 캡처 자체의 부산물이라, 주장이 거짓일 땐 참일 수가 없어. 그리고 보존에서 신호가 되는 건 기본값이 어디 앉아 있느냐야. '지울 때까지 유지' 랑 '요청할 때까지 버림' 은 설정 화면에 똑같은 버튼이 있어도, 일 년 뒤 디스크에 남은 네 데이터 양이 완전히 달라.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.