hyunsu blog

#rust

63편태그 전체

2026

강좌 C-6212분

Rust 와 보안 1 — 막아 주는 것과 막지 못하는 것

Rust 는 메모리 오류를 컴파일러로 막지만 release 의 정수 넘침, 권한 같은 로직 실수, unsafe, 의존성은 막지 못한다. 배열 밖 패닉, 조용히 틀리는 70000×70000, 테스트에만 걸리는 권한 버그를 실행해 본다.

강좌 C-604분

Rust 는 웹·API 서버에서 많이 쓰나 — 쓰는 방식 다섯 가지

Rust 를 쓰는 곳 가운데 가장 많이 꼽히는 것이 서버 백엔드·웹·네트워크 서비스다. 다만 웹 서비스 전체를 Rust 로 짓기보다, 느린 부분만 떼어 내거나 지연이 튀면 안 되는 서비스·프록시·서버리스 함수에 쓰는 경우가 많다. 공식 사례로 다섯 가지 방식을 정리한다.

강좌 C-569분

Rust 를 잘 쓰는 법 1 — clippy 와 rustfmt 로 습관을 잡는다

clippy 는 컴파일은 되지만 Rust 답지 않거나 실수하기 쉬운 코드를 짚어 주는 린터이고, rustfmt 는 코드 모양을 한 가지로 맞추는 포매터다. 다른 언어 습관으로 쓴 함수 하나에서 clippy 경고 다섯 개를 받고, help 대로 고쳐 깨끗하게 만든다.

강좌 C-5413분

Rust axum — 작은 웹 API 서버를 만든다

axum 은 tokio 위의 Rust 웹 프레임워크다. Router 에 경로와 핸들러를 묶고 Json·Path·State 추출기로 요청을 받는다. 메모 API 로 201·200·404·422 응답을 127.0.0.1 에서 확인한다.

강좌 C-537분

Rust clap — 구조체 하나로 명령줄 옵션과 --help 를 만든다

clap 은 Rust 명령줄 도구의 옵션을 읽는 크레이트다. 구조체에 #[derive(Parser)] 를 붙이면 칸이 인자·옵션이 되고, 문서 주석이 --help 문장이 된다. 잘못된 값은 clap 이 막고 종료 코드 2 로 끝낸다. wordfreq 에 --top 을 단다.

강좌 C-528분

Rust serde — 구조체와 JSON 을 오가는 표준

serde 는 Rust 구조체와 JSON 을 오가는 사실상의 표준이다. derive 한 줄이면 되고, 잘못된 JSON 은 어느 칸이 왜 틀렸는지 알려 준다. rename_all·default·skip_serializing_if 로 모양을 맞춘다.

강좌 C-504분

Rust 가 쓰이는 곳 — 운영체제·브라우저·클라우드·개발 도구

Rust 는 메모리 오류가 사고로 이어지고 성능도 놓칠 수 없는 곳에 쓰인다. 리눅스·윈도우 커널과 안드로이드, 크롬의 글꼴 처리, 클라우드플레어 프록시와 AWS Lambda 의 가상 머신, 파이썬 패키지 관리자 uv 까지 공식 발표로 정리한다.

강좌 C-496분

Rust 의 단점 — 고르면 무엇을 치르나

Rust 를 고르면 컴파일 시간·디스크·배우는 시간을 치른다. axum 웹 서버 하나가 처음 빌드에 크레이트 48개·11초·target 173MB 를 쓰고, 1.0 이 안 된 크레이트도 많다. 언제 피하는 편이 나은지 기준을 정리한다.

강좌 C-488분

Rust 의 장점 — 고르면 무엇을 얻나

Rust 를 고르면 메모리 안전을 컴파일할 때 얻고, 가비지 컬렉터 없이 빠르게 돌고, 런타임 없는 실행 파일 하나로 배포한다. release 빌드 7배 속도·반복자와 손 루프의 같은 속도·hello 431KB 를 직접 재 본다.

강좌 C-446분

Rust 채널 — 스레드끼리 값을 보내고 받는다

