--- id: frontend-solid-qwik-deep title: SolidJS / Qwik β€” signal-based reactivity category: Coding status: draft source_trust_level: B verification_status: conceptual created_at: 2026-05-09 updated_at: 2026-05-09 tags: [frontend, solid, qwik, vibe-coding] tech_stack: { language: "TS", applicable_to: ["Frontend"] } applied_in: [] aliases: [SolidJS, Qwik, signals, fine-grained reactivity, resumability, no VDOM] --- # SolidJS / Qwik > React 의 future. **Solid (signal, no VDOM), Qwik (resumability, 0 hydration)**. Modern reactivity primitive. ## πŸ“– 핡심 κ°œλ… - Signal: reactive primitive. - Solid: compile-time + signals. - Qwik: lazy hydrate (resumability). - React Compiler κ°€ λΉ„μŠ· path. ## πŸ’» μ½”λ“œ νŒ¨ν„΄ ### Solid ```tsx import { createSignal, createEffect } from 'solid-js'; function Counter() { const [count, setCount] = createSignal(0); createEffect(() => { console.log('count:', count()); }); return ; } ``` β†’ `count()` κ°€ function. Component κ°€ 1번 만 (no re-render). ### Solid 의 signal ```ts const [name, setName] = createSignal('Alice'); console.log(name()); // 'Alice' setName('Bob'); console.log(name()); // 'Bob' ``` β†’ Get / set primitive. ### Effect / memo ```tsx const double = createMemo(() => count() * 2); // β†’ cached, signal λ³€κ²½ μ‹œλ§Œ μž¬κ³„μ‚°. createEffect(() => { console.log('double:', double()); }); ``` β†’ React 의 useMemo / useEffect λΉ„μŠ·. ### Resource (async) ```tsx const [user] = createResource(userId, fetchUser); return

{user()?.name}

; ``` β†’ Suspense μΉœν™”. ### Solid 의 "no VDOM" ``` React: λ§€ render = VDOM diff. Solid: λ§€ signal λ³€κ²½ = μ •ν™• DOM λΆ€λΆ„ update. β†’ "Most efficient" benchmark. ``` ### Solid Start (fullstack) ```tsx // routes/index.tsx export default function Home() { const [count, setCount] = createSignal(0); return ; } ``` β†’ Next.js 의 Solid version. ### Qwik ```tsx import { component$, useSignal } from '@builder.io/qwik'; export default component$(() => { const count = useSignal(0); return ( ); }); ``` β†’ `$` = lazy boundary. JS κ°€ lazy load. ### Qwik 의 resumability ``` React: - Server render HTML. - Client hydrate (λͺ¨λ“  JS). - "Hydration cost" = 큰. Qwik: - Server render HTML + state. - Client = 0 JS download (idle). - Click μ‹œ = κ·Έ click handler 의 JS 만 download. β†’ 큰 page = 맀우 빠름 first interaction. ``` ### Qwik City (fullstack) ```tsx // routes/index.tsx import { component$ } from '@builder.io/qwik'; export default component$(() => { return

Hello

; }); // Server route export const onGet: RequestHandler = async ({ json }) => { json(200, { msg: 'API' }); }; ``` ### vs React ``` React: - VDOM + reconciliation. - React Compiler κ°€ μžλ™ memo (modern). - 큰 ecosystem. Solid: - No VDOM. - 맀우 빠름. - μž‘μ€ ecosystem. Qwik: - Resumability. - 0 hydration cost. - Steeper learning. ``` ### Signals 의 evolution ``` 1. Knockout / RxJS (μ˜› reactive). 2. Vue / Angular (자체 signal). 3. SolidJS (modern primitive). 4. Preact signals. 5. Svelte 5 (rune). 6. React Compiler (λŒ€μ‹  μžλ™ memo). ``` β†’ Signal κ°€ 수렴. ### Use case ``` Solid: - Performance critical (data viz, real-time). - Small bundle (μž‘μ€ lib). - React λΉ„μŠ· API κ°€ μ’‹μŒ. Qwik: - E-commerce (Shopify Hydrogen 의 alternative). - Marketing site (FCP critical). - 큰 page + 적은 interaction. ``` ### When NOT? ``` - 큰 React ecosystem 에 의쑴. - Library κ°€ React-only. - Team κ°€ React 만 μ•Œμ•„. - Migration cost 큰. ``` β†’ React + Compiler κ°€ 수렴. ### Migration Solid (React μ—μ„œ) ```tsx // React const [count, setCount] = useState(0); return ; // Solid const [count, setCount] = createSignal(0); return ; ``` β†’ 거의 κ°™μŒ. Function call vs property. ### Solid devtools ``` Browser extension. - Component tree. - Signal state. - λ§€ effect 의 trigger. ``` ### Production ``` Solid: - Small but growing. - Babylon.js 의 demo. - μž‘μ€ / specific app. Qwik: - Builder.io (자체). - Some Shopify e-commerce. ``` ### 함정 (Solid) ``` - `count` vs `count()`: function call 잊음. - Destructure: signal κ°€ lose reactivity. - For each + signal: createSignal μ•ˆμ—μ„œ lifecycle. ``` ```tsx // ❌ const { count, setCount } = state; // destructure β†’ μžƒμŒ. // βœ… accessor return

{state.count()}

; ``` ### Future ``` 2026: Solid κ°€ niche, React Compiler κ°€ mainstream. Qwik κ°€ specific (e-commerce). React + Compiler κ°€ κ°€μž₯ 큰 user base. β†’ "Best framework" debate κ°€ μ§€λ‚œ. "Use what works" κ°€ λ‹΅. ``` ## πŸ€” μ˜μ‚¬κ²°μ • κΈ°μ€€ | 상황 | μΆ”μ²œ | |---|---| | Performance critical | Solid | | 0 hydration cost | Qwik | | 큰 ecosystem | React + Compiler | | Migration | React stay | | New small project | Solid μ‹œλ„ | | E-commerce | Qwik / Astro | ## ❌ μ•ˆν‹°νŒ¨ν„΄ - **Signal destructure**: lose reactivity. - **Solid + React patterns κ°€μ •**: 닀름. - **λͺ¨λ“  κ±° reactive**: κ°€μ§œ dependency. - **Qwik + heavy interaction**: hydration cost. - **Bundle size κ°•μ‘° + library 큰**: trade-off. ## πŸ€– LLM ν™œμš© 힌트 - Signal κ°€ modern reactivity. - React Compiler κ°€ React 의 λ‹΅. - Solid κ°€ niche / specific. - Qwik κ°€ e-commerce μΉœν™”. ## πŸ”— κ΄€λ ¨ λ¬Έμ„œ - [[Frontend_SolidJS_Qwik]] - [[Frontend_React_Compiler_Deep]] - [[Frontend_Million_Optimization]]