Leptos는 Rust로 웹프론트 및 서버를 만들 수 있는 풀스택 프레임워크이다.
리액트랑 매우 비슷하다. 아마 리액트에서 영감을 받아 만든것 같다.
리액트의 JSX 처럼 Leptos는 RSX라는 명칭?을 사용한다 공식문서에 대놓고 JSX와 흡사하다고 설명을 해놓았다.
가상돔을 사용하지 않고 DOM을 직접 컨트롤하는부분과 컴파일타임 프레임이라는 점이 Sevelte와 매우 유사한거 같다. (개인적으로 Svelte를 좋아한다.)
Leptos React 비교 AI 정리| 벤치마크 항목 | Leptos | React | 비율 |
|---|---|---|---|
| Create rows | ~1.0x | ~1.5-2.0x | Leptos 50-100% 빠름 |
| Replace all rows | ~1.0x | ~1.5-2.0x | Leptos 50-100% 빠름 |
| Partial update | ~1.0x | ~1.3-1.8x | Leptos 30-80% 빠름 |
| Select row | ~1.0x | ~1.2-1.5x | Leptos 20-50% 빠름 |
| Swap rows | ~1.0x | ~1.3-1.7x | Leptos 30-70% 빠름 |
| Remove row | ~1.0x | ~1.2-1.5x | Leptos 20-50% 빠름 |
| 메트릭 | Leptos | React |
|---|---|---|
| 초기 메모리 | ~2-3 MB | ~4-6 MB |
| 10,000 rows 후 | ~15-20 MB | ~30-40 MB |
| 메모리 효율성 | ~50% 더 적음 | 기준 |
| 항목 | Leptos | React |
|---|---|---|
| 최소 번들 (gzipped) | ~15-25 KB | ~45-50 KB (React + ReactDOM) |
| 크기 비교 | ~60-70% 작음 | 기준 |
컴파일 타임 최적화
Fine-grained Reactivity
WebAssembly
Virtual DOM
JavaScript Runtime
거대한 생태계
Leptos: ~250ms
React: ~450ms
차이: +80% 느림 (React)
Leptos: ~35MB
React: ~75MB
차이: +114% 더 많음 (React)
Leptos: ~150ms (WASM 로드 포함)
React: ~200ms
차이: +33% 느림 (React)
Leptos는 벤치마크에서 일관되게 React보다 1.5-2배 빠른 성능을 보여주며, 특히 대량의 DOM 조작이나 복잡한 상태 업데이트에서 큰 차이를 만듭니다.
React는 여전히 검증된 선택이며, 성능 차이가 체감되지 않는 대부분의 웹 애플리케이션에서는 개발 속도와 유지보수성이 더 중요할 수 있습니다.
이제 본격적으로 Leptos를 시작해보자
# Trunk는 Rust 용 WASM 웹 응용 프로그램 번들러
cargo install trunk
# 프로젝트 이름을 ui로 만든다.
cargo new ui
# 이동
cd ui
# 구조 확인
tree
├── Cargo.toml
└── src
└── main.rs
#웹어셈블리 바이너리 형식으로 빌드할 수 있도록 필요한 도구(타겟)를 설치
rustup target add wasm32-unknown-unknown
Cargo.toml에 의존성을 추가해준다.
[package]
...
[dependencies]
# leptos 추가 (Client Side Rendering을 하는 앱을 위해 features를 csr 로 하였다.)
leptos = { version = "0.8.15", features = ["csr"] }
프로젝트 최상단에 index.html을 만든다.
├── Cargo.lock
├── Cargo.toml
├── index.html # 생성
└── src
└── main.rs
<!doctype html>
<html>
<head></head>
<body></body>
</html>
use leptos::prelude::*;
fn main() {
leptos::mount::mount_to_body(|| view! { <p>"Hello, world!"</p> })
}
# 실행
trunk serve
터미널에 표시된 주소를 열면 잘 내용이 잘 나오는걸 볼 수 있다.

음 근데보니깐, 프론트 처음로딩시 wasm 바이너리때문에 얘가 커지면 초기로드가 좀 느린거같네요