가장 사랑받는 언어 Rust :: Udemy 'Rust Programming 핵심 강의' 후기

숑숑·2024년 3월 31일
12

Rust

목록 보기
1/1

해당 콘텐츠는 유데미로부터 강의 쿠폰을 제공받아 작성되었습니다.

가장 사랑받는 언어 1위 'Rust'

해외에서 Rust라는 언어가 굉장히 인기라고 들었습니다.
언어 트렌드야 워낙에 빨리 바뀌니 꼭 배워야겠다고 생각하진 않았는데요,

StackOverflow에서 '가장 사랑받는 언어'로 무려 8년이나 연속 1위를 하고 있습니다.
뿐만 아니라 Linux 커널에 Rust가 병합되고 있고,
구글이 안드로이드 OS 코드에 Rust를 통합하고 있습니다.

대체 왜 이리 열광하는건지 직접 배워보고 싶었습니다.

감사하게도 글또 x Udemy 협찬으로 Rust 강의를 무료로 들어볼 수 있는 기회가 생겼습니다. (감사합니다!!)

Rust 언어에 대해 느낀 점과, 강의 후기에 대해 적어보려 합니다.


Rust

Rust는 러닝커브가 높다?

Rust는 러닝커브가 높다, 낮다에 대한 토론이 거의 없었습니다.
모두가 하나같이 러닝커브가 매우 높다고 하고 있었는데요,
직접 배워보니 머리가 아픈 순간이 많긴 했습니다.

제가 생각했을 땐 소유권(ownership)의 개념이 큰 장벽으로 작용하지 않았을까 싶습니다.
(마치 C를 처음 배울 때 포인터에서 좌절하는 것처럼요)

Rust의 인기 비결, 소유권(ownership)

소유권(ownership)이란?
프로그램의 메모리 누수를 막기 위한 Rust의 메모리 관리 모델로, 가비지 컬렉션(Garbage Collection) 없이도 메모리 안전을 보장합니다.
함수 스코프 종료 시 함수가 소유한 메모리(변수)를 책임지고 정리하게 합니다.
변수의 소유권은 다른 함수로 이동하거나, 빌려줄 수 있습니다.

  • 소유권을 이동한 경우: 다른 함수에 파라미터로 넘겨서 소유권을 이동시킨 후, 해당 변수 참조 시 아예 컴파일이 되지 않습니다. (메모리 누수에서 안전한 이유)
  • 소유권을 빌리는 경우: 해당 변수는 함수 종료 시 소멸되지 않고 유지됩니다.

모든 프로그램은 실행 중 메모리를 관리해야 합니다.
Java 등의 고급 언어에는 메모리를 정기적으로 정리하는 가비지 컬렉션(GC)이라는 기능이 있지만, 이게 없다면 프로그래머가 명시적으로 메모리를 할당/해제해야 합니다.

그러나 C로 프로그램을 작성해본 경험이 있다면 아시겠지만, 프로그래머가 직접 메모리를 관리하면 메모리 누수에 너무 쉽게 노출됩니다.

메모리 누수란:
데이터를 메모리에 올렸다가, 쓸모를 다한 시점에 해제되지 않고
불필요하게 힙(Heap) 영역 메모리를 차지하고 있는 상황을 말합니다.

프로그래머가 주의를 기울여서 메모리를 관리하면 되긴 하지만, 사람의 노력이 너무 많이 들어갑니다. 그리고 인간은 실수의 동물이죠
언제든지 댕글링 참조(Dangling Reference)에 노출되게 됩니다.

그래서 고급 언어들에는 가비지 콜렉션이라는게 생깁니다.
프로그래머는 아무 생각 없이 메모리를 사용하게 하고, 메모리 정리는 프로그램을 아주 잠깐 멈춰서 하겠다는거죠.

당연히 직접 메모리 관리하는 것 보다야 가비지 콜렉션이 메모리 관리 효율은 떨어집니다.
그래도 단점이 너무 명확하니까 대부분의 현대 언어는 해당 방식을 사용하고 있습니다.

