--- id: wiki-2026-0508-frontend title: Frontend category: 10_Wiki/Topics status: verified canonical_id: self aliases: [Web Frontend, Client-side Engineering, UI Engineering] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [frontend, web, react, performance] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: typescript framework: react --- # Frontend ## 매 한 줄 > **"매 user 의 매 device 에서 매 실행되는 매 모든 것 — 매 markup, 매 style, 매 behavior, 매 network."**. 2026 의 매 frontend 는 매 React 19 + 매 RSC + 매 Vite/Turbopack + 매 Bun/Node + 매 Edge runtime 의 매 stack 에서 매 진화 중. Core Web Vitals + 매 a11y + 매 i18n 이 매 hygiene. ## 매 핵심 ### 매 Layer - **Markup**: HTML, semantic, a11y. - **Style**: CSS — Cascade Layers, Container Queries, `:has()`, OKLCH. - **Behavior**: JS/TS — framework (React/Vue/Svelte/Solid). - **Build**: Vite, Turbopack, Bun, esbuild, swc. - **Runtime**: Browser, Edge (Cloudflare Workers, Vercel), Node, Bun. ### 매 Framework landscape (2026) - **React 19**: RSC + Actions + use() hook + Compiler. - **Next.js 15**: App Router default, Turbopack stable. - **Astro 5**: content site / island. - **SvelteKit 2** / **Vue 3.5 + Nuxt 4** / **Solid 2**. - **Remix → React Router 7**: data loading first. ### 매 Performance pillars - **LCP < 2.5s**: image optimize, preconnect, fetchpriority. - **INP < 200ms**: long task chunking, scheduler.yield. - **CLS < 0.1**: dimension reserved, font-display swap. - **Bundle**: route split, tree-shake, dynamic import. ### 매 Modern primitives - **CSS**: container queries, `:has()`, view transitions API, anchor positioning. - **JS**: scheduler.yield, AbortSignal.timeout, Temporal (stage 4 2026). - **HTML**: popover, dialog, search. - **Network**: HTTP/3, Early Hints, Speculation Rules. ### 매 응용 1. SSR + RSC 로 매 SEO 기반 commerce. 2. Edge personalization — 매 cookie / geo 기반. 3. PWA + offline-first. ## 💻 패턴 ### View Transitions API (cross-document) ```html ``` ### Container query ```css .card { container-type: inline-size; } @container (min-width: 400px) { .card-body { display: grid; grid-template-columns: 1fr 1fr; } } ``` ### React 19 Actions (form) ```tsx 'use client'; async function submit(formData: FormData) { 'use server'; await db.insert(formData.get('msg') as string); } export default function Form() { return
; } ``` ### use() hook (React 19) ```tsx function Comments({ promise }: { promise: Promise