러스트

Rust에서 JSON 다루기: serde 역직렬화 실전 정리
5 분 소요

Rust에서 JSON 다루기: serde 역직렬화 실전 정리

Rust JSON 처리의 표준인 serde를 실전 순서로 정리합니다. derive 한 줄로 시작하는 구조체 역직렬화, 필드가 없을 수도 있는 현실 JSON을 받는 Option과 default, API의 camelCase를 잇는 rename_all, 구조를 모르는 JSON을 더듬는 Value, 형태가 여러 개인 응답을 받는 enum과 untagged, 그리고 에러 메시지에서 위치를 읽는 법까지 다루겠습니다.

PyO3로 파이썬 확장 모듈 만들기: maturin 빌드부터 wheel 배포까지
4 분 소요

PyO3로 파이썬 확장 모듈 만들기: maturin 빌드부터 wheel 배포까지

Polars, Ruff, pydantic이 증명한 경로인 "파이썬의 병목 함수만 Rust로"를 직접 밟아 봅니다. maturin new로 시작하는 프로젝트 구조, #[pyfunction]과 #[pymodule]로 Rust 함수를 파이썬에 노출하는 법, maturin develop의 개발 사이클, 타입 변환(str·list·dict)의 규칙, free-threaded 파이썬 시대와의 궁합, 그리고 wheel 빌드와 PyPI 배포까지 다루겠습니다.

Box, Rc, Arc 차이: Rust 스마트 포인터, 언제 무엇을 쓰나
5 분 소요

Box, Rc, Arc 차이: Rust 스마트 포인터, 언제 무엇을 쓰나

기초 강좌가 The Book에 맡겨 둔 공백을 회수합니다. 값을 힙에 두는 Box가 필요한 세 상황(재귀 타입, dyn 트레이트, 큰 값의 이동), 소유자를 여럿 만드는 Rc와 참조 카운트, 스레드를 건너는 Arc, 런타임 빌림 검사로 내부 가변성을 여는 RefCell, 그리고 실무 관용구인 Rc<RefCell<T>>와 Arc<Mutex<T>>까지, 선택 기준을 결정 순서도로 정리하겠습니다.

Rust vs Go: 서버, CLI, 시스템 프로그래밍에서 무엇으로 만들지 고르는 기준
4 분 소요

Rust vs Go: 서버, CLI, 시스템 프로그래밍에서 무엇으로 만들지 고르는 기준

둘 다 정적 타입에 단일 바이너리를 만드는 컴파일 언어지만, 설계 철학은 반대에 가깝습니다. 메모리 관리(GC vs 소유권), 동시성(내장 고루틴 vs async 생태계), 학습 곡선과 팀 온보딩, 지연 시간 특성, 그리고 웹 API, CLI 도구, 인프라 소프트웨어, 임베디드까지 용도별로 어느 쪽이 유리한지의 판단 기준을 정리하겠습니다.

Rust 빌림 에러 총정리: value moved, cannot borrow, does not live long enough
5 분 소요

Rust 빌림 에러 총정리: value moved, cannot borrow, does not live long enough

Rust 입문자가 가장 자주 만나는 빌림 검사기 에러를 코드별로 정리합니다. E0382(이동 후 사용), E0502(불변·가변 빌림 충돌), E0499(가변 빌림 중복), E0506(빌린 값에 대입), E0597(수명 부족), E0596(클로저 캡처)까지, 각 에러의 원인과 대표 처방을 진단→원인→해결 순서로 다루겠습니다.

Rust 실전 강좌 #8 배포: crates.io 발행과 GitHub Releases 자동화로 완결
4 분 소요

Rust 실전 강좌 #8 배포: crates.io 발행과 GitHub Releases 자동화로 완결

실전 강좌의 마지막 편입니다. crates.io 발행에 필요한 메타데이터와 cargo publish의 절차(dry-run, 발행의 영구성과 yank), 사용자가 cargo install 한 줄로 설치하는 경험, 개발자가 아닌 사용자를 위한 GitHub Releases 바이너리 배포, 그리고 태그 푸시에 반응해 3개 OS에서 빌드·업로드하는 GitHub Actions 매트릭스 워크플로까지 만들고 시리즈를 마무리하겠습니다.

Rust 실전 강좌 #7 릴리스 최적화와 크로스 컴파일: 작고 빠른 바이너리를 어디서나
4 분 소요

