Rust + WebAssembly로 리치 텍스트

문서 코어는 Rust로 두고 WASM으로 배포할 때, IME·선택·입력은 여전히 브라우저가 맡는 경우가 많고, JS↔WASM 경계 비용·동기화 전략을 따로 설계해야 합니다.

개요

에디터 “뇌”를 Rust로 옮겨도 브라우저 편집 특성이 사라지지는 않습니다. 조합 입력, 클립보드 정규화, Selection API, 실행 취소와의 상호작용은 호스트 책임이며, 표면을 통째로 캔버스로 바꾸지 않는 한 contenteditable·입력 이벤트와 함께 갑니다.

이 섹션은 아키텍처와 경계에 초점을 둡니다: 어디서 편집이 일어나는지, IME와 Rust 모델을 어떻게 맞출지, 데이터가 JS↔WASM을 어떻게 넘는지, 협업(CRDT)이 WASM 모듈 옆에 어떻게 붙는지.

언어에 무관한 에디터 설계(스키마, 트랜잭션, HTML 매핑)는 에디터 문서를 보고, 여기서는 Rust 코어 + 브라우저 호스트를 가정합니다.

왜 여러 페이지로 나눴나

  • 에디팅 방식(DOM·캔버스·하이브리드)에 따라 캐럿·IME·접근성 책임 주체가 달라집니다.
  • IME는 브라우저에서 “Rust로 다시 구현”하는 게 아니라, 조합 이벤트에 맞춰 모델을 맞추는 쪽입니다.
  • FFI: 키 입력마다 전체 문서를 넘기면 알고리즘 전에 병목이 납니다.
  • 협업: Rust CRDT + WASM 바인딩과 JS 에디터 호스트가 함께 쓰이는 경우가 많습니다.

사이트 다른 곳과의 관계

시나리오·케이스는 실제 브라우저 동작(IME, 붙여넣기, 선택)을 모읍니다. WASM을 쓰더라도 현상은 같고, 이 가이드는 그걸 Rust 코어와 어떻게 연결할지 설명합니다.

가이드