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

웹 개발자용 Rust 생존키트

~16 min · rust, ownership, result, survival

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"borrow checker랑 싸워서 이길 필요 없어. command 하나 출시하면 돼. 그 둘은 아주 다른 목표야."

널 생산적으로 만드는 다섯 가지

Rust의 작은 조각만 알아도 쓸모 있는 Tauri command를 짤 수 있어. 그 조각이 이거야:

  • 소유권 & 빌림. 모든 값엔 주인이 딱 하나야. 넘기면 이동(move)해(예전 이름은 더 못 써), 아니면 참조로 빌려줘: 읽기는 &T, 수정은 &mut T. 컴파일러가 이걸 강제해서 use-after-free나 데이터 레이스가 안 생겨. 대부분의 command는 소유된 인자를 받고 소유된 값을 반환해 — 제일 단순한 경우야.
  • null 없음 — Option<T>. 없을 수도 있는 값은 Some(x) 아니면 None이야. 컴파일러가 None 경우를 처리하라고 강제해서 Rust 프로그램엔 null 포인터 놀람이 없어.
  • 예외 없음 — Result<T, E>. 실패 가능한 연산은 Ok(value) 아니면 Err(error)를 반환해. 이게 네 command가 반환하는 타입이고, resolve/reject Promise에 그대로 매핑돼.
  • struct + derive. struct는 네 데이터 모양이고, #[derive(Serialize, Deserialize)]가 그걸 다리 너머로 보내는 코드를 자동 생성해.
  • String vs &str. String은 소유된 늘어나는 문자열, &str은 빌린 뷰야. command 인자로 String을 받으면 lifetime을 안 생각해도 돼.

컴파일러는 엄한 과외선생이지 적이 아냐

Rust 에러 메시지는 유난히 좋아 — 정확한 고침을 알려줄 때가 많아. borrow checker가 불평하면, 진짜 버그 부류(dangling 참조, 레이스)를 존재하기 전에 잡는 거야. 빨간 줄을 공짜 시니어 리뷰어로 대해. ? 연산자도 여기서 네 친구야: Ok를 풀거나 Err를 조기 반환해서, 장황한 에러 처리를 한 글자로 바꿔.

더 원할 때

이건 생존이지 숙달이 아냐 — 일부러. trait, lifetime, 제네릭, iterator, async 내부: 그건 배울 가치 있는 언어 하나만큼이고, /cwk-quests/rust-quest에서 자기 퀘스트를 받아. 첫 command 열 개 엮는 덴 그거 하나도 필요 없어. 먼저 만들고, 나중에 깊어져.

Code

생존키트 전체를 한 화면에·rust
use serde::{Serialize, Deserialize};

// 다리를 건널 수 있는 데이터 모양 (derive 주목).
#[derive(Serialize, Deserialize)]
struct Note {
    id: u32,
    title: String,   // 소유된 문자열 — lifetime 골치 없음
    body: String,
}

// Option<T>: 없을 수도 있는 값.
fn find_title(notes: &[Note], id: u32) -> Option<String> {
    for n in notes {
        if n.id == id {
            return Some(n.title.clone());
        }
    }
    None
}

// Result<T, E>: 실패할 수 있는 연산. `?`가 에러를 전파.
fn parse_count(raw: &str) -> Result<u32, std::num::ParseIntError> {
    let n: u32 = raw.trim().parse()?; // Err이면 ?가 조기 반환
    Ok(n * 2)
}

External links

Exercise

작은 Rust 함수 셋을 써봐(스크래치 파일이나 Rust Playground에): 하나는 Option 반환, 하나는 Result 반환, 하나는 #[derive(Serialize)] 붙인 네가 정의한 struct를 받기. 컴파일되게 만들어. 아직 Tauri 만드는 거 아냐 — 생존키트로 진짜 로직을 표현할 수 있단 걸 증명하는 거야.
Hint
프로젝트 세팅 싫으면 play.rust-lang.org 써. Result 짜리는 실패 경로에 Err("some message".to_string()) 반환해서 에러 타입을 String으로 해 — 네 Tauri command가 쓸 바로 그 모양이야.

Progress

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

댓글 0

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

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