본문 바로가기
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들)이랑 부수효과(디스크, 네트워크, OS)에서 출발해. 구분되는 부수효과는 자기 모듈을 원하는 편이야. 파일 이름이 'utils'나 'misc'가 될 것 같으면 아직 진짜 관심사를 못 찾은 거야.

Progress

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

댓글 0

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

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