왜 Rust로 WebAssembly 개발을 해야 하나요?

저레벨 컨트롤과 고레벨 개발자 경험

JavaScript 웹 앱들은 안정된 성능을 확보하고 유지하는 데 어려움을 겪습니다. JavaScript 동적 타입 시스템과 가비지 콜렉션 (Garbage Collection) 을 잠시 중단하는 것만으로는 크게 도움이 되지 않습니다. 보기에는 작은 내용의 코드를 수정하더라도 JIT에 치명적인 코드를 작성한다면 드라마틱한 성능 저하를 일으킬 수도 있습니다.

Rust는 JavaScript를 병들게 만드는 비결정적인 가비지 콜렉션 중단으로부터 자유로울 뿐 아니라, 프로그래머들이 간접지정(indirection)과 단일화(monomorphization), 메모리 레이아웃을 컨트롤할 수 있도록 함으로 저레벨 컨트롤과 안정된 성능을 제공합니다.

작은 .wasm 사이즈

.wasm 파일이 네트워크로 전송돼야 하는 점을 고려하면 코드의 파일 사이즈는 매우 중요합니다. Rust는 런타임이 작고 가비지 콜렉터와 같은 불필요한 요소가 없어 .wasm 사이즈를 효과적으로 줄일 수 있도록 해주고, 실제로 사용하지 않는 함수들을 (빌드하는 코드 파일에서) 제외시켜줍니다.

이렇게 코드 파일 사이즈의 관점에서 실제로 사용하는 기능만 출력되는 코드에 포함할 수 있게 됩니다.

모든 내용을 다시 작성하지 말아 주세요

기존에 존재하는 코드 베이스를 지울 필요는 없습니다. 바로 효과를 볼 수 있도록 성능 개선이 중요한 JavaScript 함수들을 먼저 Rust로 옮기는 것으로 시작해 볼 수도 있습니다. 원한다면 거기서 멈춰도 괜찮습니다.

다른 툴과 잘 작동합니다

Rust와 WebAssembly는 기존에 존재하는 JavaScript 툴들과 함께 가장 잘 작동합니다. WebAssembly는 ECMAScript 모듈을 지원하고, 개발 환경에서 npm과 Webpack처럼 기존에 사랑받던 툴들을 계속 사용할 수도 있습니다.

기대할 수 있는 강점들

Rust는 다음과 같이 개발자들이 일반적으로 기대하게 되는 현대적인 편의 기능을 갖추고 있습니다.

  • cargo로 강력한 패키지 관리하기

  • (추가 비용 없이) 이해하기 쉬운 코드를 쓸 수 있게 해주는 추상화

  • 환영하는 커뮤니티! 😊