-
Wasm Book 튜토리얼Study/개발 2023. 11. 12. 22:15
이 글에서는 러스트 웹어셈블리(Wasm) 튜토리얼을 통한 학습 경험을 공유하고자 합니다.
이 튜토리얼은 Wasm의 사용과 이점에 대한 통찰을 제공하며 흥미로운 여정이었습니다.
rust-wasm book 링크동기
나는 Rust와 웹어셈블리가 어떻게 협력하여 웹에 고성능 코드를 제공할 수 있는지를 이해하기 위해 이 튜토리얼을 시작했습니다. Web assembly를 브라우저에서 실행하는 것은 웹 개발에 새로운 가능성을 열어주며, 그 가능성을 프로젝트에서 활용하고 싶었습니다.
사전 요구 사항
아래 조건이 필요하지만, 100% 능숙하지 않아도 됩니다.
- 러스트 프로그래밍 언어의 기본 지식.
- 웹 개발과 자바스크립트에 대한 이해.
Wasm이란 무엇인가
웹에서 고성능 어플리케이션을 동작시키기 위해 제안된, 로우레벨 형태의 코드이다.
Fast, safe, portable을 지향한다.
SpecWebAssembly (abbreviated Wasm (https://webassembly.github.io/spec/core/intro/introduction.html#wasm)) is a _safe, portable, low-level code format_ designed for efficient execution and compact representation. Its main goal is to enable high performance applications on the Web, but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well.
주요 내용
튜토리얼의 주요 내용은 다음과 같습니다.
wasm-pack
을 통해 웹어셈블리용 새로운 러스트 프로젝트를 빌드하고 테스트한다.wasm-bindgen
을 통해 JS에서 사용가능한 인터페이스를 만든다.- JavaScript의 가비지 컬렉션 힙과 WebAssembly의 선형 메모리는 서로 다르게 동작한다.
- WebAssembly는 가비지 컬렉션 힙에 직접 액세스할 수 없다.
- JavaScript는 WebAssembly 선형 메모리에 스칼라 값의 ArrayBuffer로만 접근 가능하다.
- Rust로 wasm을 작성할 때 고려해야할 점(중요!)
- wasm 메모리로의 copy를 최소화해야한다.
- serialize, deserialize를 최소화 해야한다.
- 보통, 크고 오래가는 자료구조는 rust로 구현하여 wasm 메모리에서 사용하여 객체 전체를 주고받지 않도로록 한다.
- 컨트롤이 필요한 작업의 경우는 핸들을 JS에 제공한다.
wasm-pack
을 통해 wasm을 빌드하여 생성된 패키지를 자바스크립트로 불러와 사용한다..js
,.wasm
,.d.ts
- Wasm 모듈 테스팅 및 디버깅
- Wasm 모듈 프로파일링, 최적화, 퍼블리싱
튜토리얼은 "Game of life"라는 프로그램을 만드는 방법으로 진행됩니다. 따라가면서 wasm 프로젝트를 어떻게 시작하는지, 어떤 점을 고려해서 사용하는지 등을 한 단계씩 배우게 됩니다.
결론
rust-wasm
튜토리얼은 Rust를 통해 웹 어셈블리를 사용해보려는 개발자에게 좋은 시작입니다. 명확한 설명과 실용적인 예제를 통해 러스트나 웹어셈블리에 경험이 부족한 사람들에게도 접근하기 쉽게 만들어졌습니다.이 튜토리얼에서 얻은 지식을 향후 웹 프로젝트에서 적용하는 일이 있으면 좋겠습니다. 이 글을 읽은 다른 분들도 튜토리얼을 통해 Rust와 웹어셈블리의 동작 방식을 살펴보는데 도움이 되었으면 좋겠습니다.
Happy Coding!
728x90'Study > 개발' 카테고리의 다른 글
React 18 - Transition과 외부 상태 관리 도구 (2) 2023.12.10 React 18 - Transition (0) 2023.12.09 Stop Nitpicking in Code Reviews (번역) (2) 2023.10.20 Typescript 5.3 베타 요약 (0) 2023.10.11 Codeium 사용하기 (0) 2023.06.06