![]() 이 책은 처음 러스트를 접하는 사람들에게 다소 어렵게 느껴질 수 있습니다. 예제들이 난이도가 있어 이해하는 데 시간이 걸리지만, 저자의 풍부한 경험과 통찰을 바탕으로 한 설명은 매우 인상적입니다. 특히, 다른 책이나 강의들에서는 쉽게 접하기 힘든 저자의 깊이 있는 생각과 실무 경험을 함께 제공한다는 점에서 큰 가치를 느꼈습니다. 저는 예제 코드를 ChatGPT에 직접 입력해가면서 저자의 의도를 이해하고, 결과를 확인하는 과정을 통해 책을 끝까지 읽었습니다. 비록 시간이 걸리긴 했지만, 그 과정에서 러스트에 대한 깊은 이해를 얻을 수 있었습니다. 처음에는 어렵게 느껴질 수 있지만, 이 책을 끝까지 읽고 이해한다면 러스트에 대한 실력과 이해도가 크게 향상될 것이라고 확신합니다. |
|
성경에 "깨달은 마음으로 다섯 마디 말을 하는 것이 일만 마디 방언으로 말하는 것보다 낫다"라는 말이 있습니다. 속뜻은 제가 잘 알지 못하지만, 언젠가 부터, "깨달은 다섯 마디"라는 말은 개인적인 의미를 갖게 되었습니다. 그 때문에 책을 읽고 리뷰를 할 때나 또는 후배에게 조언을 건넬 때는 스스로 깨달은 말을 하는지 곱씹어 보곤 하지요. 또한, "깨달음"의 이야기를 좋아하고 그런 이야기를 하는 책을 선호하는 편이기도 합니다. 그리고 운좋게 그런 "깨달음"을 이야기하는 책을 만나면, 읽는 내내 기분이 좋더군요. <러스트 프로페셔널 코드>를 읽으면서도 기분이 좋았습니다. 제가 느끼기에 이 책도 "깨달음"을 이야기하는 책이었거든요. 저자는 러스트를 사용하는 개발자가 초보에서 전문가로 넘어가는 지점에서 깨닫게 되는 노하우나 핵심 개념들을 빠르게 짚어주고 있습니다. 우리가 프로그래밍을 한다고 하면 의례 코드 자체만을 신경쓰는 편인데, 사실 전문가가 되려면, 코딩 과정 자체도 손에 익어야 할 필요가 있습니다. 그래서 고수들 중에는 vi나 emacs를 선호하는 경우가 많은 것 아닌가 싶군요. 이런 어려운 에디터가 아니라도 vscode를 사용하면서 좀더 빠르게 그리고 의식하지 않을만큼 익숙하게 연습할 필요가 있습니다. 저자는 이부분에 대해서 저와 같은 생각을 가지고 있는 것 같습니다. 3장을 할애해서 이런 방향으로 이야기를 전개합니다. 게다가 단위 테스트와 통합 테스트에 대해서 언급하는 부분도 인상적이었습니다. 사실 러스트라는 언어는 컴파일하는 시간이 꽤 긴것으로 알고 있는데요. 이런경우 실시간으로 TDD를 어떻게 사용할지 개인적으로 의문을 가지고 있었거든요. 물론 다른 테스트에 관한 책에 비해서 깊은 내용을 담고 있지는 않지만, 러스트에서는 테스트를 이렇게 하면 되겠다 하는 개념을 잡을 수 있어서 좋았습니다. 책의 중반 이후에는 "비동기"라는 화두로 시작해서 REST API와 최적화를 이야기하며 책을 마무리 하고 있습니다. 러스트는 웹쪽이 아니라고 하더라도 리눅스, 윈도우와 같은 OS 코어를 작성하는 쪽에도 사용하는 것으로 알고 있는데요. 이렇게 REST API쪽으로 이야기하는 건, 아마 그 방향으로 저자가 관심을 가지고 있는게 아닌가 싶군요. 그리고 의외로 러스트를 기반으로 한 백엔드 프레임워크도 여럿 있는 것으로 알고 있고요. 게다가 이 책에서는 언급되지 않지만 웹어셈블리를 쓸때도 러스트를 사용해서 작성할 수 있다는 걸 들어 알고 있습니다. 4,5년전 부터 러스트와 Go언어 그리고 엘릭서에 관심을 가지고 있습니다. 최근에 나온 언어이기도 하지만 많은 관심을 받고 있기도 하고 사용하는 사람도 많은것 같기 때문인데요. 요즘 우리나라에 출판되는 책의 분량으로 봤을 때 아무래도 러스트를 먼저 공부해야 하는게 아닌가 싶네요. 꾸준히 많은 책이 나오는 걸 봐서, 러스트를 많은 사람들이 사용하고 있고 책을 쓸만큼 노하우가 쌓인 사람들도 많아지고 있다는 반증이 아닐까 싶거든요. |
|
오늘은 러스트에 대한 도서 리뷰를 남겨본다. 제목은 "러스트 프로페셔널 코드"이며, 번역서이고 원서 제목은 "Code Like a Pro in Rust"인데, 뜻 그대로 "Rust로 전문가처럼 코딩하기"이다. 원서가 무려 올해 3월말에 나온 책인데, 거의 4개월만에 국내 번역서가 나왔다는 사실이 굉장히 놀랍다. 정말 세상의 움직이는 속도가 빨라졌다는걸 새삼 실감한다. ^^ 본 도서는 완전 초보자를 위한 도서는 아니며, 초급이나 중급 수준의 러스트 개발자들이 러스트를 더 잘 쓸 수 있도록 하는 지식을 담은 책이라 할 수 있다. 나도 뭐 이제 러스트에 대해 완전 왕초보라고는 할 수 없으니 나도 읽어도 될 것 같아서 선택을 하여 읽어보게 되었고, 결론부터 말하자면 읽어보길 잘했다는 생각이 든다. ![]() 여담이지만, 도서 초반에 '러스트적(Rustaceous)'이라는 표현이 나오는데, Rust를 사용하는 개발자들을 Rustacean이라고 부르는건 알았지만, 이제는 형용사까지 만들어서 쓰는지는 처음 알았다.ㅎㅎ Rustacean라는 표현도 crustacean<갑각류>라는 단어에서 따온 것이고, Rust 언어의 공식 마스코트인 Ferris라는 게(crab)도 갑각류라는 사실이 참 재미있다. (찾아보니 Ferris 비공식 사이트도 있었다^^;) ![]() ![]() Ferris 비공식 사이트 (https://rustacean.net/) 게다가 Stack Overflow의 2023년 Survey에 따르면 모든 프로그래밍 언어 중에서 Rust 언어가 가장 존경받는 언어로 뽑혔고, Rust를 선택한 사람 중 80%가 내년에도 다시 사용하고 싶은 언어라고 이야기했다고 하니, Rustacean들이 앞으로 점점 더 많아질 것은 시간 문제라 예상된다. 물론 아직까지 우리 나라에서는 Java나 Python의 인기에 턱없이 미치지 못하지만, 그럼에도 주변에서 보면 Rust 언어에 대한 언급이 슬금슬금 점점 더 늘어간다는 느낌이 든다. 본 도서는 그러한 러스트 언어의 인기에 걸맞게 더욱 Pro답게 쓰기 위한 내용들을 담고 있는 도서로서, 러스트의 장점이자 특징인 메모리 관리, 비동기 프로그래밍과 같은 중요 기술들을 주로 다루고 있다. 그렇지만 러스트 언어에 대한 대략적인 개요와 특징, 그리고 Cargo와 같은 기본 도구에 대한 기본적인 설명도 살짝 담고 있다. 러스트는 특히 시스템 프로그래밍에 적합하다. 리누스 토발츠 아저씨가 2022년 12월, 드디어 Rust를 Linux Kernel 6.1 버전에 빠르게 반영했을만큼 메모리 안전성이 높고, 성능이 좋기 때문이다. 그러나 러스트 언어도 단점은 있다. 도서에서도 언급하고 있듯이 플랫폼에 종속적인 바이너리로 컴파일되기 때문에 런타임 인터프리터가 없고, GUI 개발 도구가 아직 부족하여, 다른 언어에 대해 GUI 개발이 제한적이다. 무엇보다, 소유권과 대여의 개념, 비동기 프로그래밍의 복잡성 등으로인해 제대로 구현을 하기 위해서는 러닝 커브가 높고, 아직 관련 라이브러리나 적용 사례가 상대적으로 부족하다. 그렇기 때문에, 본 도서는 이러한 러닝 커브를 줄여나갈 수 있도록 관련 지식과 예제 코드들을 제공하고 있으며, 본 도서를 통해 Rust를 보다 효과적으로 잘 사용할 수 있도록 가이드 받을 수 있다. ![]() 1장에서 러스트에 대한 소개를 간단히 다룬 이후, 2장부터 본격적인 러스트 개발에 대한 내용을 다루고 있는데, 2장에서는 Cargo 패키지 관리 도구를 활용하여 Rust 프로젝트를 다루는 방법과 의존성 제어, 라이브러리 활용 및 rustdoc을 활용한 러스트 코드 문서화 등을 다룬다. 참고로, rustdoc은 러스트 코드 문서화를 위한 개발자 도구로서 javadoc이나 docstring에 매칭되는 도구이다. 3장에서는 rust-analyzer, rustfmt, lint 기능을 제공하는 Clippy 등 몇 가지 핵심적인 러스트 언어 도구를 소개한다. 특히 rust-analyzer는 러스트 언어를 위한 에디터 도구이며, VSCode에서 확장 도구로서 설치가 가능하다. rust-analyzer는 러스트 언어에 맞도록 문자열 서식이나 디버그 출력을 빠르게 제안해 주는 자동 완성 기능을 제공해 주며, 이러한 도구를 활용하면 실수를 줄이고 개발 속도 또한 향상될 수 있다. 그 외에도 fuzzing 테스트를 지원해주는 cargo-fuzz, 패키지를 최신으로 업데이트해주는 cargo-update, watch dog과 같은 기능을 지원해주는 cargo-watch 등의 유용한 도구도 간략히 설명하고 있다. ![]() ![]() 4장과 5장에서는 러스트의 데이터 구조 중 문자열, 벡터, 맵 등에 대한 핵심 내용과 내부적인 데이터 구조와 힙, 스택 기반의 메모리 관리에 대해 살펴보고 있다. 사실상 4장부터가 러스트 언어에 대한 본격적인 설명이라 할 수 있다. 특히, 러스트만의 새로운 개념인 소유권과 대여에 대한 부분을 5장에서 다루고 있어, 5장은 러스트 전문가로 도약하기 위해서는 필수적으로 숙지해야 하는 chapter라 할 수 있다. ![]() Rust의 소유권과 대여에 대한 개념 설명 부분 6장에서는 단위 테스트에 대한 내용을 다룬다. 더 나은 코드 품질 향상을 위해 오류 발생을 사전에 막기 위해 가장 필요한 활동 중 하나가 바로 단위 테스트이다. 러스트에서의 단위 테스트는 다른 언어와 어떻게 다른지, 그리고 러스트의 단위 테스트 수행 시 하지 말아야 할 일은 무엇인지, 그리고 병렬 코드를 사용한 단위 테스트 방법은 무엇인지 등 러스트 언어의 특성에 맞는 단위 테스트 방법과 전략에 대해 소개하고 있어 매우 유용하다. 개인적으로는 이번 러스트 책의 내용 중 6장의 단위 테스트 내용이 7장 통합 테스트(fuzz 포함) 및 8장(비동기)과 더불어 가장 중요한 내용이 아니었나하는 생각이 든다. 내가 개발한 코드가 요구사항에 맞게 정확히 잘 동작하고 있는지를 항상 잘 테스트해야 하기 때문이고 러스트에 맞게 설명하고 있어서이다. (그리고 여기에 하나를 더 추가한다면, 이에 훗날 벌어질 빈번한 코드 수정 업데이트를 위해 유지보수의 용이성 측면에서의 설계 및 구현도 중요하다.) ![]() 이 책의 핵심 중 하나인 비동기 방식에 대해서는 8장에서 설명하고 있다. _await와 async 키워드와 select(), join(), spawn() 메소드를 통해 동시성과 병렬성을 컨트롤할 수 있다. 8장은 개념을 익히는 부분인만큼 도서의 예제 내용을 실습해도 좋겠지만, 나처럼 눈으로 잘 따라가면서(눈파일러^^;) 코드를 이해하는 것으로도 충분히 의미가 있는 chapter라고 생각한다. 9~10장은 예전에 리뷰한 도서에서도 다루었던 axum 웹 프레임워크와 axum에서 사용하고 있는 hyper 크레이트(라이브러리/패키지)를 이용하여 HTTP REST API 서비스와 HTTP REST API 명령행 도구를 만드는 내용을 담고 있다. 9장에 대한 실습 예제는 존재하지만 HTTP REST API 서비스를 개발하기 위한 학습 자료는 이 내용만으로는 조금 부족하다고 생각되고, 러스트를 활용하여 웹 서비스를 만드는 내용을 자세히 담은 다른 도서를 추가로 참고해도 좋을 것 같다. 그리고 마지막 chapter인 11장 최적화에는 러스트를 사용할 때 최적화가 필요한 몇 가지 상황에서 사용할 수 있는 최적화 전략에 대해 소개하고 있다. ![]() 결론적으로 본 도서는 다음과 같은 사람이 읽으면 좋을 것 같다.
내 경우, 회사 업무 수행 시 Rust를 활용할 일은 없어서 Rust 언어는 본 도서 등을 통해 주로 개념과 문법에 대한 실습 위주의 지식 베이스까지만 학습을 진행하고 더 이상으로 본격적인 개발에는 아직 시간 투자를 거의 못하고 있지만(그 외에도 할게 너무 많다. ^^;), 보안 업무를 하고 있는 사람으로서 상대적으로 Rust 코드가 보안 취약성 측면에서 더 안전하기 때문에 Rust 언어에 대한 나의 관심은 계속 되고 있는 상황이다. (언젠가는 나 또한 본격적으로 Rust를 활용할 날이 오지 않을까...) 모쪼록, 메모리 사용에 있어 보다 안전하고 병렬 처리나 성능 측면에서 좋은 Rust 언어가 여러 프로젝트에서 더 많이 사용되었으면 하고, 또한 본 도서가 그러한 Rust에 대한 지식 확산과 전문가 양성에 기여할 수 있었으면 좋겠다. |
|
[책리뷰] 러스트 프로페셔널 코드 Code Like a Pro in Rust ![]()
전반적인 소감 및 마음에 드는 부분국내에서 러스트 사용자들이 점점 늘아나면서 관련 책들이 계속해서 나오고 있다. 기초 개념부터 특정 주제에 집중한 책까지 다양하다. 이 책은 러스트 언어에 대한 기초 개념 소개는 아니고 실제로 사용하는 방법에 초점을 맞추고 러스트 도구의 한계와 개발자가 러스트를 사용하여 신속하게 생산성을 높일 수 있는 방법을 제안한 책이다. 정확히는 러스트를 많이 사용해본 개발자의 경험을 토대로 작성한 책이라고 보면 되겠다. 특히 중간중간 나오는 코딩 팁들은 매우 유용하다. 책의 처음부터 끝까지 'Rust에는 이런 것들이 있는데, 내가 써보니 이런게 문제고 이거는 이렇게 쓰면 좋더라' 라는 형식으로 구성되어 있다. 특히 소유권에 대해 이렇게 잘 설명해주는 책이 또 있었나 싶을 정도였다. ![]()
대상 독자 및 책 난이도기본적으로 러스트를 조금이라도 해본 개발자들을 대상으로 한다. 러스트는 커녕 메모리 관리 언어를 해본 적도 없는 개발자들에게는 읽기 어려울 수 있다. 위에서 언급했듯이 기능에 대한 배경 설명은 거의 없기 때문이다. 반면 러스트를 조금이나마 해봤다면 읽는데 어려움은 없다. 오히려 바로 선배가 코드를 알려주는 느낌으로 수월하게 읽을 수 있을 것이다. 이 책은 다양한 도구의 소개와 더불어 개발 과정에서 겪게 될 상황에 대한 조언을 담고 있기 때문이다. 실용적이면서도 깊이 있는 해설을 통해 언어를 깊이 있게 이해하도록 도와주며, 생태계의 다양한 면면을 살펴봄으로써 보다 넓은 시야를 갖고 문제를 해결할 수 있도록 안내해준다. 정리하자면 제이펍 출판사에서 나온 '러스트 프로그래밍 공식 가이드' 책을 읽고 난 다음에 이 책을 읽기를 권장한다.
다루는 내용과 범위굳이 순차적으로 읽을 필요는 없다. 메모리 관리, 비동기, 최적화 파트가 핵심이라고 본다.
결론러스트 사용자가 아직 많지 않기 때문에 이런 식의 조언이 가득 담긴 책은 매우 도움이 된다. 물론 본인이 직접 사용해봤을때 다른 점들도 있을 것이다. 그러나 저자가 말했듯이 러스트를 처음 접할 때 직면하는 일반적인 함정과 문제를 피함으로써 많은 시간을 절약할 수 있을 것이다. 본래 개척하는 것이 가장 어렵다고 생각한다. 이렇게 미리 경험하고 시행 착오를 겪고 발생한 문제와 해결 방법을 정리하여 많은 사람들에게 알려주는 사람들을 대단하다고 느낀다. 그렇기에 좋은 책을 집필해준 저자 브랜든 매슈스에게도 감사의 말을 올린다. |
|
러스트 기본서를 보고 난 후, 러스트 실력을 한 단계 올리고자 한다면 이 책을 추천한다. 러스트의 데이터 구조, 메모리 관리, 소유권 개념 등 중요한 러스트 철학을 이해하도록 돕고, 실용적인 러스트 도구부터 디자인 패턴, 코드 분석과 테스트까지 관련 팁이 가득 담겨서 아주 유용하다. 러스트 기본서와 함께 한 권 갖고 있으면 든든한 책. |
|
러스트(Rust) 언어는 " 파이썬과 비교하면 배우는 러스트 프로그래밍" 이라는 책을 통해서 접했고 그 이후 러스트 프로페셔널 코드 책을 접하게 되었습니다. 옮긴이 장연호 개발자님의 머리말처럼 이 책은 러스트를 먼저 접해본 개발자가 이제 막 러스트를 접하면서 할 수 있는 문제점, 할 수 있는 실수 등을 미리 알려주는 것이 요점인 듯싶습니다. 책의 구성 특징 책 차례를 보면 "~인가?"와 "~하기"라는 유형이 많습니다. 이는 러스트 기본서를 중심에 두고 옆에서 보조할 책이라는 인상을 줍니다. 쉽게 말해 팁으로 채워진 책입니다. 유용한 부분 개인적으로는 3장 "러스트 도구 이용하기" 구간이 유용했습니다. 배우는 입장에서 수많은 도구에 대한 대략적인 그림을 그리기 어려웠는데, 이 책을 통해 어느 정도는 머릿속에 그림이 잡히기 시작했습니다. 책의 장점 브렌든 매슈스 개발자의 짧은 책 소개 글처럼 함정과 문제를 피할 수 있는 단서를 제공해 준다는 점이 책을 읽다 보니 느껴집니다. 주의할 점 다만 검색을 어려워하는 이들에게는 막막한 책일 수도 있습니다. 여기서는 배경 설명이 많이 빠져 있고 팁과 힌트 등으로 구성된 책 내용이라, 깊게 들어가고자 할 때 책에 나온 단어와 문장 등을 기반으로 러스트 커뮤니티, 구글 검색으로 채워나가야 하기 때문입니다. AI의 도움 하지만 이제는 ChatGPT, Gemini, Claude, Perplexity AI 등의 도움을 받아 좀 더 정리된 내용을 접할 수 있으므로 예전보다는 훨씬 쉽게 나아갈 수 있는 환경이 되었습니다. |