9148c358d0
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를 Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류. - 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로 자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거, 동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거. - 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming, Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business, Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로, 나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는 title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백). 원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지. - 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서. - 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는 지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지. - Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경. - 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
5.6 KiB
5.6 KiB
id, title, category, status, source_trust_level, verification_status, created_at, updated_at, tags, tech_stack, applied_in, aliases
| id | title | category | status | source_trust_level | verification_status | created_at | updated_at | tags | tech_stack | applied_in | aliases | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| frontend-solid-qwik-deep | SolidJS / Qwik — signal-based reactivity | Coding | draft | B | conceptual | 2026-05-09 | 2026-05-09 |
|
|
|
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
import { createSignal, createEffect } from 'solid-js';
function Counter() {
const [count, setCount] = createSignal(0);
createEffect(() => {
console.log('count:', count());
});
return <button onClick={() => setCount(count() + 1)}>{count()}</button>;
}
→ count() 가 function. Component 가 1번 만 (no re-render).
Solid 의 signal
const [name, setName] = createSignal('Alice');
console.log(name()); // 'Alice'
setName('Bob');
console.log(name()); // 'Bob'
→ Get / set primitive.
Effect / memo
const double = createMemo(() => count() * 2);
// → cached, signal 변경 시만 재계산.
createEffect(() => {
console.log('double:', double());
});
→ React 의 useMemo / useEffect 비슷.
Resource (async)
const [user] = createResource(userId, fetchUser);
return <p>{user()?.name}</p>;
→ Suspense 친화.
Solid 의 "no VDOM"
React: 매 render = VDOM diff.
Solid: 매 signal 변경 = 정확 DOM 부분 update.
→ "Most efficient" benchmark.
Solid Start (fullstack)
// routes/index.tsx
export default function Home() {
const [count, setCount] = createSignal(0);
return <button onClick={() => setCount(count() + 1)}>{count()}</button>;
}
→ Next.js 의 Solid version.
Qwik
import { component$, useSignal } from '@builder.io/qwik';
export default component$(() => {
const count = useSignal(0);
return (
<button onClick$={() => count.value++}>
{count.value}
</button>
);
});
→ $ = 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)
// routes/index.tsx
import { component$ } from '@builder.io/qwik';
export default component$(() => {
return <h1>Hello</h1>;
});
// 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 에서)
// React
const [count, setCount] = useState(0);
return <button onClick={() => setCount(c => c + 1)}>{count}</button>;
// Solid
const [count, setCount] = createSignal(0);
return <button onClick={() => setCount(count() + 1)}>{count()}</button>;
→ 거의 같음. 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.
// ❌
const { count, setCount } = state; // destructure → 잃음.
// ✅ accessor
return <p>{state.count()}</p>;
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 친화.