Rust 채널은 보내는 쪽 tx 와 받는 쪽 rx 를 만든다. 스레드가 send 로 보내고 받는 쪽은 for 로 받는다. 보낸 값을 다시 쓰면 E0382 가 나고, tx.clone() 으로 여럿이 보낸다.

강좌 C-406분

Rust 모듈 — mod 로 나누고 pub 로 열고 use 로 불러온다

Rust 모듈은 mod 이름 { } 으로 코드를 묶는 단위다. 모듈 안의 것은 기본이 비공개라서, 밖에서 쓰려면 pub 을 붙여야 하고 아니면 E0603 이 난다. use 로 긴 경로를 줄이고, mod 이름; 한 줄로 내용을 src/이름.rs 파일로 옮긴다.

강좌 C-348분

Rust 실습 — 파일의 단어 수를 세는 명령줄 도구 wordfreq 1판

입문 구간에서 배운 것만으로 명령줄 도구를 만든다. 파일 이름을 인자로 받아(env::args) 파일을 읽고(fs::read_to_string), HashMap 으로 단어를 세서 많이 나온 10개를 찍는다. 인자가 없거나 파일이 없으면 이유를 찍고 종료 코드 2·1 로 끝낸다.

강좌 C-296분

Rust HashMap — 이름(키)으로 값을 찾는 표

Rust 의 HashMap 은 키로 값을 찾는 표다. use 로 불러오지 않으면 E0433 이 난다. insert 로 넣고 get 은 Option 을 주며, entry().or_insert(0) 으로 단어를 센다.

강좌 C-286분

Rust Vec — 길이가 늘었다 줄었다 하는 목록

Rust 의 Vec 은 같은 타입 값을 담는, 길이가 바뀌는 목록이다. Vec::new() 나 vec![…] 로 만들고 push 로 더한다. v[n] 처럼 범위 밖 번호를 쓰면 실행 중에 패닉하고, get(n) 은 Option 을 돌려줘서 없는 경우를 안전하게 다룬다.

강좌 C-257분

Rust match — 경우를 빠짐없이 다뤄야 컴파일된다 (E0004)

Rust 의 match 는 값이 어느 경우인지 위에서부터 맞춰 보고 맞는 갈래를 실행한다. 열거형의 경우를 하나라도 빠뜨리면 E0004 로 컴파일이 멈춘다. 경우에 붙은 데이터는 갈래에서 이름을 붙여 꺼내고, 나머지를 한꺼번에 받을 때는 _ 를 쓴다.

강좌 C-245분

Rust 열거형 — 정해진 몇 가지 중 하나를 타입으로 만든다

Rust 열거형(enum)은 신호등의 빨강·노랑·초록처럼 정해진 몇 가지 중 하나인 값을 타입으로 만든다. Light::Red 처럼 타입 이름과 :: 로 고르고, 없는 이름을 쓰면 E0599 가 난다. 경우마다 다른 데이터를 붙일 수도 있다.

강좌 C-227분

Rust 구조체 — 관련된 값을 이름 붙여 묶는다

Rust 구조체(struct)는 관련된 값 여러 개를 칸마다 이름을 붙여 하나로 묶은 타입이다. struct 로 정의하고, 만들 때는 모든 칸을 채워야 해서 하나라도 빠지면 E0063 이 난다. #[derive(Debug)] 를 붙이면 {:?} 로 통째로 찍을 수 있다.

강좌 C-176분

Rust 함수와 소유권 — 값을 넘기면 함수가 주인이 된다

Rust 에서 String 을 함수에 넘기면 주인이 함수의 매개변수로 옮겨 간다. 그 뒤에 원래 변수를 쓰면 E0382 가 난다. 함수가 값을 돌려주면 주인도 다시 돌아온다. 정수 같은 Copy 타입은 복사되어 넘어가니 상관없다.

강좌 C-165분

Rust clone 과 Copy — 복사해서 주인을 둘로 만든다

Rust 에서 String 을 두 변수가 함께 쓰려면 .clone() 으로 값을 복사한다. 정수·실수·bool·char 처럼 작은 값은 Copy 타입이라 let y = x; 해도 이동하지 않고 저절로 복사된다. String 이 하나라도 든 튜플은 Copy 가 아니어서 이동한다.

