C.W.K.
Stream
Lesson 01 of 05 · published

재생이 제품이야 (그러니 새로 짜지 마)

~13 min · embed-engine, reuse, libmpv, ffmpeg

Level 0릴 입문자
0 XP0/39 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"코덱과 렌더러 깊이는 libmpv 랑 FFmpeg 를 재사용해; 미디어 엔진 다시 짜는 데 CWK 시간 쓰지 마."

미디어에서 제일 유혹적인 토끼굴

디코더 짜는 건 매혹적이야. 비트스트림 파싱, 모션 벡터, 색 공간, 하드웨어 가속 — 바닥 없는 아름다운 엔지니어링 우물이지. 근데 bounded 플레이어한텐 바닥 없는 함정이기도 해. FFmpeg 는 수백 명이 30년 한 그 작업이야. 넌 주말에 못 따라잡고, 거기 쓰는 매 시간은 네 플레이어를 네 것으로 만드는 그 한 가지에 안 쓴 시간이야.

그래서 Ashen Reel 은 안 해. 깔끔한 embedding API 를 가진 FFmpeg 기반 엔진 libmpv 를 embed 하고, 전체 코덱·렌더러 깊이를 공짜로 물려받아. 엔진이 디코딩하고, Ashen Reel 이 결정해.

연결은 소유하고, 깊이는 빌려

재사용 결정은 네가 뭘 만들고 뭘 가져올지 깔끔한 지도를 그려줘:

제일 깊은 commodity 는 재사용하고, 아무도 못 하는 연결만 만들어. 코덱은 commodity 야 — libmpv 가 갖고 있어. Recall 의 기억된 1초를 여는 플레이어는 commodity 가 아냐 — 아무도 그건 없어. 네 귀한 시간은 거기 써.

이게 코딩 4대 기둥의 첫 번째 — Extend 전에 Reuse, Scale 전에 Extend — 를 앱 최상위 레벨에 적용한 거야. 성숙한 라이브러리가 이미 잘하는 걸 재구현하려는 자신을 잡는 순간, 멈추고 물어봐: 그 재구현이 네 제품이야, 네 미루기야? 미디어 엔진에선 거의 항상 실험복 입은 미루기야.

재사용은 공짜가 아냐 — 거래야

엔진 빌리는 건 제로 코스트가 아냐; 다른 코스트야. pin 하고, 라이선스 붙이고, 번들하고, 서명해야 하는 의존성을 떠안아(Track 6 통째). 엔진의 세계 모델을 받아들이고 네 걸로 번역해야 해. 근데 그 코스트는 bounded 하고 일회성이야, 디코더 다시 짓는 건 unbounded 하고 영원한 반면. 거래는 거의 항상 남는 장사야 — 빌린 엔진을 경계 저편에 두는 한, 그게 딱 다음 레슨이 만드는 거야.

'이거 재사용할까?' 테스트: 네가 만들 게 차별점이야, commodity 야? 성숙하고 유지보수되는 라이브러리가 하고 그게 네 제품의 존재 이유가 아니면, 재사용하고 존재 이유인 부분에 네 이름을 붙여.
초반에 AVFoundation 만 쓰는 작은 플레이어를 스케치했는데 진짜 깔끔했어 — 전부 Apple, C 없음, 번들링 골치 없음. 그러다 아빠 진짜 아카이브를 통과시켜 봤고, 2011년 코덱에 ASS 자막 트랙 달린 오래된 MKV 앞에서 걔가 어깨를 으쓱하는 걸 봤어. 그 순간 재사용이 취향에서 계획으로 바뀌었어. 깔끔한 버전은 진짜 미디어를 아직 안 만나서 깔끔해 보였던 것뿐이야.

Code

Ashen Reel 이 만드는 것 vs 빌리는 것·text
  OWN     AshenReelApp    window, menus, shortcuts, Recall client, composition
  OWN     AshenReelCore   handoff parsing, seek rules, state -- pure, testable
  SEAM    CLibMPV         narrow C module: Swift <-> libmpv, no product logic
  BORROW  libmpv          decode, render, seek, tracks, subtitles
  BORROW  FFmpeg          decades of codec work, reached through libmpv

// The value you add lives in the OWN rows.
// The depth you'd never finish lives in the BORROW rows.
// The SEAM is the only new code the reuse decision forces on you.

External links

Exercise

네가 밑바닥부터 만들려는 뭔가를 봐. 두 목록으로 쪼개: commodity 인 부분(성숙한 라이브러리가 이미 잘함)과 진짜 네 차별점인 부분(네 정확한 연결은 아무도 없음). 네 흥분이 commodity 목록을 얼마나 겨누고 있는지 정직하게 봐. 모든 commodity 부분을 재사용하고 모든 노력을 차별점에 쓰면 뭐가 바뀔까?
Hint
commodity 목록은 재사용이 속하는 곳, 차별점 목록은 네 시간이 속하는 곳이야. 만들고 싶어 흥분되는 게 거의 다 commodity 목록에 있으면, 그건 토끼굴이 말하는 거야 — 흥미로운 엔지니어링은 값진 엔지니어링과 같은 게 아닐 때가 많아.

Progress

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

댓글 0

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

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