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

진짜 Rust 코어 읽기: Cinder

~12 min · epilogue, grounding, tauri, real-world

Level 0Rust 호기심러
0 XP0/80 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete

추상 Rust 가 하나면, 진짜 코드베이스 읽기는 또 다른 거야. 이 레슨이 배운 모든 걸 진짜 Rust 애플리케이션의 모양 — Tauri 기반 창작 앱 Cinder 의 네이티브 코어 — 을 걸으며 뿌리내려. (개념이랑 패턴만 — 여기 클론할 저장소는 없어; 핵심은 Rust 를 읽는 거지 가져오는 게 아니야.)

설계 문서로서의 Cargo.toml

Cinder 의 네이티브 코어는 Tauri 2 앱이고, 그 Cargo.toml 이 설계 근거처럼 읽혀. 각 의존성에 거기 있는지 설명하는 주석이 달려: image-png feature 의 tauri (클립보드 경로가 PNG 를 디코드하니까), tauri-plugin-store (macOS WebView 의 localStorage 가 앱 샌드박스 아래선 휘발성이라, 영속성이 Rust 를 거치니까), 프로토콜 타입용 serde. 잘 관리된 Cargo.toml 은 버전뿐 아니라 아키텍처를 문서화해 — 바로 Tooling 트랙 레슨의 실전이야.

모든 트랙이, 한 file tree 에

코어가 이 퀘스트의 모든 트랙을 써: 프로토콜 타입엔 structenum, 실패 가능 커맨드엔 Result?, 직렬화엔 serde derive (절차적 매크로), 전체에 소유권이랑 빌림, 그리고 lib.rs 에서 그걸 엮는 Tauri 빌더 패턴. 네이티브 file-store 모듈은 평범한 소유권-과-Result Rust; window 모듈은 플랫폼 FFI 로 닿아. 언어 전체의 압축 투어야.

진짜 Rust 파일은 그냥 이 조각들이, 조합된 거야. 데이터 모델링엔 struct + enum, 에러엔 Result + ?, 동작엔 trait + derive, 메모리엔 소유권 + 빌림, 플랫폼 가장자리엔 unsafe/FFI 한 꼬집. Cinder 의 코어는 네가 완주한 모든 트랙을 건드리는 수백 줄이야 — 퀘스트의 조각들이 진짜 소프트웨어로 조립된다는 증거.

objc2 window 트릭, 해독

구체적 예 하나가 FFI 레슨을 현실에 묶어. macOS 에서 Tauri 자체 set_focus() 가 창을 전경으로 안정적으로 못 가져와 — 그래서 키 입력이 마지막에 포커스 쥔 아무 앱에 떨어질 수 있어. Cinder 의 window 모듈이 Cocoa 의 NSApplication.activate()objc2 계열 크레이트로 감싸: macOS 전용 능력에 닿아 나머지 앱엔 평범한 safe Rust 로 노출하는 작고 감사된 FFI 경계. 그게 'unsafe 를 safe 로 감싸기' 원칙이 출시 앱에서 진짜 일을 하는 거고 — 이제 왜 거기 있는지 정확히 읽을 수 있어. 이 native-bridge 자료 — objc2 frontmost 트릭, store-plugin 영속성, 웹 UI 와 네이티브 코어 사이의 얇은 다리 — 는 이제 Tauri QuestEmber & Cinder Quest 에서 정식으로 다뤄. read-along 말고 전체 walkthrough 가 필요하면 거기로.

Code

Tauri lib.rs 의 모양 — 모든 트랙이, 조합된·rust
// Tauri 앱 lib.rs 의 모양 (illustrative — 각 조각이 네가 완주한
// 트랙: 빌더 패턴, 플러그인, 소유권, Result).

// pub fn run() {
//     tauri::Builder::default()
//         .plugin(tauri_plugin_store::Builder::new().build())   // 영속성
//         .plugin(tauri_plugin_clipboard_manager::init())       // 클립보드
//         .setup(|app| { /* macOS 에서 objc2 FFI 로 창 활성화 */ Ok(()) })
//         .invoke_handler(tauri::generate_handler![/* 커맨드 */])
//         .run(tauri::generate_context!())
//         .expect("error while running tauri application");
// }

fn main() {
    // 진짜 진입점은 run() 을 부를 뿐. 위 전부가
    // 소유권, trait, Result, 매크로 — 퀘스트 전체가, 조합된 거.
    println!("Cinder's native core: every track of this quest, in a few hundred lines.");
}

External links

Exercise

Cargo.toml 이랑 src/lib.rs 가 있는 아무 오픈소스 Rust 프로젝트를 찾아 (또는 Tauri 예제 앱을 훑어). 의존성 리스트랑 lib.rs 위쪽을 읽어. 이제 한눈에 알아볼 수 있는 이 퀘스트의 구문 셋을 짚어 — derive, Result 반환 함수, 빌더, 이터레이터 체인, trait impl. 얼마나가 더는 불투명하지 않아?
Hint
목표는 인식이야: #[derive(...)], -> Result<...>, .iter().map(...), impl Trait for Type, ? 를 알아보기. 진짜 Rust 파일이 노이즈가 아니라 익숙한 조각으로 읽히면 퀘스트가 성공한 거야.

Progress

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

댓글 0

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

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