{"id":299,"date":"2026-07-25T00:03:20","date_gmt":"2026-07-25T00:03:20","guid":{"rendered":"https:\/\/gilnas.synology.me\/wordpress\/299\/"},"modified":"2026-07-25T00:03:20","modified_gmt":"2026-07-25T00:03:20","slug":"vite-8-%eb%b2%a0%ed%83%80%c2%b7vue-vapor%c2%b7h3-%eb%b3%b4%ec%95%88-%ea%b2%bd%ea%b3%84-frontend-validation-across-vite-vue-and-h3","status":"publish","type":"post","link":"https:\/\/gilnas.synology.me\/wordpress\/299\/","title":{"rendered":"Vite 8 \ubca0\ud0c0\u00b7Vue Vapor\u00b7H3 \ubcf4\uc548 \uacbd\uacc4 | Frontend Validation Across Vite, Vue, and H3"},"content":{"rendered":"<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/gilnas.synology.me\/wordpress\/wp-content\/uploads\/2026\/07\/nuxt-trend-hero-11.png\" alt=\"Vite 8 \ubca0\ud0c0\u00b7Vue Vapor\u00b7H3 \ubcf4\uc548 \uacbd\uacc4 | Frontend Validation Across Vite, Vue, and H3\" \/><\/figure>\n<section>\n<h2>\ud575\uc2ec \ub2f5\ubcc0: \uc774\ubc88 3\uc77c\uc758 \uc6b0\uc120\uc21c\uc704\ub294 \u2018Vite 8 \ubca0\ud0c0 \uc2e4\ud5d8\u2019, \u2018Vue Vapor \ud638\ud658\uc131 \uc810\uac80\u2019, \u2018H3 RC \ubcf4\uc548 \uac80\ud1a0\u2019\ub97c \uac19\uc740 \ubcc0\uacbd \ucc3d\uc5d0\uc11c \ubd84\ub9ac\ud574 \uac80\uc99d\ud558\ub294 \uac83\uc774\ub2e4<\/h2>\n<p><strong>\uc694\uc57d:<\/strong> 2026\ub144 7\uc6d4 22~25\uc77c Nuxt\/Vue\/Vite \uc0dd\ud0dc\uacc4\uc5d0\uc11c\ub294 <strong>Vite 8.2.0-beta.0<\/strong>, <strong>Vue 3.6.0-rc.2<\/strong>, <strong>H3 2.0.1-rc.26<\/strong>, Vite legacy plugin 8.2.2\uc640 Unhead 3.2.2~3\uc774 \uc5f0\ub2ec\uc544 \ub098\uc654\ub2e4. Nuxt \uc571\uc740 \uc774\ub4e4\uc744 \ud55c \ubc88\uc5d0 production\uc73c\ub85c \uc62c\ub9ac\uae30\ubcf4\ub2e4, \ube4c\ub4dc\u00b7SSR head\u00b7\uad6c\ud615 \ube0c\ub77c\uc6b0\uc800 \uc0b0\ucd9c\ubb3c\u00b7\uc11c\ubc84 \uc751\ub2f5 \uacbd\uacc4\ub97c \ubd84\ub9ac\ud55c canary\ub85c \uac80\uc99d\ud574\uc57c \ud55c\ub2e4.<\/p>\n<p>\uc774\ubc88 Nuxt Trend 3\uc77c \ub9ac\ud3ec\ud2b8\uc758 \uacb0\ub860\uc740 \uba85\ud655\ud558\ub2e4. <strong>Vite 8.2\ub294 \uc544\uc9c1 beta, Vue 3.6\uacfc H3 2\uc740 RC<\/strong>\uc774\ubbc0\ub85c \uc989\uc2dc \ud45c\uc900 \ubc84\uc804\uc73c\ub85c \uc2b9\uaca9\ud560 \ub2e8\uacc4\ub294 \uc544\ub2c8\ub2e4. \ub2e4\ub9cc Vite\uc758 bundled-dev\/Rolldown \ud750\ub984, Vue Vapor\uc758 \uc774\ubca4\ud2b8 \uc758\ubbf8 \ubcc0\uacbd, H3\uc758 HTML escaping\u00b7\ud504\ub85d\uc2dc \uc2e0\ub8b0\u00b7SSE API \ubcc0\ud654\ub294 \uc774\ud6c4 Nuxt \ub7f0\ud0c0\uc784\uacfc \ubc30\ud3ec \ud30c\uc774\ud504\ub77c\uc778\uc5d0 \uc9c1\uc811 \ub2ff\ub294\ub2e4. \uc6b4\uc601\ud300\uc740 \u2018\uc5c5\ub370\uc774\ud2b8 \uc5ec\ubd80\u2019\ubcf4\ub2e4 \u2018\uc5b4\ub5a4 \uacbd\ub85c\uc640 \uacc4\uc57d\uc744 \ud14c\uc2a4\ud2b8\ud560\uc9c0\u2019\ub97c \uba3c\uc800 \uacb0\uc815\ud574\uc57c \ud55c\ub2e4.<\/p>\n<h2>3\uc77c \uacb0\ub860<\/h2>\n<ul>\n<li><strong>\ube4c\ub4dc:<\/strong> Vite 8.2.0-beta.0\uc740 bundled-dev\uc758 client-side HMR, native loader \ud638\ud658\uc131 \uacbd\uace0, CSS chunk import map \uc218\uc815\uc744 \ud3ec\ud568\ud55c\ub2e4. beta \uc804\uc6a9 \ube0c\ub79c\uce58\uc5d0\uc11c custom plugin\uacfc monorepo lockfile\uc744 \uac80\uc0ac\ud560 \uc2e0\ud638\ub2e4.<\/li>\n<li><strong>\ub80c\ub354\ub9c1:<\/strong> Vue 3.6.0-rc.2\ub294 Vapor\uc758 event delegation\uc744 \uae30\ubcf8\uac12\uc5d0\uc11c opt-in\uc73c\ub85c \ubc14\uafe8\ub2e4. Vapor\ub97c \uc4f0\uac70\ub098 \uc2dc\ud5d8 \uc911\uc778 \ud654\uba74\uc740 <code>.delegate<\/code> \ud544\uc694\uc131\uacfc propagation \ub3d9\uc791\uc744 \ub2e4\uc2dc \ud655\uc778\ud574\uc57c \ud55c\ub2e4.<\/li>\n<li><strong>\uc11c\ubc84 \uacbd\uacc4:<\/strong> H3 2.0.1-rc.26\uc740 HTML interpolation escaping, SameSite=Lax \uae30\ubcf8 \uc138\uc158 \ucfe0\ud0a4, <code>x-forwarded-proto<\/code> \uc2e0\ub8b0 opt-in, EventStream \uacf5\uac1c API\ub97c \ub2f4\uc558\ub2e4. Nitro\/H3 2 \ub3c4\uc785 \uc804\uc5d0\ub294 proxy\u00b7cookie\u00b7SSE \ud68c\uadc0 \ud14c\uc2a4\ud2b8\uac00 \ud544\uc218\ub2e4.<\/li>\n<li><strong>\ud638\ud658\uc131:<\/strong> plugin-legacy 8.2.2\ub294 legacy chunk minify\uac00 \ucd5c\uc2e0 \ubb38\ubc95\uc744 \uc4f0\uc9c0 \uc54a\ub3c4\ub85d \uc218\uc815\ud588\ub2e4. \uad6c\ud615 \ube0c\ub77c\uc6b0\uc800 \ub300\uc0c1 \uc11c\ube44\uc2a4\ub294 modern\/legacy \uc0b0\ucd9c\ubb3c\uc744 \ubaa8\ub450 \uc2e4\uc81c \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \ud655\uc778\ud574\uc57c \ud55c\ub2e4.<\/li>\n<li><strong>SEO head:<\/strong> Unhead 3.2.2\/3\uc740 schema-org resolver\u00b7stream serialization\u00b7\uadf8\ub798\ud504 \ud574\uc11d\uc744 \uc190\ubd24\ub2e4. Nuxt head\/schema\ub97c \uc4f0\ub294 \uc0ac\uc774\ud2b8\ub294 SSR HTML\uc758 canonical, JSON-LD, logo\uac00 \uadf8\ub300\ub85c\uc778\uc9c0 snapshot\uc744 \ube44\uad50\ud55c\ub2e4.<\/li>\n<\/ul>\n<h2>\ud575\uc2ec \ud750\ub984 1: Vite 8.2 beta\ub294 Rolldown \uae30\ubc18 \uac1c\ubc1c \ub8e8\ud504\ub97c \u2018\uac80\uc99d \uac00\ub2a5\ud55c \uc2e4\ud5d8\u2019\uc73c\ub85c \ub9cc\ub4e0\ub2e4<\/h2>\n<p><strong>\ud655\uc778\ub41c \uc0ac\uc2e4:<\/strong> <a href=\"https:\/\/github.com\/vitejs\/vite\/releases\/tag\/v8.2.0-beta.0\" target=\"_blank\" rel=\"noopener\">Vite 8.2.0-beta.0 \uacf5\uc2dd \ub9b4\ub9ac\uc2a4<\/a>\uc640 \ud574\ub2f9 <a href=\"https:\/\/github.com\/vitejs\/vite\/blob\/v8.2.0-beta.0\/packages\/vite\/CHANGELOG.md\" target=\"_blank\" rel=\"noopener\">changelog<\/a>\uc5d0\ub294 bundled-dev\uc758 client-side HMR, Rolldown \uad00\ub828 \uc758\uc874\uc131 \uc5c5\ub370\uc774\ud2b8, native config loader\uc640 \uc591\ub9bd\ud558\uc9c0 \uc54a\ub294 \uae30\ub2a5 \uacbd\uace0, CSS chunk\ub97c import map\uc5d0 \ub9e4\ud551\ud558\ub294 \uc218\uc815, HMR prune \ub4a4 hot data \uc815\ub9ac\uac00 \uae30\ub85d\ub3fc \uc788\ub2e4. \ub124\ud2b8\uc6cc\ud06c URL\uc5d0 interface \uc774\ub984\uc744 \ud45c\uc2dc\ud558\ub294 \uac1c\ubc1c \uc11c\ubc84 \uac1c\uc120\ub3c4 \ud3ec\ud568\ub41c\ub2e4.<\/p>\n<p><strong>\uc758\ubbf8:<\/strong> Nuxt 4.5\uac00 \uc774\ubbf8 Vite 8\uc744 \uc0ac\uc6a9\ud558\ubbc0\ub85c, Nuxt \uac1c\ubc1c\uc790\ub294 Vite \ubcc0\ud654\ub97c \ub3c5\ub9bd \ub3c4\uad6c \uc18c\uc2dd\uc73c\ub85c\ub9cc \ubcfc \uc218 \uc5c6\ub2e4. \ud2b9\ud788 \uc790\uccb4 Vite plugin, virtual module, workspace alias, CSS\/PostCSS \uc124\uc815, \uc6d0\uaca9 \ub514\ubc14\uc774\uc2a4 HMR\uc744 \uac00\uc9c4 \ud504\ub85c\uc81d\ud2b8\ub294 dev \uc11c\ubc84\uac00 \ub728\ub294\uc9c0\ubcf4\ub2e4 update \ud6c4 \uc0c1\ud0dc\uac00 \uc720\uc9c0\ub418\ub294\uc9c0\uc640 production build \uc0b0\ucd9c\ubb3c\uc774 \uac19\uc740\uc9c0\ub97c \ubd10\uc57c \ud55c\ub2e4.<\/p>\n<h3>\uc2e4\ud589<\/h3>\n<ul>\n<li>Vite 8.2 beta\ub294 \ubcc4\ub3c4 lockfile\/preview \ubc30\ud3ec\uc5d0\uc11c\ub9cc \uc2dc\ud5d8\ud558\uace0, stable tag\uac00 \ub098\uc624\uae30 \uc804 \uae30\ubcf8 \uc758\uc874\uc131\uc73c\ub85c \uc62c\ub9ac\uc9c0 \uc54a\ub294\ub2e4.<\/li>\n<li><code>nuxt typecheck<\/code>, production build, \ub300\ud45c route hydration, HMR \ud6c4 form \uc0c1\ud0dc\u00b7pinia \uc0c1\ud0dc\u00b7\uc624\ub958 overlay\ub97c \ubb36\uc5b4 CI smoke test\ub85c \ub9cc\ub4e0\ub2e4.<\/li>\n<li>CSS code-splitting\uc774 \uc788\ub294 \ud398\uc774\uc9c0\ub294 modulepreload\/import map\uacfc lazy CSS \ub3c4\ucc29 \uc2dc\uc810\uc744 \uae30\uc874 stable\uacfc \ube44\uad50\ud55c\ub2e4.<\/li>\n<\/ul>\n<h2>\ud575\uc2ec \ud750\ub984 2: Vue 3.6 RC\uc758 Vapor\ub294 \uc131\ub2a5 \uae30\ub2a5\uc774\uc9c0\ub9cc \uc774\ubca4\ud2b8 \uacc4\uc57d\ub3c4 \ubc14\uafbc\ub2e4<\/h2>\n<p><strong>\ud655\uc778\ub41c \uc0ac\uc2e4:<\/strong> 7\uc6d4 22\uc77c \uacf5\uac1c\ub41c <a href=\"https:\/\/github.com\/vuejs\/core\/releases\/tag\/v3.6.0-rc.2\" target=\"_blank\" rel=\"noopener\">Vue 3.6.0-rc.2<\/a>\uc758 <a href=\"https:\/\/github.com\/vuejs\/core\/blob\/minor\/CHANGELOG.md\" target=\"_blank\" rel=\"noopener\">minor changelog<\/a>\uc740 Vapor compiler\/runtime\uc758 hydration\u00b7Suspense\u00b7async setup\u00b7transition \uc218\uc815\uacfc \ud568\uaed8, Vapor event delegation\uc744 opt-in\uc73c\ub85c \uc804\ud658\ud588\ub2e4\uace0 \uba85\uc2dc\ud55c\ub2e4. \uae30\uc874 <code>compilerOptions.eventDelegation<\/code>\uc740 \uc81c\uac70\ub418\uace0, \ud544\uc694\ud55c static event\uc5d0\ub294 Vapor \uc804\uc6a9 <code>@click.delegate<\/code>\ucc98\ub7fc \uba85\uc2dc\uc801\uc73c\ub85c \uc801\uc6a9\ud55c\ub2e4.<\/p>\n<p><strong>\uc758\ubbf8:<\/strong> \uc774\ub294 \uc815\uc2dd Vue 3.5 \uc571\uc744 \uc9c0\uae08 \ub2f9\uc7a5 \ubc14\uafd4\uc57c \ud55c\ub2e4\ub294 \ub73b\uc774 \uc544\ub2c8\ub2e4. Vapor\ub294 opt-in\uc774\uba70 RC\ub2e4. \uadf8\ub7ec\ub098 Nuxt\uc5d0\uc11c \uc131\ub2a5 \ubbfc\uac10 \ud398\uc774\uc9c0\ub97c Vapor\ub85c \ud0d0\uc0c9\ud558\uac70\ub098 Vue 3.6 \uc900\ube44 \ube0c\ub79c\uce58\ub97c \uc6b4\uc6a9\ud55c\ub2e4\uba74, \ud074\ub9ad\u00b7\uc911\ucca9 \uba54\ub274\u00b7modal\u00b7drag UI\uc5d0\uc11c <code>stopPropagation()<\/code>\uacfc listener \uc704\uce58\uc5d0 \uc758\uc874\ud55c \ub3d9\uc791\uc774 \ubc14\ub014 \uc218 \uc788\ub2e4. \uc131\ub2a5 \uce21\uc815\uc740 \ubc88\ub4e4 \ud06c\uae30\uc640 LCP\ubfd0 \uc544\ub2c8\ub77c interaction regression\uc744 \ub3d9\ub4f1\ud558\uac8c \ud3ec\ud568\ud574\uc57c \ud55c\ub2e4.<\/p>\n<h3>\uc2e4\ud589<\/h3>\n<ul>\n<li>Vapor \ud6c4\ubcf4\ub294 \uc0c8\ub86d\uace0 \uace0\ub9bd\ub41c \uc77d\uae30 \uc911\uc2ec \ud654\uba74\ubd80\ud130 \uace0\ub974\uace0, \uacb0\uc81c\u00b7\ubcf5\uc7a1\ud55c portal\u00b7\uc11c\ub4dc\ud30c\ud2f0 DOM \ud1b5\ud569 \ud654\uba74\uc740 RC \uae30\uac04\uc5d0 \uc720\uc9c0\ud55c\ub2e4.<\/li>\n<li>event delegation \uc635\uc158\uc744 \uac80\uc0c9\ud574 \uc81c\uac70 \ub300\uc0c1\uacfc <code>.delegate<\/code> \ud544\uc694 \uc774\ubca4\ud2b8\ub97c \ubaa9\ub85d\ud654\ud55c\ub2e4.<\/li>\n<li>SSR hydration, Suspense fallback, async component, keyboard\/mouse propagation\uc744 E2E fixture\ub85c \ud655\uc778\ud55c\ub2e4.<\/li>\n<\/ul>\n<h2>\ud575\uc2ec \ud750\ub984 3: H3 RC\ub294 \uc11c\ubc84 \uc131\ub2a5\ubcf4\ub2e4 \uba3c\uc800 \ubcf4\uc548\u00b7\ud504\ub85d\uc2dc\u00b7\uc2a4\ud2b8\ub9bc \uacc4\uc57d\uc744 \uc810\uac80\ud558\uac8c \ud55c\ub2e4<\/h2>\n<p><strong>\ud655\uc778\ub41c \uc0ac\uc2e4:<\/strong> 7\uc6d4 24\uc77c\uc758 <a href=\"https:\/\/github.com\/h3js\/h3\/releases\/tag\/v2.0.1-rc.26\" target=\"_blank\" rel=\"noopener\">H3 2.0.1-rc.26 \uacf5\uc2dd \ub9b4\ub9ac\uc2a4<\/a>\ub294 HTML tagged template interpolation escaping, session cookie\uc758 <code>SameSite=Lax<\/code> \uae30\ubcf8\uac12, async validation, EventStream \ubc18\ud658, chunked cookie parsing\uacfc middleware chain \uc131\ub2a5 \uac1c\uc120\uc744 \ub2f4\ub294\ub2e4. \ub3d9\uc2dc\uc5d0 <code>x-forwarded-proto<\/code> \uc2e0\ub8b0\ub294 opt-in\uc73c\ub85c \ubcc0\uacbd\ub418\uace0, EventStream\uc774 public API\uac00 \ub418\uba70 <code>createEventStream<\/code>\uc740 deprecated\ub2e4. \uc774 \ubc84\uc804\uc740 RC\uc774\ubbc0\ub85c Nuxt\/Nitro production\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \uc801\uc6a9\ub41c stable baseline\uc73c\ub85c \uc77d\uc5b4\uc11c\ub294 \uc548 \ub41c\ub2e4.<\/p>\n<p><strong>\uc758\ubbf8:<\/strong> trusted proxy, OAuth callback, canonical URL \uc0dd\uc131, secure cookie, SSE endpoint\ub294 \uc791\uc740 \ub7f0\ud0c0\uc784 \ubcc0\ud654\uc5d0\ub3c4 \uc601\ud5a5\uc744 \ubc1b\ub294\ub2e4. escaping \uac15\ud654\ub294 \ubcf4\uc548\uc0c1 \ubc14\ub78c\uc9c1\ud558\uc9c0\ub9cc \uae30\uc874 HTML fragment\ub97c \uac12\uc73c\ub85c \ub123\ub358 \ucf54\ub4dc\ub294 \ucd9c\ub825\uc774 \ub2ec\ub77c\uc9c8 \uc218 \uc788\ub2e4. \ub530\ub77c\uc11c \u2018\uc5c5\uadf8\ub808\uc774\ub4dc \uc131\uacf5\u2019\ubcf4\ub2e4 reverse proxy \ud5e4\ub354\uc640 HTML\/SSE \uc751\ub2f5 \uacc4\uc57d\uc744 \uba85\uc2dc\uc801\uc73c\ub85c \ud14c\uc2a4\ud2b8\ud558\ub294 \ud3b8\uc774 \uc548\uc804\ud558\ub2e4.<\/p>\n<h3>\uc2e4\ud589<\/h3>\n<ul>\n<li>\ub85c\ub4dc\ubc38\ub7f0\uc11c\/CDN \ub4a4\uc758 <code>X-Forwarded-Proto<\/code> \uc2e0\ub8b0 \uc815\ucc45\uc744 \ubb38\uc11c\ud654\ud558\uace0 spoofed header \uc694\uccad\uc774 public URL\u00b7cookie secure flag\ub97c \ubc14\uafb8\uc9c0 \uc54a\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4.<\/li>\n<li><code>html<\/code> tagged template\uc5d0 \uc804\ub2ec\ud558\ub294 \uac12\uacfc <code>raw()<\/code> \uc0ac\uc6a9\ucc98\ub97c \ubd84\ub9ac \uac80\ud1a0\ud55c\ub2e4. \uc2e0\ub8b0\ud560 \uc218 \uc5c6\ub294 \uac12\uc740 raw HTML\ub85c \ub418\ub3cc\ub9ac\uc9c0 \uc54a\ub294\ub2e4.<\/li>\n<li>SSE\ub294 \uc5f0\uacb0 \uc885\ub8cc\u00b7abort\u00b7\uccab chunk\uc758 status\/header\u00b7\uc7ac\uc5f0\uacb0\uc744 \uc2e4\uc81c edge \ud658\uacbd\uc5d0\uc11c \ud14c\uc2a4\ud2b8\ud558\uace0, deprecated API \uc758\uc874\uc131\uc744 inventory\uc5d0 \ub0a8\uae34\ub2e4.<\/li>\n<\/ul>\n<h2>\ud575\uc2ec \ud750\ub984 4: legacy \ube4c\ub4dc\uc640 head\/schema \ud68c\uadc0\ub294 \u2018\ubcf4\uc774\uc9c0 \uc54a\ub294 \uc0ac\uc6a9\uc790 \uacbd\ub85c\u2019\ub2e4<\/h2>\n<p><strong>\ud655\uc778\ub41c \uc0ac\uc2e4:<\/strong> <a href=\"https:\/\/github.com\/vitejs\/vite\/releases\/tag\/plugin-legacy%408.2.2\" target=\"_blank\" rel=\"noopener\">@vitejs\/plugin-legacy 8.2.2<\/a>\ub294 legacy chunk minify\uc5d0\uc11c \ub354 \uc0c8\ub85c\uc6b4 syntax\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub3c4\ub85d \uace0\ucce4\uace0, bundled-dev\/Rolldown \uad00\ub828 \uc5c5\ub370\uc774\ud2b8\ub97c \ud3ec\ud568\ud55c\ub2e4. \uac19\uc740 72\uc2dc\uac04 \ub3d9\uc548 <a href=\"https:\/\/github.com\/unjs\/unhead\/releases\/tag\/v3.2.2\" target=\"_blank\" rel=\"noopener\">Unhead 3.2.2<\/a>\ub294 schema-org resolver\/type, scripts controller, reactive entry serialization\uc744 \uc218\uc815\ud588\uace0 3.2.3\uc740 organization identity\uc758 logo \ubcf4\uc874\uc744 \uace0\ucce4\ub2e4.<\/p>\n<p><strong>\uc758\ubbf8:<\/strong> Nuxt \uc571\uc758 \ubc30\ud3ec \uc131\uacf5\uc740 \ucd5c\uc2e0 Chrome\uc5d0\uc11c \ud648 \ud654\uba74\uc774 \ubcf4\uc774\ub294 \uac83\uc73c\ub85c \ub05d\ub098\uc9c0 \uc54a\ub294\ub2e4. legacy target\uc774 \uc788\ub2e4\uba74 \ud574\ub2f9 browser matrix\uc5d0\uc11c polyfill\/parse error\ub97c \ud655\uc778\ud574\uc57c \ud558\uace0, SEO\uac00 \uc911\uc694\ud55c \uc11c\ube44\uc2a4\ub77c\uba74 SSR head\u00b7JSON-LD\u00b7organization logo\ub97c crawler \uad00\uc810\uc73c\ub85c \uac80\uc0ac\ud574\uc57c \ud55c\ub2e4. \uc774\uac83\uc740 \ub9b4\ub9ac\uc2a4\uc758 \uc9c1\uc811\uc801\uc778 \uae30\ub2a5 \uc57d\uc18d\uc774 \uc544\ub2c8\ub77c, \ubcc0\uacbd \ubc94\uc704\uc5d0\uc11c \ub3c4\ucd9c\ud55c \uc6b4\uc601 \uac80\uc99d \uc6b0\uc120\uc21c\uc704\ub2e4.<\/p>\n<h2>\ud504\ub860\ud2b8\uc5d4\ub4dc \uac1c\ubc1c\uc790 \uccb4\ud06c\ub9ac\uc2a4\ud2b8<\/h2>\n<ul>\n<li><strong>\ubc84\uc804 \ubd84\ub9ac:<\/strong> Vite 8.2 beta, Vue 3.6 RC, H3 2 RC\ub97c production stable\uacfc \uac19\uc740 PR\uc5d0 \uc11e\uc9c0 \ub9d0\uace0 feature flag\/lockfile\uc744 \ubd84\ub9ac\ud55c\ub2e4.<\/li>\n<li><strong>\ube4c\ub4dc:<\/strong> custom Vite plugin, PostCSS, CSS splitting, legacy bundle\uc744 \ud3ec\ud568\ud574 build output\uacfc \ube0c\ub77c\uc6b0\uc800 parse \uc624\ub958\ub97c \ube44\uad50\ud55c\ub2e4.<\/li>\n<li><strong>\ub80c\ub354\ub9c1:<\/strong> Vapor \ud6c4\ubcf4 route\uc5d0\uc11c click\/keyboard propagation, hydration, Suspense, async setup\uc744 E2E\ub85c \ud655\uc778\ud55c\ub2e4.<\/li>\n<li><strong>\uc11c\ubc84:<\/strong> proxy header, redirect, Set-Cookie, HTML escaping, SSE disconnect\ub97c staging\uacfc \uc2e4\uc81c CDN \uacbd\ub85c\uc5d0\uc11c \uac80\uc99d\ud55c\ub2e4.<\/li>\n<li><strong>\uac80\uc0c9:<\/strong> \ub300\ud45c 10\uac1c URL\uc758 SSR HTML\uc5d0\uc11c title, canonical, robots, Open Graph, JSON-LD, organization logo\ub97c \uc774\uc804 \ubc30\ud3ec\uc640 diff\ud55c\ub2e4.<\/li>\n<li><strong>\ub864\ubc31:<\/strong> 5xx, hydration error, legacy browser parse error, canonical \ubcc0\ud615 \uc911 \ud558\ub098\ub77c\ub3c4 \uae30\uc900\uc120\uc744 \ub118\uc73c\uba74 \uc758\uc874\uc131 pin\uc744 \ub418\ub3cc\ub9b4 \uc218 \uc788\uac8c release artifact\ub97c \ubcf4\uc874\ud55c\ub2e4.<\/li>\n<\/ul>\n<h2>\ube60\ub978 Q&amp;A<\/h2>\n<h3>Vite 8.2.0-beta.0\uc744 Nuxt \uc11c\ube44\uc2a4\uc5d0 \ubc14\ub85c \uc801\uc6a9\ud574\ub3c4 \ub418\ub098?<\/h3>\n<p>\uad8c\uc7a5\ud558\uc9c0 \uc54a\ub294\ub2e4. \uacf5\uc2dd \ubc84\uc804 \ud45c\uae30\uac00 beta\uc774\uba70, \uba3c\uc800 preview \ud658\uacbd\uc5d0\uc11c plugin\u00b7HMR\u00b7CSS \uc0b0\ucd9c\ubb3c \ud68c\uadc0\ub97c \ud655\uc778\ud574\uc57c \ud55c\ub2e4. Nuxt\uac00 Vite 8\uc744 \uc0ac\uc6a9\ud558\ub354\ub77c\ub3c4 beta tag \ucc44\ud0dd\uc740 \ubcc4\ub3c4 \uc704\ud5d8 \uacb0\uc815\uc774\ub2e4.<\/p>\n<h3>Vue 3.6 RC\uc758 event delegation \ubcc0\uacbd\uc740 \ubaa8\ub4e0 Nuxt \uc571\uc5d0 \uc601\ud5a5\uc774 \uc788\ub098?<\/h3>\n<p>\uc544\ub2c8\ub2e4. Vapor\ub294 opt-in\uc774\ub2e4. \ud558\uc9c0\ub9cc Vapor\ub97c \uc774\ubbf8 \uc0ac\uc6a9\ud558\uac70\ub098 \ub3c4\uc785\uc744 \uc2dc\ud5d8\ud558\ub294 route\uc5d0\uc11c\ub294 delegation\uc744 \uba85\uc2dc\ud558\ub294 \ubc29\uc2dd\uacfc \uc774\ubca4\ud2b8 \uc804\ud30c \ub3d9\uc791\uc744 \ud655\uc778\ud574\uc57c \ud55c\ub2e4.<\/p>\n<h3>H3 2 RC\uc5d0\uc11c \uac00\uc7a5 \uba3c\uc800 \ud655\uc778\ud560 \ubcf4\uc548 \ud56d\ubaa9\uc740 \ubb34\uc5c7\uc778\uac00?<\/h3>\n<p>\uc2e0\ub8b0 \ud504\ub85d\uc2dc\uc758 forwarded header \uc815\ucc45, raw HTML \uacbd\uacc4, session cookie, SSE \uc751\ub2f5 \uc885\ub8cc\ub97c \uc6b0\uc120 \uc810\uac80\ud55c\ub2e4. RC \ubcc0\uacbd\uc744 \uc548\uc815 \ubc84\uc804\ucc98\ub7fc \uac00\uc815\ud558\uc9c0 \ub9d0\uace0 \uc11c\ube44\uc2a4\uc758 ingress\ubd80\ud130 \ud14c\uc2a4\ud2b8\ud55c\ub2e4.<\/p>\n<h2>\uc8fc\uc694 \ucd9c\ucc98<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/vitejs\/vite\/releases\/tag\/v8.2.0-beta.0\" target=\"_blank\" rel=\"noopener\">Vite 8.2.0-beta.0 release<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/vuejs\/core\/releases\/tag\/v3.6.0-rc.2\" target=\"_blank\" rel=\"noopener\">Vue 3.6.0-rc.2 release<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/h3js\/h3\/releases\/tag\/v2.0.1-rc.26\" target=\"_blank\" rel=\"noopener\">H3 2.0.1-rc.26 release<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/vitejs\/vite\/releases\/tag\/plugin-legacy%408.2.2\" target=\"_blank\" rel=\"noopener\">@vitejs\/plugin-legacy 8.2.2 release<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/unjs\/unhead\/releases\/tag\/v3.2.3\" target=\"_blank\" rel=\"noopener\">Unhead 3.2.3 release<\/a><\/li>\n<\/ul>\n<\/section>\n<h2>\ub354 \uae4a\uac8c \uc77d\uae30: \uc2e4\uc804 \uac00\uc774\ub4dc<\/h2>\n<p>\uc774 \ub9ac\ud3ec\ud2b8\ub294 \ucd5c\uadfc \ud750\ub984\uc744 \ube60\ub974\uac8c \ud30c\uc545\ud558\uae30 \uc704\ud55c \uc694\uc57d\uc785\ub2c8\ub2e4. \uc2e4\uc81c \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc801\uc6a9\ud560 \ub54c\ub294 \uc544\ub798\uc758 \uae30\uc900 \uae00\uacfc \ud568\uaed8 \ud655\uc778\ud558\uba74 \ub354 \uc548\uc804\ud569\ub2c8\ub2e4.<\/p>\n<ul>\n<li><a href=\"https:\/\/gilnas.synology.me\/wordpress\/113\/\">AI \uc5d0\uc774\uc804\ud2b8\ub780 \ubb34\uc5c7\uc778\uac00?<\/a><\/li>\n<li><a href=\"https:\/\/gilnas.synology.me\/wordpress\/114\/\">\ud504\ub86c\ud504\ud2b8 \uc778\uc81d\uc158 \ubcf4\uc548 \uccb4\ud06c\ub9ac\uc2a4\ud2b8<\/a><\/li>\n<li><a href=\"https:\/\/gilnas.synology.me\/wordpress\/115\/\">AI \ucf54\ub529 \ub3c4\uad6c \uc548\uc804 \uc6cc\ud06c\ud50c\ub85c<\/a><\/li>\n<li><a href=\"https:\/\/gilnas.synology.me\/wordpress\/116\/\">Nuxt SEO \uc124\uc815 \ubc29\ubc95<\/a><\/li>\n<li><a href=\"https:\/\/gilnas.synology.me\/wordpress\/117\/\">Nuxt\uc640 WordPress Headless CMS \uad6c\uc870<\/a><\/li>\n<li><a href=\"https:\/\/gilnas.synology.me\/wordpress\/118\/\">\uac1c\ubc1c\uc790 \ube14\ub85c\uadf8 \uc560\ub4dc\uc13c\uc2a4 \uc2b9\uc778 \uc804\ub7b5<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\ucd5c\uadfc 3\uc77c Vite 8 beta, Vue 3.6 RC, H3 2 RC\uc758 \ubcc0\ud654\uac00 Nuxt \uac1c\ubc1c\u00b7\ub80c\ub354\ub9c1\u00b7\uc11c\ubc84 \uacbd\uacc4\uc5d0 \uc8fc\ub294 \uc601\ud5a5\uc744 \uc815\ub9ac\ud569\ub2c8\ub2e4. beta\/RC\ub97c \uc548\uc804\ud558\uac8c \uac80\uc99d\ud560 \ud504\ub860\ud2b8\uc5d4\ub4dc \uccb4\ud06c\ub9ac\uc2a4\ud2b8\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n","protected":false},"author":1,"featured_media":298,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-299","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-nuxt-trend"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/posts\/299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/comments?post=299"}],"version-history":[{"count":0,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/posts\/299\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/media\/298"}],"wp:attachment":[{"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/media?parent=299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/categories?post=299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/tags?post=299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}