프로그래밍 언어

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의 에러 경로를 설계하겠습니다.

파이썬 3.14 새 기능 정리: t-string, 지연 어노테이션, 프리스레딩 공식 지원
5 분 소요

파이썬 3.14 새 기능 정리: t-string, 지연 어노테이션, 프리스레딩 공식 지원

2025년 10월 릴리스된 파이썬 3.14의 실무 관점 변화를 정리합니다. f-string과 닮았지만 템플릿 객체를 만드는 t-string, 기본 동작이 된 어노테이션 지연 평가, 실험 딱지를 뗀 프리스레딩(GIL 제거) 빌드의 의미, 표준 라이브러리에 들어온 다중 인터프리터와 Zstandard 압축, 괄호 없는 except 문법, 원격 디버깅 인터페이스까지, 업그레이드 전에 알아둘 것들을 다룹니다.

Rust 실전 강좌 #1 프로젝트 설계와 clap: 서브커맨드 CLI의 뼈대 잡기
4 분 소요

Rust 실전 강좌 #1 프로젝트 설계와 clap: 서브커맨드 CLI의 뼈대 잡기

기초 강좌에서 배운 문법으로 실제 도구를 만드는 실전 8편을 시작합니다. 만들 것은 액세스 로그 분석 CLI인 loglens입니다. 왜 CLI 도구가 Rust의 대표 무대인지(단일 바이너리, 시작 속도), clap의 derive 방식으로 서브커맨드(stats, top, errors)를 열거형 하나로 선언하는 법, 자동 생성되는 --help, 그리고 8편 전체의 설계 지도까지 다루겠습니다.

파이썬 웹 앱 프로덕션 배포: gunicorn, uvicorn, systemd, Docker
5 분 소요

파이썬 웹 앱 프로덕션 배포: gunicorn, uvicorn, systemd, Docker

개발 서버를 그대로 운영에 쓰면 안 되는 이유부터, 프로덕션 배포의 표준 구성을 정리합니다. WSGI와 ASGI의 구분, gunicorn과 uvicorn 워커의 조합, 워커 수를 정하는 기준, systemd 서비스로 프로세스를 관리하는 법, nginx 리버스 프록시가 맡는 일, Docker 이미지로 배포할 때의 기본형, 로그와 헬스체크, graceful shutdown까지 체크리스트로 다룹니다.