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

플레이어를 왜 새로 만들어?

~12 min · bounded-replacement, recall, handoff, product-boundary

Level 0릴 입문자
0 XP0/39 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"바이트는 NAS 것, 영상의 기억은 Recall 것, 재생은 Ashen Reel 것."

네가 지금 서 있는 레드오션

미디어 플레이어만큼 흔해빠진 소프트웨어도 드물어. QuickTime 은 공짜, VLC 는 뭐든 다 틀고, IINA 는 예쁘고 오픈소스, Movist Pro 는 잘 빠진 유료 왕이야. 이 판에서 "나 macOS 플레이어 새로 만들래" 하면, 멀쩡한 엔지니어는 딱 한 마디 해. 왜?

맞는 질문이야. 백에 아흔아홉은 답이 "만들지 마"야. 저 넷 중 하나 깔고 그냥 살아. 영상만 트는 새 플레이어는 세월 안 쌓인 허접한 VLC 일 뿐이거든. 흔한 걸 다시 만드는 건 주말 날려먹는 지름길이고.

저 넷 중 아무도 못 하는 딱 하나

Ashen Reel 은 저 판 전체가 못 하는 딱 하나 때문에 있어. 기억된 순간을 여는 거. 아빠의 다른 앱 Recall 은 가족 영상 수천 개를 색인해서, 그 안에서 뱉은 말을 검색하게 해줘. 검색이 딱 걸렸어. "저기, 2019년 그 클립 41분, 저 문장." 그럼 뭔가가 그 파일을 그 초에 정확히 열어줘야 해. 일반 플레이어는 못 해. Recall 이 아는 걸 걔넨 모르거든.

그게 존재 이유야. '더 나은 플레이어' 가 아니라 기억에 붙은 플레이어. 재생, 정지, seek, 자막, 전체화면. 나머지는 전부 그 하나가 살 집을 깔아주는 바닥일 뿐이야.

그걸 정당화하는 handoff

그 연결은 커스텀 URL 하나야. Recall 이 만들고, macOS 가 넘기고, Ashen Reel 이 받아.

기존 도구가 너한테 중요한 선을 못 넘을 때, 그때만 새로 만들어. Ashen Reel 의 선은 '기억된 1초' 야. 이유가 '내 게 좀 더 예쁠 텐데' 면 만들지 마. 그냥 쓰던 거 테마만 바꿔.

이 URL 이 뭘 싣는지 봐. 불투명한 video_idtimestamp_ms. 파일 경로는 안 실어. 이거 기억해둬. Track 3 통째가 이 얘기고, 편의랑 보안 구멍을 가르는 게 바로 이거야.

일부러 좁게

'기억에 붙은 플레이어' 를 목표로 받아들이는 순간, 범위는 저절로 잡혀. Ashen Reel 은 아빠가 매일 만지는 Movist 조각만 대체해. 열기, 재생, seek, 자막, 전체화면, 스크린샷. 그리고 Movist 의 네트워크 브라우저, 웹 익스텐션, 설정 난장판은 일부러 안 건드려. Movist 표면의 한 45%. 딱 그만큼만, 일부러. 나머지 55% 는 남의 일이거나 아무 일도 아니야.

아빠가 자기 플레이어 만들고 싶다고 처음 말했을 때, 내 첫 반응이 딱 그 멀쩡한-엔지니어였어. "아빠, IINA 가 이미 이거 다 해, 제발." 플레이어 일반으로는 내가 맞았고, 이 플레이어로는 완전히 틀렸어. 엉뚱한 걸 재고 있었거든. 넘을 선을 물어봤어야 했는데 기능 목록만 비교하고 있었지. 아빠가 "자막 줄 누르면 그 프레임에 딱 떨어지고 싶어" 하는 순간, 내 반박이 그냥 날아갔어. App Store 어디에도 그 선 넘는 건 없거든.

Code

앱 전체를 정당화하는 URL 하나·text
cwkashenreel://recall/open
  ?video_id=<opaque Recall id>
  &timestamp_ms=<unsigned integer, optional, default 0>

# Recall builds this after a transcript-search hit.
# macOS routes it to the app registered for the scheme.
# Ashen Reel resolves the id -> canonical file -> seeks to the second.
#
# Note what is NOT in here: no path, no host, no player flags.
# That absence is a security decision, not an oversight.

External links

Exercise

네가 매일 여는 도구 하나 골라봐. 그걸 직접 만든 걸로 바꿀 만한 capability 딱 하나만 대봐. 기존 도구가 구조적으로 절대 못 넘는 선 말이야. 제일 잘 대봤자 '내 게 더 예쁠 텐데' 나 '조금 더 빠를 텐데' 수준이면, 넌 방금 만들면 안 된다는 걸 스스로 증명한 거야. 그래서, 진짜 그 선이 뭔데?
Hint
Ashen Reel 의 선은 '다른 앱 검색에서 나온 기억된 1초를 여는 것' 이었어. 진짜 선은 보통 기존 강자가 못 보는 뭔가랑 이어지는 지점이야. 네 데이터, 네 다른 도구, 네 작업 흐름 같은 거. 하던 걸 더 예쁘게 만든 버전이 아니라.

Progress

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

댓글 0

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

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