Rust?

rust-bg

Rust는 모질라 리서치에서 개발한 성능, 안전성, 동시성 이 세 가지 목표에 집중하여 개발된 현대적인 시스템 프로그래밍 언어이다. 가장 중요한 모토는 “C++ 와 같은 저수준 언어의 빠른 속도와 제어 능력을 가지면서도, 메모리 버그로 인한 고질적인 문제를 해결하자” 이다. 비유하자면 Rust는 “안전벨트가 내장된 F1 머신” 이다.

이러한 이유로 나는 현재 Rust를 공부하고 있으며, 현재 이 블로그도 Rust의 Leptos 라는 풀스택 프레임워크로 만들었다. (나의 github 를 확인해보자.)

그렇다면 Rust가 왜 좋은지, 어떻게 강점이 되는지, Rust가 최고인지 확인해보자.




Rust 의 강력함

rust power

1. 안전성

이것이 Rust를 다른 언어와 구별 짓는 가장 중요한 부분이다. Rust는 소유권 이라는 독특한 시스템을 통해 메모리 안전성을 보장한다. 이로인해 C 나 C++에서 개발자들을 괴롭혀온 널 포인터나 허상 포인터, 데이터 레이스 같은 메모리 관련 버그들이 컴파일 단계에서 원천적으로 차단된다.

2. 성능

또한 Rust는 시스템 프로그래밍 언어로서 성능이 뒤지지 않는다. 특히나 C/C++ 처럼 기계어로 직접 컴파일 되므로 매우 빠르다. 또한 가비지 컬렉터가 없으므로 프로그램 실행 도중 예측 불가능한 멈춤 현상이 없으며 저수준 언어이기에 메모리를 직접 제어하고 하드웨어를 최대한 활용할 수 있다. 얼마나 빠르냐 하면 C/C++ 다음으로 빠르며, 그 차이는 미미하다.

3. 동시성

Rust는 멀티코어 프로세서를 안전하고 쉽게 활용할 수 있도록 설계되어있다. 소유권과 빌림 검사기 규칙은 여러 스레드에서 데이터를 공유할 때도 똑같이 적용되기에 컴파일러가 여러 스레드가 동시에 데이터를 수정하려는 위험한 상황(데이터 레이스)을 막아주기 때문에, 개발자는 안심하고 병렬 처리 코드를 작성할 수 있다.

이로 인해 Rust가 주로 사용되는 분야로는

  • 웹 백엔드: 빠르고 안정적인 웹 서버, API 개발
  • 명령줄 도구(CLI): ripgrep, bat 등 많은 유명한 CLI 도구들이 Rust로 만들어짐
  • 웹어셈블리(WebAssembly): 웹 브라우저에서 네이티브에 가까운 속도로 코드를 실행하기 위해 널리 사용
  • 임베디드 시스템: 마이크로컨트롤러나 IoT 기기 프로그래밍
  • 블록체인: 솔라나, 폴카닷 등 많은 블록체인 프로젝트의 핵심 언어로 사용됨
  • 게임 개발: 게임 엔진 및 고성능이 요구되는 게임 로직

이렇게 된다. 그렇다면 이 만큼 좋은 기능을 가진 Rust가 결국 C++ 를 대체하여 하나의 권위적인 언어로 대체되는게 아닌가?




허나 현실적으로는…

rust is good!

앞서 말했듯 Rust 는 성능과 안정성을 둘 다 잡은 언어이다. 그러나 왜 많은 사람들은 Rust 를 배우고자 하지만 배우지 않는것일까?

1. 가파른 학습 곡선

Rust는 배우기 어려운 언어로 악명이 매우 높다. 특히나 위에서 말한 “소유권” 과 “빌림 검사기” 같은 개념은 다른 언어에 익숙한 개발자에게도 생소하고 큰 장벽이 된다. 또한 복잡한 개념(라이프 타임, 포인터, 트레잇 등)들이 다수 존재하기 때문에 마스터하기 어려운 언어로 수많은 개발자들에게 각인되어있다.

2. 느린 컴파일 시간

Rust 컴파일러는 안전성을 보장하기 위해 엄청 많은 작업을 수행한다. 이 때문에 다른 언어에 비해 컴파일 속도가 느린 편이다. 프로젝트 규모가 점점 커질수록 코드를 조금 수정하고 결과를 확인하는 데까지 기다리는 시간이 길어진다. 이는 빠른 반복이 중요한 프로토타이핑 단계에서 답답함을 유발할 수 있다. 물론 증분 컴파일이나 cargo check와 같은 도구들이 이를 완화해주지만, 파이썬 같은 인터프리터 언어나 Go처럼 컴파일이 빠른 언어들과 비교하면 여전히 느리다.

3. 작은 규모의 생태계

이전에 말했듯이 자바(Java), 파이썬(Python), 자바스크립트(JavaScript) 같은 주류 언어들과 비교하면 아직 생태계의 규모가 작다. 특히나 라이브러리가 부족한 경우가 다수 있고, 직접 만들어야 하는 경우가 많은데 이는 개발 시간을 늘리는 요인으로 된다.

4. 코드의 장황함

안전성과 명확성을 강조하기 때문에 다른 언어보다 코드가 길어질 수 있다. 예를 들어 Result와 match를 사용한 명시적인 에러 처리는 매우 안정적이지만 try-catch 구문에 비해 코드가 장황해 보인다.(? 연산자가 있긴 하나 장황해 보이는건 매한가지.) 또한 라이프 타임을 명시해줘야 할 때가 있기 때문에 이것도 코드를 더 복잡하게 만든다.

결론

이로인해 Rust는 초기 개발 단계에서 다른 언어들 보다 더 많은 시간과 노력을 요구하며, 그 대가로 런타임 안정성과 높은 성능을 얻게 되는 “상충 관계“가 명확한 언어이다. 또한 언어 뿐만 아니라 다른 외적인 부분도 확인을 해야 진정한 가치가 나온다.

그러니 Rust 가 좋다고 C++ 를 대체할 수 없다. 생태계나 라이브러리의 규모가 C++ 보다 적고, 하물며 기존에 C++ 로 운영하는 기업들이 다수 존재하며, 그러한 기업들이 기존의 틀을 버리고 그 어려운 Rust로 변경할 필요가 없기 때문에 Rust 를 배운다는게 취업이나 이직에 있어서 강점 또한 될 수 없다. 만약 “Rust 를 배우고 고액연봉을 받는 회사로 가고싶다“는 생각을 하고 있다면 다시 생각하길 바란다.




그러면 너는 왜 Rust 고름?

loved tech

이 질문에 대한 이유가 딱히 있을까?

처음 프로그래밍 언어를 선택하는 사람들 대부분은 JavaScript 혹은 Python으로 선택 하는데 Python 선택한 사람한테 “왜 JavaScript 말고 Python 고름?” 이라고 질문하는게 얼마나 하찮은 질문인지 알 것이다.

고르는데 이유가 딱히 필요없다. 물론 많은 이유가 있을 테지만 난 그저 “자신이 매력적으로 생각하여 배우고자 하는 언어” 이걸로 충분하다고 생각한다. 누구는 Rust를 하고싶어서, 누구는 C++를 하고싶어서 선택하게 된다. 그리고 그 선택으로 인한 시련과 절망은 선택한 사람의 몫이기 때문에 다른사람이 왈가왈부할 필요는 없다고 본다.