목차

한 줄 한 줄 짜면서 익히는 러스트 프로그래밍 책 리뷰

도서 증정 이벤트에 당첨된 기념으로 처음으로 독후감을 써볼까 한다.

서론

우선 나는 웹 개발자다. 어렸을때 C언어를 겉핥기로 배우면서 프로그래밍의 기초를 배우고 이후 php를 통해 처음으로 웹 개발을 접하게 되었다. 그 후 자바와 스프링을 배우면서 웹 개발을 본격적으로 했지만 항상 JVM 위에서 돌아가고 보통의 exe 파일이 아닌 jar(또는 war) 파일이 빌드 결과물로 나오는게 내심 복잡하고 어렵게 느껴졌다. 그러던 즈음 구글에서 Go언어를 발표했다. 문법도 간결하고 성능도 준수하고 JVM같은 가상머신이 필요 없는 빌드 결과물이 상당히 매력적으로 느껴졌다. 하지만 당시나 지금이나 Go언어는 자바/스프링 진영보다 국내 시장 점유율이 낮았기 때문에 Go언어를 사용해 일을 할 기회는 많이 없었지만 개인적인 토이 프로젝트나 업무에서 가볍게 쓸 프로그램을 짤 때는 항상 우선순위로 염두해두는 언어가 되었다.

Go 언어가 발표되고 얼마 후에 러스트가 발표되었지만 당시 나는 러스트에 큰 관심이 없었다. 지금은 방향성이 많이 달라졌지만 그 당시엔 Go도 러스트와 동일한 목표를 지향하고 있기도 했고(물론 그때나 지금이나 내가 시스템 프로그래밍을 할 줄 아는 건 아니다), 얕은 지식으로 언어만 이것저것 할줄 아는 어정쩡한 개발자가 될 거 같아 두려웠다. 무엇보다 앞서 얘기한 자바(지금은 Kotlin)/Go만으로도 충분히 만들고자 하는 프로그램을 만들 수 있었다.

그렇게 차츰 러스트가 관심에서 멀어질 때쯤, 디스코드에서 이런 글을 공개했다. 짧게 얘기하자면 정교하게 튜닝된 Go 기반 프로그램보다 러스트로 무난하게 짠 프로그램이 성능이 더 좋았다는 글이다. 디스코드의 글을 읽고 러스트에도 물론 관심이 갔지만 그보다는 내가 GC(Garbage Collection)가 없는 언어를 써본 적이 있나? 라는 의문을 가지게 되었다.

우선 내가 주력으로 쓰고 있는 언어는 다음과 같다.

  • Typescript(js)
  • Kotlin(java)
  • Go

위의 언어들은 모두 GC를 사용하고 있다. 다른 무언가가 필요했다. 하지만 당장 내가 알고 있는 범위 내에서는 C, C++, 그리고 러스트 정도를 제외하면 GC가 없는 언어는 찾기 힘들다. C로 프로그래밍을 처음 접하긴 했지만 이후 자바를 배우면서 전혀 사용하지 않았기 때문에 사실상 내가 쓸 줄 아는 언어는 모두 GC를 사용하고 있었다. 여기까지 생각이 미치자 갑자기 GC가 없는 언어를 하나쯤은 자유롭게 쓰고 싶다는 욕구가 생겼다. 하지만 C는 너무 낡아 보였고 C++은 스펙이 너무 방대해 보였다. 무엇보다 C계열의 언어는 메모리 누수 문제가 악명이 높았기에 선뜻 손이 가지 않았다.

그래서 Rust를 선택했다. 깐깐한 컴파일러와 소유권/대여 컨셉이 덜렁대는 내 코딩 스타일을 잘 보완해 줄 것 같았다. 우선 러스트 공식 가이드를 읽고 간단한 통신 프로그램을 작성하려고 했는데 생각보다 만만치 않았다. 컴파일러는 내 예상보다 훨씬 더 엄격했고 쉽게 컴파일을 허락해 주지 않았다. 가이드에 있는 예제를 따라했을때는 별 문제없이 술술 진행했지만, 막상 내 코드를 만드려니 진도가 너무 느렸기에 공식 가이드만 읽고 가벼운 마음으로 시작한 내가 너무 안일했다는 생각이 들었다.

언어 가이드 책을 사는 건 그리 좋아하지 않지만(보통 도서관에서 대여해서 보거나 인터넷으로 정보를 얻는다) 하나 사서 좀 진득하게 봐야겠단 생각을 하고 있었는데 마침 인사이트에서 Rust in Action 번역본을 출판했다. 그리고 출판 기념으로 증정 이벤트를 진행하고 있었고 감사하게도 당첨되었다.

이 책은 크게 1부, 2부로 나뉘어져 있으며 1부는 언어 특징과 문법에 대한 설명, 그리고 2부는 실제 시스템 프로그래밍을 따라해보며 언어를 직접 익힐 수 있는 예제 중심의 설명으로 진행된다. 이 글은 현재 1부까지만 읽은 후 쓰고 있다. 글의 제목이 독후감인데 서론만 엄청 길었다. 이제 책을 읽은 소감을 짧게 말해보고자 한다.

책 후기

1부 후기

1부는 앞서 말했다시피 언어의 특징과 문법을 중점적으로 설명한다. 근데 막상 읽어보니 왠지 이미 관련 내용을 이미 알고 있는 독자들을 대상으로 썼다는 느낌이 굉장히 강하다. 저자가 공식 가이드가 인터넷에 무료로 풀려있는 걸 의식하고 썼는지 생각보다 내용이 많지 않고 2부에 들어가기에 앞서 간단히 복습을 한다는 느낌이랄까. 언어 기초에 대한 설명은 공식 가이드가 훨씬 친절하다고 느껴졌다. 대신 이 책은 공식 가이드에선 언급하지 않는, 러스트를 배우다가 떠올릴법한 궁금증에 대해서는 어느 정도 설명을 해주는 편이다. 읽다가 기억에 남는 내용은 Copy 트레잇과 Clone 트레잇에 대한 설명과 const와 let의 차이점에 대한 설명이었는데, 무심하게 지나칠법한 내용을 친절하게 설명해주는게 꽤나 즐거웠다.

공식 가이드를 이미 봤거나 언어의 기본 기능에 대해 어느정도 알고 있는 독자는 1부는 생략하고 2부부터 바로 시작해도 괜찮아 보인다. 사실 내가 이 책에 관심을 가지게 된 이유도 2부의 내용 때문이다. 러스트 언어를 익히는것도 목적이지만 시스템 프로그래밍에 대한 막연한 동경이 있었기 때문이다. 아직 2부를 읽기 전이지만 내가 2부를 통해 얻길 바라는 내용은 아래와 같다.

  1. 러스트 언어를 좀 더 자유롭게 사용할 수 있기를
  2. 무의식적으로 의존했던 GC에서 좀 더 벗어나 컴퓨터 친화적인 사고를 할 수 있기를
  3. 웹 개발 중심 패러다임에서 벗어나 좀 더 다양한 패러다임을 접할 수 있기를

고작 책 한 권 읽으면서 바라는게 너무 많은 것 같기는 하지만 일단은 기대해본다.

2부 후기

아직 읽는 중..(커널 개발 챕터를 기대하는 중이다.)