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

내 것만 지우고, 같이 쓰는 건 남겨

~9 min · deletion, shared-cache, reference-counting

Level 0침묵
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"project를 지우면 그 project 것만 없어져. history나 다른 project가 아직 붙잡고 있는 오디오는 절대 건드리면 안 돼."

project가 걸치고 있는 두 종류

Studio project를 지우면 성격이 아주 다른 데이터 두 무리를 건드리게 돼. 하나는 그 project가 혼자 쥔 것들이야. utterance, take 기록, 자기 export 폴더. 다른 하나는 그냥 가리키고 있는 것들이고. 대화 history나 전혀 다른 project도 같이 쓸 수 있는 content-addressed synthesis job이랑 캐시 항목 말이야. 삭제는 이 둘을 갈라볼 줄 알아야 해. Bellows는 혼자 쥔 것만 없애고 같이 쓰는 건 그대로 둬.

공유 오디오는 그걸 쓰던 project보다 오래 살아

캐시 항목은 project가 아니라 synthesis identity로 키가 붙어. project 둘이 다 "Welcome back"이라는 줄을 썼으면 캐시 항목 하나를 같이 쓰는 거지. 한쪽을 지운다고 다른 쪽 발밑에서 그 오디오를 빼가면 안 돼. 그걸 참조하는 대화 history 밑에서도 마찬가지고. 그래서 공유 synthesis job이랑 content-addressed 캐시는 project가 사라진 뒤에도 계속 쓸 수 있게 남아. 그 project가 혼자 쥔 건 지워지고, 다 같이 쓰던 건 그대로야.

자동 청소도 take를 존중해

일상적인 캐시 정리도 같은 눈으로 봐. 자동 캐시 청소는 Studio take가 붙잡고 있는 오디오를 절대 안 지워. 손으로 만든 제작물이 백그라운드 청소기에 쓸려나가지 않게 지켜주는 거야. 참조된 오디오를 없앨 수 있는 건 명시적이고 의도적인 행동뿐이지. 키 하나를 콕 집어 지우거나, 확인을 거친 전체 비우기거나. 결국 reference counting이랑 같은 얘기야. 같이 쓰는 건 아무도 안 가리킬 때에야 지울 수 있고, 그때도 일부러 해야만 지워져.

Code

삭제 범위는 혼자 쥔 것까지만·python
def delete_project(project: StudioProject):
    # Remove what the project EXCLUSIVELY owns:
    remove(project.utterances)          # its lines
    remove(project.takes)               # its take records
    remove(project.export_dir)          # its own export directory

    # Do NOT touch shared audio: a synth job / cache entry may serve history
    # or another project. Deletion is scoped to exclusive ownership, never to
    # content-addressed audio that other references still point at.

# Automatic cache cleanup ALSO refuses to evict audio a take references --
# only an explicit per-key delete or a confirmed full clear can remove it.

External links

Exercise

네가 아는 시스템에서 공유되거나 중복 제거됐거나 남이 참조하는 데이터까지 닿을 수 있는 삭제를 찾아봐. 공유 파일을 가진 유저 삭제, 사진을 같이 쓰는 앨범 제거, 다른 행이 가리키는 레코드 삭제. 그 삭제가 혼자 쥔 게 뭐고 그냥 가리키는 게 뭔지 갈라내고, 혼자 쥔 것만 없애도록 다시 써봐. 무턱대고 번졌으면 어떤 데이터가 날아갔을지도 적어보고.
Hint
삭제가 건드릴 바이트마다 물어봐. '아직 다른 게 이걸 가리키고 있나?' 그렇다면 같이 쓰는 거니까 살아남아야 해. 삭제 범위는 이것이, 오직 이것만 쥐고 있는 데까지야.

Progress

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

댓글 0

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

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