강좌 C-156분

Rust 소유권과 이동 — 값의 주인은 하나다 (E0382)

Rust 의 값에는 주인(변수)이 하나뿐이다. let b = a; 처럼 String 을 다른 변수에 넣으면 주인이 b 로 옮겨 가고(이동), 그 뒤에 a 를 쓰면 E0382 로 컴파일이 멈춘다. 주인이 블록을 벗어나면 값은 저절로 치워진다.

강좌 C-147분

Rust for 와 범위 — 배열과 0..n 을 처음부터 끝까지 돈다

Rust 의 for 는 배열이나 범위의 값을 하나씩 꺼내 되풀이한다. 0..3 은 0·1·2, 1..=3 은 1·2·3 이고 .rev() 로 거꾸로 돈다. 번호를 직접 세지 않으니 범위를 벗어날 일이 없어서, 정해진 만큼 돌 때는 for 가 기본이다.

강좌 C-136분

Rust loop 와 while — break 로 끝내고, continue 로 건너뛴다

Rust 의 loop 는 break 를 만날 때까지 되풀이하고, break 값 으로 반복을 끝내며 값을 돌려줄 수 있다. while 은 조건이 참인 동안 되풀이한다. continue 는 이번 차례의 나머지를 건너뛰고 다음 차례로 간다.

강좌 C-126분

Rust if — 조건은 bool 이어야 하고, if 는 값을 낼 수 있다

Rust 의 if 는 조건이 반드시 bool 이어야 해서, 숫자를 그대로 넣으면 E0308 이 난다. else if 로 갈래를 늘리고, if 가 값을 내는 식이라 let label = if … 처럼 결과를 바로 담는다. 이때 갈래마다 같은 타입을 내야 한다.

강좌 C-117분

Rust 반환값 — 세미콜론 없는 마지막 줄이 돌려주는 값이다

Rust 함수는 -> 타입 으로 돌려줄 값의 타입을 적고, 세미콜론 없는 마지막 줄(식)의 값을 돌려준다. 그 줄에 습관대로 세미콜론을 붙이면 아무 값도 돌려주지 않게 되어 E0308 이 난다. 값을 둘 이상 돌려줄 때는 튜플을 쓴다.

강좌 C-105분

Rust 함수 — fn 으로 만들고 매개변수에는 타입을 적는다

Rust 함수는 fn 이름(매개변수: 타입) { … } 으로 만든다. 매개변수에는 타입을 반드시 적고, 부를 때는 그 개수와 타입대로 값을 넘긴다. 개수가 모자라면 E0061 로 컴파일이 멈추고, 빠진 자리를 컴파일러가 짚어 준다.

강좌 C-095분

Rust 배열 — 같은 타입 값을 정해진 개수만큼 담는다

Rust 배열은 같은 타입의 값을 정해진 개수만큼 대괄호로 담는다. scores[0] 처럼 0 부터 센 번호로 꺼내고, len() 으로 길이를 본다. 범위 밖 번호는 컴파일러가 미리 막거나, 실행 중이면 패닉으로 멈춘다.

강좌 C-076분

Rust bool 과 char — 참·거짓 하나, 글자 하나

Rust 의 bool 은 true 와 false 두 값뿐이고, 비교 연산(>=, ==)의 결과가 bool 이다. char 는 글자 하나를 작은따옴표로 담는다. 큰따옴표로 쓰면 문자열이 되어 E0308 이 난다. 한글과 이모지도 char 하나다.

강좌 C-046분

Rust 가림(shadowing) — 같은 이름으로 다시 let 하면 새 변수다

Rust 에서 같은 이름으로 let 을 다시 쓰면 앞 변수를 가리는 새 변수가 생긴다. 이것을 가림(shadowing)이라 한다. mut 와 달리 타입이 다른 값도 담을 수 있고, 중괄호 블록 안에서 가리면 블록이 끝날 때 원래 값으로 돌아온다.

다른 태그

태그 전체 89개