Rust 실전 강좌 #7 릴리스 최적화와 크로스 컴파일: 작고 빠른 바이너리를 어디서나

배포 준비의 전반부입니다. [profile.release]로 조이는 최적화(lto, codegen-units, strip)와 각 옵션의 대가, panic = "abort"를 함부로 켜면 안 되는 이유, 바이너리 크기가 줄어드는 과정, 그리고 rustup target으로 하는 크로스 컴파일 — 특히 glibc 의존을 없애 오래된 서버에서도 도는 musl 정적 링크 빌드와 링커 문제를 도커로 우회하는 cross 도구까지 다루겠습니다.

Rust 실전 강좌 #6 테스트: 파서 단위 테스트에서 CLI 통합 테스트까지
4 분 소요

Rust 실전 강좌 #6 테스트: 파서 단위 테스트에서 CLI 통합 테스트까지

loglens에 안전망을 두릅니다. 같은 파일 안에 두는 #[cfg(test)] 단위 테스트(파서의 정상·경계·실패 케이스), tests/ 디렉터리의 통합 테스트, assert_cmd와 predicates로 빌드된 바이너리를 실제로 실행해 출력과 종료 코드를 검증하는 CLI 테스트, tempfile로 만드는 임시 로그 파일, 그리고 cargo test가 테스트를 병렬 실행한다는 사실이 갖는 함의까지 다루겠습니다.

Rust 실전 강좌 #5 rayon 병렬화: 데이터 레이스 없는 map-reduce
4 분 소요

Rust 실전 강좌 #5 rayon 병렬화: 데이터 레이스 없는 map-reduce

집계를 여러 코어에 나눕니다. 병렬화가 이득인 조건(CPU 바운드)과 스트리밍에서 통째 읽기로 전략을 바꾸는 이유, rayon의 par_lines와 fold·reduce로 만드는 스레드별 부분 집계와 병합, Mutex로 하나의 HashMap을 공유하면 느려지는 이유(락 경합), 그리고 공유 가변 상태 실수를 컴파일러가 잡아내는 장면까지 다루겠습니다.

Rust 실전 강좌 #4 이터레이터 실전: 집계와 top-N, 그리고 release 빌드의 차이
4 분 소요

Rust 실전 강좌 #4 이터레이터 실전: 집계와 top-N, 그리고 release 빌드의 차이

파서 위에 분석을 올립니다. 파싱 실패를 세면서 성공만 흘려보내는 집계 구조, HashMap entry로 만드는 상태 코드 분포, 정렬로 뽑는 top-N, 커맨드 두 개(stats·top)의 완성, 그리고 Instant로 직접 재 보는 debug와 release 빌드의 성능 차이(왜 수십 배가 나는지, 왜 release가 기본값이 아닌지)까지 다루겠습니다.

Rust 실전 강좌 #3 파일 IO와 파싱: BufReader로 읽고, 로그 한 줄을 구조체로
4 분 소요

Rust 실전 강좌 #3 파일 IO와 파싱: BufReader로 읽고, 로그 한 줄을 구조체로

대용량 파일을 다루는 두 가지 기본기를 세웁니다. 전체를 메모리에 올리는 read_to_string과 줄 단위로 흘리는 BufReader의 선택 기준, 시스템 콜과 버퍼링의 관계, 액세스 로그 한 줄을 LogEntry 구조체로 바꾸는 파서(따옴표 처리, 상태 코드 변환, 2편 ParseError의 실전 투입), 그리고 serde로 JSON Lines 로그까지 받는 확장을 다루겠습니다.

Rust 실전 강좌 #2 에러 설계: anyhow와 thiserror, 죽는 방법을 설계한다
5 분 소요

Rust 실전 강좌 #2 에러 설계: anyhow와 thiserror, 죽는 방법을 설계한다

CLI 도구에서 에러 메시지는 사용자 인터페이스의 일부입니다. 애플리케이션 계층의 기본값인 anyhow(main이 anyhow::Result를 반환, context로 맥락 쌓기)와 라이브러리 계층의 thiserror(호출자가 종류로 분기할 수 있는 구체 에러 타입)의 역할 분담, 두 크레이트를 고르는 판단 기준, 그리고 종료 코드까지 loglens의 에러 경로를 설계하겠습니다.