그런데 여기서 Rust가 둘중 어느 쪽도 아닌, 제 3의 관점을 제시합니다.
그게 바로 위에서 설명한 소유권이라는 개념입니다.

소유권은 가비지 컬렉션 없이도, 프로그래머가 수동으로 메모리 할당/해제하지 않아도 되게끔 해줍니다.
휴먼 에러의 가능성은 강한 컴파일로 막고, 성능까지 모두 챙기게 해준 엄청난 개념입니다.
메모리 누수를 런타임에 맞이하지 않고, 컴파일 에러로 미리 예방하게끔 해줍니다.

Rust의 단점

개인적으로 느낀 단점들은 크게 두가지인데, 사실 다 장점 때문에 나온 것들이긴 합니다.

  1. 어렵습니다.
    소유권이라는게 메모리 관리 관점에서는 새로운 개념이다 보니 익숙해지는데 시간이 좀 걸립니다.

  2. 코드 작성에 많은 시간이 걸립니다.
    안정성을 강하게 보장하려 하기 때문에 여러가지 제한이 많습니다.
    문법도 다른 언어에 비해 복잡한 편입니다.

그러나 성능과 안정성을 중요시 한다면, 모두 감수할 가치가 있는 단점이라고 생각합니다.


강의 후기

강의 링크

강의 구성

강의는 총 10시간 57분으로, 10개 섹션으로 이루어져 있습니다.
크게 아래 흐름을 반복하며 이루어집니다.

개념 소개 > 직접 실습 문제 풀이 > 강사 풀이 공개

이 강의에서 가장 좋았던 부분이 수강생이 직접 실습 문제를 Rust를 작성하여 풀어보게 하는 것입니다.
강의에서 Rust 개념별 실습 문제를 모아담은 Github Repository를 제공해주고, 강사 풀이를 보기 전에 먼저 풀어보기만 하면 됩니다.

그리고 강의가 끝날 때면 실습 파일을 모두 Rust로 작성한 개인 Repository를 얻게 됩니다!
(두고두고 참고하기 좋을 것 같습니다)

작성자의 Rust 실습 Repository:
https://github.com/lauvsong/rust-programming-for-beginners

실습 프로젝트

Rust 코딩 근육을 키우는데 가장 큰 도움이 됐던 부분입니다.
단순 개념별 실습이 아니라 프로젝트 과제도 제공하는데요,
그 중 하나가 메뉴형 청구서 어플리케이션을 구현해보는 것이었습니다.

Rust로 다른 프로그램도 만들어볼 수 있겠다는 자신감을 얻었습니다.
(개인적으로 커맨드라인 툴 하나 만들어보고 싶네요.)


강의 후기 정리

딱히 단점이랄게 떠오르지 않아, 장점만 정리드리겠습니다.

영어로 진행된다. 그리고 자막 퀄리티가 좋다.
자막이 있어 영어 때문에 걱정은 안 하셔도 됩니다.
영어로 진행되는 것도 장점이라고 생각하는게, 코딩 개념을 한글 번역체보다 원문 단어 그대로 배우는게 더 도움이 될 때가 많습니다.
그리고 영어 딕션도 또렷하고, 정석 미국식 발음이라 자막 없이도 꽤 잘 들리는 편입니다.

실습 위주다.
프로그래밍 배울 때는 직접 짜보면서 배우는게 효율적이라고 생각합니다.
Rust 코딩 근육 키우면서 배우기에 최적화된 강의입니다.

초보자 눈높이에 맞춰져있다.
프로그래밍을 Rust로 처음 배우는 것까지 고려한 강의입니다. (자료구조 개념도 조금 다룹니다.)
동시에 중급/고급 개념도 모두 포함되어 있으니 수강생 수준에 관계없이 적합한 강의입니다.

profile
툴 만들기 좋아하는 삽질 전문(...) 주니어 백엔드 개발자입니다.

0개의 댓글