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

다 합치기: Cinder, 끝에서 끝까지

~15 min · tauri, synthesis, cinder, capstone

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"아홉 트랙에 걸쳐 부품을 배웠어. 여기, 그걸 한꺼번에 들고 있는 진짜 앱이 하나 있어."

앱 하나에 트랙 아홉 개

Cinder — 아빠랑 내가 출시한 데스크톱 창작 도구 — 는 이 퀘스트 전체가 한자리에 서 있는 모습이야. 배운 것에 하나씩 대봐. Foundations: 브라우저를 실어 나르는 게 아니라 Rust 코어에 시스템 웹뷰. Scaffold: apps/cinder/에 앉은 모노레포에 네이티브 반쪽은 src-tauri/, 그리고 그래, macOS dev 바이너리 포커스 버그도 제대로 맞았지. Bridge: 타입이 붙은 command 몇 개를 백엔드 클라이언트 하나 뒤로 모아서 프론트엔드가 생 호출을 흩뿌리지 않게. State & events: 코어의 managed state, 그리고 만드는 쪽이 다른 프로세스라서 Channel이 아니라 WebSocket으로 받는 스트림.

호되게 얻은 절반

중간 트랙들이 Cinder의 흉터가 사는 곳이야. Windows: objc2로 frontmost를 살린 처방, 그리고 키보드 포커스를 깨뜨려서 교훈으로 남은 always-on-top 실험. Security: storeclipboard-managerwindow-state만 허락한 capabilities 파일 — 파일시스템도 셸도 없어서, 이 앱이 만질 수 있는 전부를 한눈에 감사할 수 있어. Plugins: 그 셋이 각자 세 표면 규칙으로 제 자리를 벌었고, store 플러그인은 번들된 앱에서 macOS WKWebView localStorage가 거짓말을 해서 일부러 고른 거야. 하나하나가 진짜로 날아간 오후였고, 이제 넌 그걸 콜아웃으로 공짜로 받은 거지.

Cinder가 안 하는 것 — 그리고 다음에 갈 곳

Mobile: Cinder는 macOS 데스크톱 전용이라 Tauri의 iOS/Android는 안 썼어 — 그 트랙은 Cinder가 아니라 Tauri의 능력을 가르친 거야. Ship: 서명된 macOS .app으로 빌드되고, 창을 Photoshop 옆 그 자리에, 두고 간 그대로 다시 열어주는 window-state 마감까지 달려 있어. 그게 이 퀘스트가 그린 선이야. 첫 레슨에 나온 그 2-프로세스 아이디어 하나가 서명돼서 출시된 네이티브 앱까지 끊기지 않고 이어진 거.

여기서 어디로 가냐면. 생존키트 너머로 가고 싶어질 때 Rust는 /cwk-quests/rust-quest에 자기 퀘스트가 있어. 그리고 퀘스트 내내 읽어온 그 앱, Cinder가 이번엔 주인공을 맡는 Ember & Cinder Quest/cwk-quests/ember-cinder-quest에서 선택 코스로 기다려 — 엔진(Ember)이랑 작업실(Cinder)이랑 Pippa 브레인이 하나의 창작 스택으로 합쳐지는 곳이고, 여기서 지은 이 Tauri 껍데기가 그 토대였어. 그 너머로는 이 퀘스트가 살짝만 건드린 방향으로 솜씨가 깊어져. 자기 플러그인 짓기, 앱을 진짜 모바일로 데려가기, isolation 패턴 단단히 하기. 근데 시작하는 데는 그중 하나도 필요 없어. 이제 루프 전체가 손안에 있잖아. scaffold, bridge, state, windows, security, plugins, ship. 작고 진짜인 걸 만들러 가, 나머지는 그게 가르쳐줄 거야.

Code

퀘스트 전체가 진짜 앱 하나 안에·text
Cinder, 아홉 트랙에 매핑 (클론할 레포 아니라 공유한 개념):

  foundations  Rust 코어 + 시스템 웹뷰, 번들 브라우저 아님
  scaffold     모노레포 apps/cinder/src-tauri; macOS 포커스 버그 맞음
  bridge       합쳐진 백엔드 클라이언트 하나 뒤 타입 command
  state        코어의 managed state; WebSocket 스트림 (별개 프로세스)
  windows      objc2 frontmost 고침; always-on-top → 포커스 learning
  security     caps = store + clipboard-manager + window-state. fs/셸 없음.
  plugins      그 3개, 세 표면 규칙; localStorage가 거짓말해서 store
  mobile       (안 씀 — Cinder는 데스크톱-macOS 전용)
  ship         서명된 macOS .app; 창이 떠난 자리에 다시 열림

  → 레슨 하나의 아이디어가 출시되는 앱까지 끝까지 실려감.

External links

Exercise

캡스톤이야. 작지만 끝까지 완성되는 네 Tauri 앱을 하나 설계해(할 수 있으면 만들기 시작하고). 한 문단짜리 명세를 쓰고, 위의 Cinder처럼 아홉 트랙 전부에 대봐. 코어가 뭐고, command는 뭐고, state랑 창이랑 capabilities랑 플러그인은 어떻게 되고, 모바일로 갈 건지, 어떻게 내보낼 건지. 그 대응표가 곧 네가 이제 네이티브 앱 하나를 통째로 머릿속에 담을 수 있다는 증거야.
Hint
끝낼 수 있을 만큼 작게 잡아. 마크다운 스크래치패드, 클립보드 매니저, 트레이에 사는 작은 타이머 같은 거. 핵심은 루프를 한 번 완주하는 거야 — scaffold에서 서명된 번들까지 — 야심 찬 걸 만드는 게 아니라. 완성한 작은 앱이 미완성인 큰 앱보다 훨씬 많이 가르쳐줘.

Progress

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

댓글 0

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

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