C.W.K.
Stream
Lesson 06 of 06 · published

진짜 Tauri 앱: Cinder

~13 min · tauri, case-study, architecture, cinder

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"추상은 고개 끄덕이기 쉬워. 진짜 앱은 그 추상이 버티느냐 깨지느냐가 갈리는 곳이야."

Cinder를 소개할게

이 퀘스트 내내 개념을 Cinder에 박아서 설명할 거야 — 아빠랑 내가 Tauri 2.0로 만들어서 출시한 데스크톱 창작 도구야. Cinder는 Photoshop 옆에 사는 두 번째 캔버스야: candidate board, 계보 추적기, 그리고 AI 사이드킥이 그림을 칠해넣는 자리. 얘는 데스크톱 전용이야(정확히는 macOS) — 이게 중요해. 뒤의 mobile 트랙이 Tauri의 폰 이야기를 가르치는데, Cinder는 그걸 일부러 안 쓰거든. 내가 'Cinder에선'이라고 하면 장난감이 아니라 진짜 돌아가는 데스크톱 앱 얘기야.

정직하게 하나 — Cinder는 git clone할 수 있는 게 아냐. 난 그 모양을 공유하는 거야 — 아키텍처랑 결정들이지, 다운로드가 아냐. 모양이 레슨이고, 그 레슨은 네가 뭘 만들든 옮겨가.

진짜 앱에서의 두 반쪽

Cinder는 방금 배운 그 2-프로세스 모델 그대로야. 웹뷰는 React 19 + Vite 프론트엔드 — candidate board, 컨트롤, 사이드킥 패널. 코어는 집중된 모듈로 쪼갠 작은 Rust 크레이트야: IPC command 파일 하나, 네트워크로 별개 brain 프로세스랑 대화하는 파일 하나, 창 동작 파일 하나, 디스크 영속화 파일 하나. 어느 모듈도 안 거대해. 각자 관심사 하나씩 쥐어. 그게 Tauri 코어의 정상적인 종착지야 — 모놀리스가 아니라, 다리 뒤의 날카로운 파일 몇 개.

코어가 실제로 끌어오는 것

Cinder 코어는 플러그인 셋을 등록하는데, 각각 plugins 트랙에서 또 만날 구체적 이유가 있어: 재시작에도 살아남아야 하는 설정을 위한 store 플러그인, 완성된 이미지를 Photoshop으로 돌려주는 clipboard 플러그인, 창을 떠난 자리에 다시 열어주는 window-state 플러그인. '혹시 몰라서' 추가한 플러그인은 하나도 없어 — 각자 제 자리를 벌어. 그 절제 자체가 레슨이야: Tauri 앱이 작게 유지되는 건 쓰는 것만 끌어오기 때문이기도 해.

Code

진짜 코어를 뼈대만 남기면·rust
// 진짜 Tauri 2 코어 진입점의 모양 (Cinder의 lib.rs 단순화).
// 클론할 레포가 아니라 공유하는 개념. .plugin() 하나하나 제 자리를 벌어.
pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_store::Builder::new().build())            // 재시작에도 살아남는 설정
        .plugin(tauri_plugin_clipboard_manager::init())               // Photoshop에 이미지 건네기
        .plugin(tauri_plugin_window_state::Builder::default().build()) // 창 위치 + 크기 기억
        .invoke_handler(tauri::generate_handler![/* 네 command들 */])
        .run(tauri::generate_context!())
        .expect("error while running the app");
}

External links

Exercise

Cinder가 코어를 쪼갠 방식대로 네 앱의 Rust 코어 모듈 분리를 스케치해봐: 파일 3~5개를 이름 붙이고, 각자 관심사 하나씩 쥐게 해(command, 영속화, 네트워크 클라이언트, 창 동작 등). 아직 코드 짜는 거 아냐 — 모양을 정하는 거야. 좋은 분리엔 '전부 다 하는' 파일이 없어.
Hint
IPC 표면(command들)이랑 side effect(디스크, 네트워크, OS)에서 시작해. 구분되는 side effect마다 자기 모듈을 원하는 경향이 있어. 파일 이름이 'utils'나 'misc'가 될 것 같으면 아직 진짜 관심사를 못 찾은 거야.

Progress

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

댓글 0

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

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