{"id":273,"date":"2026-07-20T00:04:16","date_gmt":"2026-07-20T00:04:16","guid":{"rendered":"https:\/\/gilnas.synology.me\/wordpress\/273\/"},"modified":"2026-07-20T00:04:16","modified_gmt":"2026-07-20T00:04:16","slug":"nuxt-4-5%c2%b7vue-3-6-%ec%a0%84%ed%99%98-%eb%b9%8c%eb%93%9c%c2%b7ssr-%ea%b2%80%ec%a6%9d-%ec%b2%b4%ed%81%ac%ed%8f%ac%ec%9d%b8%ed%8a%b8-nuxt-4-5-and-vue-3-6-migration","status":"publish","type":"post","link":"https:\/\/gilnas.synology.me\/wordpress\/273\/","title":{"rendered":"Nuxt 4.5\u00b7Vue 3.6 \uc804\ud658: \ube4c\ub4dc\u00b7SSR \uac80\uc99d \uccb4\ud06c\ud3ec\uc778\ud2b8 | Nuxt 4.5 and Vue 3.6 Migration"},"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-8.png\" alt=\"Nuxt 4.5\u00b7Vue 3.6 \uc804\ud658: \ube4c\ub4dc\u00b7SSR \uac80\uc99d \uccb4\ud06c\ud3ec\uc778\ud2b8 | Nuxt 4.5 and Vue 3.6 Migration\" \/><\/figure>\n<p><strong>\uc694\uc57d:<\/strong> \ucd5c\uadfc 72\uc2dc\uac04\uc758 Nuxt\u00b7Vue \ud504\ub860\ud2b8\uc5d4\ub4dc \uc0dd\ud0dc\uacc4\uc5d0\uc11c \uac00\uc7a5 \ud070 \ubcc0\ud654\ub294 Nuxt 4.5\uc758 Vite 8 \uae30\ubc18 \uc804\ud658\uacfc Nuxt 5 \uc900\ube44, Vue 3.6 RC\uc758 Vapor\/\ubc18\uc751\uc131 \uc7ac\uad6c\uc131, \uadf8\ub9ac\uace0 SSR\u00b7hydration \uc548\uc815\uc131 \ud328\uce58\uc758 \ub3d9\uc2dc \uc9c4\ud589\uc774\ub2e4. Nuxt \uac1c\ubc1c\ud300\uc740 \uc9c0\uae08 \u2018\uc77c\uad04 \uc5c5\uadf8\ub808\uc774\ub4dc\u2019\ubcf4\ub2e4 lockfile, \ucee4\uc2a4\ud140 \ube4c\ub4dc \ud50c\ub7ec\uadf8\uc778, SSR \uc751\ub2f5 \uaddc\uce59\uc744 \ud568\uaed8 \uac80\uc99d\ud558\ub294 \ub2e8\uacc4\uc801 \uc804\ud658\uc744 \uad8c\uc7a5\ud560 \uadfc\uac70\uac00 \ucda9\ubd84\ud558\ub2e4.<\/p>\n<h2>3\uc77c \uacb0\ub860<\/h2>\n<p><strong>\ud575\uc2ec \ub2f5\ubcc0:<\/strong> Nuxt 4.5\ub294 \uc989\uc2dc \uc804\uc0ac \uae30\ubcf8\uac12\uc73c\ub85c \uc62c\ub9ac\uae30\ubcf4\ub2e4 <strong>Vite 8\u00b7Unhead 3\u00b7Unctx 3 \ud638\ud658\uc131<\/strong>\uacfc SSR \ud68c\uadc0\ub97c \ud655\uc778\ud560 \uc218 \uc788\ub294 staging \ud6c4\ubcf4\ub85c \ub2e4\ub904\uc57c \ud55c\ub2e4. Nuxt 3 \uc0ac\uc6a9\uc790\ub294 <a href=\"https:\/\/github.com\/nuxt\/nuxt\/releases\/tag\/v3.21.9\" target=\"_blank\" rel=\"noopener\">3.21.9<\/a> \ud328\uce58\ub85c CSS\u00b7SSR\u00b7Nitro \ud68c\uadc0\ub97c \uba3c\uc800 \uc904\uc774\uace0, 2026\ub144 7\uc6d4 31\uc77c EOL \uc804\uc5d0 Nuxt 4 \uc804\ud658\uc744 \uacc4\ud68d\ud558\ub294 \uac83\uc774 \ud604\uc2e4\uc801\uc774\ub2e4. Vue 3.6 RC\/Vapor\uc640 Nuxt\uc758 SSR streaming\uc740 \uc131\ub2a5 \uc2e4\ud5d8\uc5d0\ub294 \uc720\ub9dd\ud558\uc9c0\ub9cc, \ub458 \ub2e4 \ubc94\uc704\ub97c \uc81c\ud55c\ud55c canary\uc640 \uad00\uce21 \uc9c0\ud45c\uac00 \uc120\ud589\ub3fc\uc57c \ud55c\ub2e4.<\/p>\n<p><strong>\ud655\uc778\ub41c \uc0ac\uc2e4:<\/strong> 7\uc6d4 18\uc77c Nuxt 4.5.0\u00b7Nuxt 3.21.9\uc640 Vue 3.6.0-rc.1\uc774 \uacf5\uac1c\ub410\uace0, 7\uc6d4 19\uc77c Unhead 3.2.1\uc774 \ub9b4\ub9ac\uc2a4\ub410\ub2e4. <strong>\ud574\uc11d:<\/strong> \ube4c\ub4dc \ub808\uc774\uc5b4\u00b7head \uad00\ub9ac\u00b7\ubc18\uc751\uc131\u00b7SSR \ucd9c\ub825\uc774 \ub3d9\uc2dc\uc5d0 \uc6c0\uc9c1\uc774\ub294 \uc804\ud658 \uad6c\uac04\uc774\ub2e4. <strong>\uc801\uc6a9 \uc6d0\uce59:<\/strong> \uc0c8 \uae30\ub2a5\uc744 \ud55c \ubc88\uc5d0 \ucf1c\uc9c0 \ub9d0\uace0, \uc758\uc874\uc131 \ud2b8\ub9ac\uc640 \uc2e4\uc81c SSR HTML\uc744 \uac19\uc740 \ubc30\ud3ec \ud6c4\ubcf4\uc5d0\uc11c \ud655\uc778\ud55c\ub2e4.<\/p>\n<h2>\uc774\ubc88 3\uc77c\uc5d0 \ud655\uc778\ud55c 6\uac1c \ud575\uc2ec \uc774\uc288<\/h2>\n<ul>\n<li><strong>Nuxt 4.5.0:<\/strong> Vite 8, Unhead v3, Unctx v3\uc640 tsdown \uae30\ubc18 \ube4c\ub4dc \uacc4\uc57d\uc744 \ud3ec\ud568\ud55c minor \ub9b4\ub9ac\uc2a4.<\/li>\n<li><strong>Nuxt 4.5\uc758 \uc2e4\ud5d8 \uae30\ub2a5:<\/strong> SSR streaming, \uacf5\uc720 file watcher, prefetch preload hints \ubc0f \uc548\uc815 \uc624\ub958 \ucf54\ub4dc.<\/li>\n<li><strong>Nuxt 3.21.9:<\/strong> lazy component CSS\u00b7server page CSS\u00b7nested Nitro layers\u00b7hydration \uc774\ud6c4 \uac31\uc2e0 \ub4f1\uc744 \uc218\uc815\ud55c \uc720\uc9c0\ubcf4\uc218 \ud328\uce58.<\/li>\n<li><strong>Vue 3.6.0-rc.1:<\/strong> Vapor Mode \uae30\ub2a5 \uc644\uc131\uacfc alien-signals \uae30\ubc18 <code>@vue\/reactivity<\/code> \uc7ac\uad6c\uc131. \uc0ac\uc804 \ub9b4\ub9ac\uc2a4\ub2e4.<\/li>\n<li><strong>Vue 3.5.40:<\/strong> hydration, server renderer, lazy hydration, reactivity \uad00\ub828 \uc548\uc815 \ubc84\uadf8 \uc218\uc815.<\/li>\n<li><strong>Unhead 3.2.0\/3.2.1:<\/strong> 3.2.0\uc758 Nuxt mixed-major \ud638\ud658 \uc218\uc815\uacfc 3.2.1\uc758 SSR mutation target \ubcf4\uc874 \uc218\uc815.<\/li>\n<\/ul>\n<h2>1. Nuxt 4.5: Nuxt 5 \uc900\ube44\uc640 Vite 8 \uc804\ud658\uc740 \ud558\ub098\uc758 \uac80\uc99d \ub2e8\uc704\ub2e4<\/h2>\n<p><strong>\uc0ac\uc2e4:<\/strong> <a href=\"https:\/\/github.com\/nuxt\/nuxt\/releases\/tag\/v4.5.0\" target=\"_blank\" rel=\"noopener\">Nuxt 4.5.0 \uacf5\uc2dd \ub9b4\ub9ac\uc2a4<\/a>\ub294 Vite 8, Unhead v3, Unctx v3\ub97c \ucc44\ud0dd\ud558\uace0 \ud504\ub808\uc784\uc6cc\ud06c \uc790\uccb4 \ube4c\ub4dc\ub97c tsdown\uc73c\ub85c \uc62e\uacbc\ub2e4. Nuxt \ud300\uc740 \uc774\ub97c Nuxt 5\uc640\uc758 \ub0b4\ubd80 \uaca9\ucc28\ub97c \uc904\uc774\ub294 \uc791\uc5c5\uc73c\ub85c \uc124\uba85\ud558\uba70, <code>future.compatibilityVersion: 5<\/code>\ub85c \uc77c\ubd80 breaking change\ub97c \ubbf8\ub9ac \uc2dc\ud5d8\ud560 \uc218 \uc788\ub2e4\uace0 \uc548\ub0b4\ud55c\ub2e4.<\/p>\n<p><strong>\uc2dc\uc0ac\uc810:<\/strong> Nuxt \uc758\uc874\uc131\ub9cc \ubc14\ub00c\ub294 \ud328\uce58\uac00 \uc544\ub2c8\ub2e4. \uc9c1\uc811 \uc758\uc874\ud558\ub294 Vite \ud50c\ub7ec\uadf8\uc778, <code>vite.config<\/code> \uc870\uc815, Vite \ubc84\uc804\uc744 \uace0\uc815\ud55c \ud50c\ub7ec\uadf8\uc778, \uadf8\ub9ac\uace0 Unhead\uc758 \ub354 \uc5c4\uaca9\ud55c <code>useHead<\/code> \ud0c0\uc785\uc774 \ud55c \ubc88\uc5d0 \uc601\ud5a5\uc744 \ubc1b\uc744 \uc218 \uc788\ub2e4. \ub9b4\ub9ac\uc2a4 \ub178\ud2b8\ub294 \ub300\ubd80\ubd84\uc758 \uc571\uc5d0 \ud22c\uba85\ud55c \uc804\ud658\uc744 \ubaa9\ud45c\ub85c \ud558\uc9c0\ub9cc, Vite 8\uc740 major\uc774\ubbc0\ub85c production \uc2b9\uaca9 \uc804\uc5d0 \ud638\ud658\uc131\uc744 \ud655\uc778\ud558\ub77c\uace0 \uba85\uc2dc\ud55c\ub2e4.<\/p>\n<h3>\uc2e4\ubb34 \uc801\uc6a9: lockfile\uacfc \ud0c0\uc785 \uac80\uc0ac\ub97c \ud568\uaed8 \ubcf8\ub2e4<\/h3>\n<p>\uc0c8 \ube0c\ub79c\uce58\uc5d0\uc11c <code>npx nuxt upgrade --dedupe<\/code>\ub97c \uc2e4\ud589\ud55c \ub4a4, <code>pnpm why vite unhead unctx<\/code> \ub610\ub294 \uc0ac\uc6a9\ud558\ub294 \ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790\uc758 \ub3d9\ub4f1 \uba85\ub839\uc73c\ub85c \uc911\ubcf5\u00b7override\ub97c \uae30\ub85d\ud55c\ub2e4. \uc774\uc5b4 <code>nuxt typecheck<\/code>, production build, Nitro \uae30\ub3d9, \ub300\ud45c SSR URL\uc758 HTML\u00b7canonical\u00b7head \ud0dc\uadf8\u00b7hydration \ucf58\uc194 \uc624\ub958\ub97c \uac19\uc740 lockfile \uae30\uc900\uc73c\ub85c \ube44\uad50\ud55c\ub2e4. <code>useHead<\/code> \uc785\ub825\uc744 \ub290\uc2a8\ud55c \ud0c0\uc785\uc73c\ub85c \uc0ac\uc6a9\ud558\ub358 \ucf54\ub4dc\ub294 Unhead v3\uc5d0\uc11c \ud0c0\uc785 \uc624\ub958\uac00 \uc2e4\uc81c \uc124\uc815 \ubb38\uc81c\ub97c \ub4dc\ub7ec\ub0b4\ub294 \uc2e0\ud638\uc77c \uc218 \uc788\uc73c\ubbc0\ub85c \ubb34\uc2dc\ud558\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n<h2>2. SSR streaming\uc740 TTFB \uc2e4\ud5d8\uc774\uc9c0 \uae30\ubcf8 \uc2a4\uc704\uce58\uac00 \uc544\ub2c8\ub2e4<\/h2>\n<p><strong>\uc0ac\uc2e4:<\/strong> Nuxt 4.5\uc5d0\ub294 <code>experimental.ssrStreaming<\/code>\uc774 \ucd94\uac00\ub410\ub2e4. HTML shell\uc744 \uba3c\uc800 flush\ud558\uace0 Vue \ub80c\ub354\ub9c1\uacfc \ud568\uaed8 body\ub97c \uc804\uc1a1\ud558\uba70, bot\/crawler\uc5d0\ub294 \uc644\uc804 \ub80c\ub354 HTML\uc744 \uc81c\uacf5\ud558\ub3c4\ub85d \uc124\uacc4\ub410\ub2e4. \ub2e4\ub9cc \uccab \ubc14\uc774\ud2b8\uac00 \ub098\uac00\uba74 \uc774\ud6c4\uc758 status\u00b7header\u00b7cookie \ubcc0\uacbd\uc740 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc804\ub2ec\ub418\uc9c0 \uc54a\ub294\ub2e4. redirect, cache, ISR, SWR, <code>noScripts<\/code>, <code>ssr: false<\/code> route rule\uc5d0\ub294 buffered renderer fallback\uc774 \uc801\uc6a9\ub41c\ub2e4.<\/p>\n<p><strong>\uc2dc\uc0ac\uc810:<\/strong> \ucf58\ud150\uce20 \ud398\uc774\uc9c0\uc758 TTFB\ub97c \uac1c\uc120\ud560 \uac00\ub2a5\uc131\uc740 \uc788\uc9c0\ub9cc, \uc751\ub2f5\uc744 \ub2a6\uac8c \ubc14\uafb8\ub294 middleware\u00b7<code>setResponseStatus()<\/code>\u00b7cookie \uc4f0\uae30 \ud750\ub984\uc744 \uac00\uc9c4 \uc571\uc5d0\ub294 route \ub2e8\uc704 \uac80\uc99d\uc774 \ud544\uc694\ud558\ub2e4. \uc774\ub294 \uc131\ub2a5 \uc8fc\uc7a5\uc73c\ub85c \uc77c\ubc18\ud654\ud560 \ub2e8\uacc4\uac00 \uc544\ub2c8\ub77c, <a href=\"https:\/\/nuxt.com\/docs\/guide\/going-further\/experimental-features#ssrstreaming\" target=\"_blank\" rel=\"noopener\">\uacf5\uc2dd experimental \ubb38\uc11c<\/a>\uc758 fallback \uaddc\uce59\uc744 \uae30\uc900\uc73c\ub85c \ud55c \uac00\uc124 \uac80\uc99d \ub300\uc0c1\uc774\ub2e4.<\/p>\n<h3>\uc2e4\ubb34 \uc801\uc6a9: \ud55c route, \ub450 \uc9c0\ud45c, \uba85\uc2dc\uc801 \ub864\ubc31<\/h3>\n<p>\uac80\uc0c9 \uc720\uc785\uc774 \ud070 \uc77d\uae30 \uc804\uc6a9 route \ud558\ub098\uc5d0\ub9cc \ud65c\uc131\ud654\ud558\uace0 buffered baseline\uacfc TTFB\u00b7LCP\u00b75xx\u00b7hydration error\ub97c \ube44\uad50\ud55c\ub2e4. \ub85c\uadf8\uc778, redirect, A\/B cookie, \uac1c\uc778\ud654 cache\uac00 \uac78\ub9b0 route\ub294 \uc81c\uc678\ud55c\ub2e4. \uc751\ub2f5 header\uc640 cookie\ub97c end-to-end\ub85c \ucea1\ucc98\ud558\uace0, \ub204\ub77d \ub610\ub294 cache key \ud63c\uc120\uc744 \ubc1c\uacac\ud558\uba74 \ud574\ub2f9 route\uc758 <code>streaming: false<\/code>\ub85c \uc989\uc2dc \ub418\ub3cc\ub9b0\ub2e4.<\/p>\n<h2>3. Nuxt 3.21.9: CSS\u00b7SSR\u00b7Nitro \ud68c\uadc0\ub97c \uc904\uc774\ub294 \ub9c8\uc9c0\ub9c9 \uc720\uc9c0\ubcf4\uc218 \ud750\ub984<\/h2>\n<p><strong>\uc0ac\uc2e4:<\/strong> Nuxt 3.21.9\ub294 Vite fallback, <code>#components<\/code>\uc5d0\uc11c lazy import\ud55c \ucef4\ud3ec\ub10c\ud2b8\uc758 inline CSS, <code>inlineStyles<\/code>\ub97c \ub048 server page CSS \ucd94\ucd9c, nested layer\uc758 Nitro transform, <code>ssr: false<\/code>\uc758 styles object, hydration \uc774\ud6c4 \ub370\uc774\ud130 \uac31\uc2e0 \ub4f1\uc744 \uc218\uc815\ud55c\ub2e4. \uac19\uc740 Nuxt 4.5 \ub9b4\ub9ac\uc2a4 \ub178\ud2b8\ub294 Nuxt 3 EOL\uc744 2026\ub144 7\uc6d4 31\uc77c\ub85c \uba85\uc2dc\ud558\uba70, 3.21.9\uac00 4.5\uc758 \ud638\ud658 \uac00\ub2a5\ud55c \ubc84\uadf8 \uc218\uc815\uc744 backport\ud55c\ub2e4\uace0 \uc124\uba85\ud55c\ub2e4.<\/p>\n<p><strong>\uc2dc\uc0ac\uc810:<\/strong> Nuxt 3\uc744 \ub2f9\uc7a5 \uc885\ub8cc\ud560 \uc218 \uc5c6\ub294 \ud300\uc5d0\ub3c4 \u2018\uadf8\ub300\ub85c \uc720\uc9c0\u2019\uac00 \uc544\ub2c8\ub77c CSS \uc804\ub2ec\uacfc SSR \ucd9c\ub825\uc758 \ud68c\uadc0\ub97c \uc904\uc77c maintenance window\uac00 \ub0a8\uc544 \uc788\ub2e4. \uadf8\ub7ec\ub098 Vite 8\u00b7Rspack 2\u00b7Unhead 3\uc758 major \uc804\ud658\uc740 v4 \uc804\uc6a9\uc774\ubbc0\ub85c 3.x\uc5d0 \uc0c8 build stack\uc744 \uac15\uc81c\ub85c \uc8fc\uc785\ud558\uc9c0 \uc54a\ub294 \ud3b8\uc774 \uc548\uc804\ud558\ub2e4.<\/p>\n<h3>\uc2e4\ubb34 \uc801\uc6a9: \ub208\uc5d0 \ubcf4\uc774\ub294 CSS\uc640 \uc11c\ubc84 \ucd9c\ub825\uc73c\ub85c \ud68c\uadc0\ub97c \uc7a1\ub294\ub2e4<\/h3>\n<p>3.21.9 \ud6c4\ubcf4\uc5d0\uc11c\ub294 lazy component\uac00 \uc788\ub294 route, <code>inlineStyles: false<\/code> route, nested layer\ub97c \uc4f0\ub294 route, <code>ssr: false<\/code> route\ub97c Playwright\uc640 curl\ub85c \ub098\ub220 \uac80\uc0ac\ud55c\ub2e4. HTML\uc758 stylesheet link, \uccab paint, client navigation, hydration warning, prerender cache \ud30c\uc77c \uc0dd\uc131\uae4c\uc9c0 \ud655\uc778\ud55c\ub2e4. \uc2e4\ud328\ud558\uba74 lockfile\uacfc \uc774\uc804 Nitro \uc0b0\ucd9c\ubb3c\uc744 \ud568\uaed8 \ub418\ub3cc\ub824 \uc6d0\uc778\uc744 \ubd84\ub9ac\ud55c\ub2e4.<\/p>\n<h2>4. Vue 3.6 RC: Vapor\uc640 reactivity \uac1c\uc120\uc740 \u2018\uc120\ud0dd\uc801 \uc2e4\ud5d8\u2019\uc73c\ub85c \uc2dc\uc791\ud55c\ub2e4<\/h2>\n<p><strong>\uc0ac\uc2e4:<\/strong> <a href=\"https:\/\/github.com\/vuejs\/core\/releases\/tag\/v3.6.0-rc.1\" target=\"_blank\" rel=\"noopener\">Vue 3.6.0-rc.1<\/a>\uc740 Vapor Mode\uc758 \uc758\ub3c4\ud55c feature set\uc774 \uc644\ub8cc\ub3fc RC\uc5d0 \uc9c4\uc785\ud588\ub2e4\uace0 \ubc1d\ud78c\ub2e4. \ub610\ud55c alien-signals \uae30\ubc18 <code>@vue\/reactivity<\/code> \ub300\uaddc\ubaa8 \uc7ac\uad6c\uc131\uc73c\ub85c \ubc18\uc751\uc131 \uc131\ub2a5\uacfc \uba54\ubaa8\ub9ac \uc0ac\uc6a9\uc774 \uac1c\uc120\ub41c\ub2e4\uace0 \uc124\uba85\ud55c\ub2e4. Vapor\ub294 SFC\uc758 baseline bundle\uc744 \uc904\uc774\uace0 \uc131\ub2a5\uc744 \ub192\uc774\ub824\ub294 opt-in \ucef4\ud30c\uc77c \ubaa8\ub4dc\uc9c0\ub9cc, Options API, <code>app.config.globalProperties<\/code>, \uc77c\ubd80 instance proxy\/VNode \uc758\uc874 \uae30\ub2a5\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n<p><strong>\ud574\uc11d:<\/strong> RC\ub294 \ubc30\ud3ec \uc548\uc815\ud310\uc774 \uc544\ub2c8\ub2e4. \ud2b9\ud788 Nuxt \uc571\uc5d0\uc11c \ub80c\ub354 \ud568\uc218\u00b7JSX\u00b7VDOM \uae30\ubc18 UI \ub77c\uc774\ube0c\ub7ec\ub9ac\u00b7\ubcf5\uc7a1\ud55c slot\/hydration\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 Vapor\uc640 VDOM interop\uc740 bundle \uc774\ub4dd\uc744 \uc0c1\uc1c4\ud558\uac70\ub098 edge case\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub2e4. \uacf5\uc2dd \ub178\ud2b8\ub3c4 \uc131\ub2a5 \ubbfc\uac10 \ud398\uc774\uc9c0\uc758 \ubd80\ubd84 \uc0ac\uc6a9 \ub610\ub294 \uc791\uc740 \uc2e0\uaddc \uc571\uc5d0\uc11c\uc758 \uc0ac\uc6a9\uc744 \uad8c\uc7a5\ud558\uace0, \ud63c\ud569 \uc911\ucca9\uc744 \uc904\uc774\ub77c\uace0 \uc548\ub0b4\ud55c\ub2e4.<\/p>\n<h3>\uc2e4\ubb34 \uc801\uc6a9: \ucef4\ud3ec\ub10c\ud2b8 \uacbd\uacc4\ub97c \uace0\ub974\uace0 \ube44\uad50\ud55c\ub2e4<\/h3>\n<p>Options API\ub098 instance proxy\uc5d0 \uc758\uc874\ud558\uc9c0 \uc54a\ub294 \ub3c5\ub9bd\uc801 \ubaa9\ub85d\u00b7\ub300\uc2dc\ubcf4\ub4dc \ucef4\ud3ec\ub10c\ud2b8 \ud558\ub098\ub97c \ud6c4\ubcf4\ub85c \uace0\ub978\ub2e4. \ub3d9\uc77c \uc0ac\uc6a9\uc790 \uc2dc\ub098\ub9ac\uc624\uc5d0\uc11c client bundle, INP, memory, SSR hydration warning\uc744 VDOM baseline\uacfc \ube44\uad50\ud55c\ub2e4. <code>stopPropagation()<\/code>\uc5d0 \uc758\uc874\ud558\ub294 \uc774\ubca4\ud2b8\uc640 slot\uc744 \u2018\ubbf8\ub9ac \uc2e4\ud589\ud574 \uac80\uc0ac\u2019\ud558\ub294 \ud328\ud134\uc740 Vapor\uc758 event delegation\/slot \uc2e4\ud589 \uaddc\uce59\uacfc \ucda9\ub3cc\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \uc804\uc6a9 e2e fixture\ub97c \ucd94\uac00\ud55c\ub2e4.<\/p>\n<h2>5. \uc548\uc815 \ud328\uce58\uc640 head \uad00\ub9ac: Vue 3.5.40\u00b7Unhead 3.2.1\ub3c4 \uac19\uc774 \ud655\uc778\ud55c\ub2e4<\/h2>\n<p><strong>\uc0ac\uc2e4:<\/strong> <a href=\"https:\/\/github.com\/vuejs\/core\/releases\/tag\/v3.5.40\" target=\"_blank\" rel=\"noopener\">Vue 3.5.40<\/a> changelog\uc5d0\ub294 dynamic props hydration namespace, detached root lazy hydration, optimized component server render \uc624\ub958, SSR comment escaping, effect scope stop \ub4f1\uc758 \uc218\uc815\uc774 \ud3ec\ud568\ub410\ub2e4. 7\uc6d4 19\uc77c <a href=\"https:\/\/github.com\/unjs\/unhead\/releases\/tag\/v3.2.0\" target=\"_blank\" rel=\"noopener\">Unhead 3.2.0<\/a>\uc740 Nuxt \ube4c\ub4dc\uc5d0\uc11c mixed Unhead major\ub97c \ud5c8\uc6a9\ud558\ub294 \uc218\uc815\uc744, \ub4a4\uc774\uc740 <a href=\"https:\/\/github.com\/unjs\/unhead\/releases\/tag\/v3.2.1\" target=\"_blank\" rel=\"noopener\">3.2.1<\/a>\uc740 head.ssr mutation target\uc744 \ubcf4\uc874\ud558\ub294 \uc218\uc815\uc744 \ub9b4\ub9ac\uc2a4\ud588\ub2e4.<\/p>\n<p><strong>\uc2dc\uc0ac\uc810:<\/strong> Nuxt 4.5\uc758 Unhead v3 \uc804\ud658\uc744 \uac80\ud1a0\ud558\ub294 \ud300\uc740 head \ud0dc\uadf8\ub9cc \ud655\uc778\ud574\uc11c\ub294 \ubd80\uc871\ud558\ub2e4. \uc11c\ubc84\uac00 \ub9cc\ub4e0 title\/meta\/canonical\/structured data\uc640 client navigation \ub4a4\uc758 head diff, \uadf8\ub9ac\uace0 \uae30\uc874 \ubaa8\ub4c8\uc774 \uac00\uc838\uc624\ub294 Unhead major\uac00 \ud63c\ud569\ub418\uc9c0 \uc54a\ub294\uc9c0\ub97c \uac19\uc740 smoke test\uc5d0\uc11c \ud655\uc778\ud574\uc57c \ud55c\ub2e4.<\/p>\n<h2>\ud504\ub860\ud2b8\uc5d4\ub4dc \uac1c\ubc1c\uc790 \uccb4\ud06c\ub9ac\uc2a4\ud2b8<\/h2>\n<ul>\n<li><strong>P0 \u2014 \uc758\uc874\uc131:<\/strong> Nuxt 4.5 \ub610\ub294 3.21.9 \ud6c4\ubcf4\ub97c \ubcc4\ub3c4 \ube0c\ub79c\uce58\uc5d0 \uc124\uce58\ud558\uace0 lockfile diff, Node \ubc84\uc804, Vite\/Unhead\/Unctx \uc911\ubcf5\uc744 \uae30\ub85d\ud55c\ub2e4.<\/li>\n<li><strong>P0 \u2014 build:<\/strong> typecheck \u2192 clean production build \u2192 Nitro \uae30\ub3d9\uc744 CI \ud558\ub098\uc758 job\uc73c\ub85c \ubb36\uace0, build cache\ub97c \ube44\uc6b4 \uc2e4\ud589\ub3c4 \ud55c \ubc88 \ud655\uc778\ud55c\ub2e4.<\/li>\n<li><strong>P0 \u2014 SSR:<\/strong> \ub300\ud45c public route\uc640 authenticated route\uc5d0\uc11c status, cache-control, set-cookie, canonical, og\/meta, HTML stylesheet, hydration console\uc744 \ube44\uad50\ud55c\ub2e4.<\/li>\n<li><strong>P1 \u2014 CSS:<\/strong> lazy component, route-level code splitting, <code>inlineStyles: false<\/code>, nested Nuxt layer\uc758 \uccab paint\uc640 navigation CSS\ub97c \uc2a4\ub0c5\uc0f7\uc73c\ub85c \ub0a8\uae34\ub2e4.<\/li>\n<li><strong>P1 \u2014 \uc2e4\ud5d8 \uae30\ub2a5:<\/strong> SSR streaming\/Vapor\ub294 \ud55c route \ub610\ub294 \ud55c \ucef4\ud3ec\ub10c\ud2b8\ub85c \ud55c\uc815\ud558\uace0 \uc131\ub2a5\u00b7\uc624\ub958\u00b7\ub864\ubc31 \uae30\uc900\uc744 PR\uc5d0 \uc801\ub294\ub2e4.<\/li>\n<li><strong>P1 \u2014 \uc218\uba85\uc8fc\uae30:<\/strong> Nuxt 3 \ud504\ub85c\uc81d\ud2b8\ub294 7\uc6d4 31\uc77c EOL \uc774\uc804\uc5d0 module inventory, custom Vite config, migration owner\uc640 \uc77c\uc815\uc744 \ud655\uc815\ud55c\ub2e4.<\/li>\n<\/ul>\n<h2>\uc790\uc8fc \ubb3b\ub294 \uc9c8\ubb38<\/h2>\n<h3>Nuxt 4.5\ub85c \ubc14\ub85c production \uc5c5\uadf8\ub808\uc774\ub4dc\ud574\ub3c4 \ub418\ub098?<\/h3>\n<p>\uc544\ub2c8\ub2e4. \uacf5\uc2dd \ub9b4\ub9ac\uc2a4\ub294 Vite 8\uacfc Unhead v3 \uac19\uc740 major \uc758\uc874\uc131 \uc804\ud658\uc744 \ud3ec\ud568\ud55c\ub2e4. \ucee4\uc2a4\ud140 \ud50c\ub7ec\uadf8\uc778\u00b7\uc124\uc815\u00b7head \ud0c0\uc785\u00b7SSR \uc751\ub2f5\uc744 staging\uc5d0\uc11c \uac80\uc99d\ud55c \ub4a4 canary\ub85c \uc2b9\uaca9\ud558\ub294 \ud3b8\uc774 \uc801\uc808\ud558\ub2e4.<\/p>\n<h3>SSR streaming\uc744 \ucf1c\uba74 \ubaa8\ub4e0 \ud398\uc774\uc9c0\uac00 \ube68\ub77c\uc9c0\ub098?<\/h3>\n<p>\ubcf4\uc7a5\ud560 \uc218 \uc5c6\ub2e4. \uc774\ub294 experimental \uae30\ub2a5\uc774\uba70 route\uc758 \uc751\ub2f5 \ubcc0\uacbd \ubc29\uc2dd, crawler \ucc98\ub9ac, cache\/redirect \uaddc\uce59\uc5d0 \ub530\ub77c buffered fallback\uc774 \uc801\uc6a9\ub41c\ub2e4. TTFB\uc640 \uc0ac\uc6a9\uc790 \uacbd\ud5d8 \uc9c0\ud45c\ub97c \uc2e4\uc81c \ud2b8\ub798\ud53d \uc870\uac74\uc5d0\uc11c \ube44\uad50\ud574\uc57c \ud55c\ub2e4.<\/p>\n<h3>Vue 3.6 RC Vapor\ub97c Nuxt \uc804\uccb4\uc5d0 \uc801\uc6a9\ud574\uc57c \ud558\ub098?<\/h3>\n<p>\uc544\ub2c8\ub2e4. Vapor\ub294 opt-in\uc774\uba70 Options API\uc640 VNode\/public instance \uc758\uc874 \uae30\ub2a5\uc5d0 \uc81c\uc57d\uc774 \uc788\ub2e4. \uc131\ub2a5 \ubbfc\uac10\ud55c \uc791\uc740 \uc601\uc5ed\ubd80\ud130 \uc0c1\ud638\uc6b4\uc6a9\u00b7hydration \ud14c\uc2a4\ud2b8\ub97c \uac70\uccd0 \ud310\ub2e8\ud55c\ub2e4.<\/p>\n<h2>\ucd9c\ucc98 \ubc0f \ud655\uc778 \ubc94\uc704<\/h2>\n<p>\uc774 \ubcf4\uace0\uc11c\ub294 2026\ub144 7\uc6d4 17\uc77c~20\uc77c KST\uc5d0 \ud655\uc778\ud55c \uacf5\uc2dd \ub9b4\ub9ac\uc2a4\uc640 \uacf5\uc2dd \ubb38\uc11c\ub97c \uae30\uc900\uc73c\ub85c \uc791\uc131\ud588\ub2e4. Vue 3.6.0-rc.1\uacfc SSR streaming\uc740 \uac01\uac01 pre-release\/experimental \uc0c1\ud0dc\uc774\uba70 \uc548\uc815\ud310 \uae30\ub2a5\ucc98\ub7fc \uc11c\uc220\ud558\uc9c0 \uc54a\uc558\ub2e4. Vite 8.1.5\ub294 72\uc2dc\uac04 \ucc3d \uc9c1\uc804\uc758 \ucd5c\uc2e0 \uc548\uc815 \ud328\uce58\uc774\ubbc0\ub85c Nuxt 4.5\uc758 Vite 8 \uc804\ud658\uc744 \uac80\uc99d\ud560 \ub54c\uc758 \ud604\ud589 \uae30\uc900\uc73c\ub85c\ub9cc \ucc38\uace0\ud55c\ub2e4.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/nuxt\/nuxt\/releases\/tag\/v4.5.0\" target=\"_blank\" rel=\"noopener\">Nuxt 4.5.0 \uacf5\uc2dd \ub9b4\ub9ac\uc2a4<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/nuxt\/nuxt\/releases\/tag\/v3.21.9\" target=\"_blank\" rel=\"noopener\">Nuxt 3.21.9 \uacf5\uc2dd \ub9b4\ub9ac\uc2a4<\/a><\/li>\n<li><a href=\"https:\/\/nuxt.com\/docs\/getting-started\/upgrade\" target=\"_blank\" rel=\"noopener\">Nuxt \uacf5\uc2dd \uc5c5\uadf8\ub808\uc774\ub4dc \uac00\uc774\ub4dc<\/a><\/li>\n<li><a href=\"https:\/\/nuxt.com\/docs\/guide\/going-further\/experimental-features#ssrstreaming\" target=\"_blank\" rel=\"noopener\">Nuxt SSR streaming \ubb38\uc11c<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/vuejs\/core\/releases\/tag\/v3.6.0-rc.1\" target=\"_blank\" rel=\"noopener\">Vue 3.6.0-rc.1 \uacf5\uc2dd \ub9b4\ub9ac\uc2a4<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/vuejs\/core\/releases\/tag\/v3.5.40\" target=\"_blank\" rel=\"noopener\">Vue 3.5.40 \uacf5\uc2dd \ub9b4\ub9ac\uc2a4 \ubc0f changelog<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/unjs\/unhead\/releases\/tag\/v3.2.1\" target=\"_blank\" rel=\"noopener\">Unhead 3.2.1 \uacf5\uc2dd \ub9b4\ub9ac\uc2a4<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/vitejs\/vite\/releases\/tag\/v8.1.5\" target=\"_blank\" rel=\"noopener\">Vite 8.1.5 \ucd5c\uc2e0 \uc548\uc815 \ud328\uce58<\/a><\/li>\n<\/ul>\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>\uc694\uc57d: \ucd5c\uadfc 72\uc2dc\uac04\uc758 Nuxt\u00b7Vue \ud504\ub860\ud2b8\uc5d4\ub4dc \uc0dd\ud0dc\uacc4\uc5d0\uc11c \uac00\uc7a5 \ud070 \ubcc0\ud654\ub294 Nuxt 4.5\uc758 Vite 8 \uae30\ubc18 \uc804\ud658\uacfc Nuxt 5 \uc900\ube44, Vue 3.6 RC\uc758 Vapor\/\ubc18\uc751\uc131 \uc7ac\uad6c\uc131, \uadf8\ub9ac\uace0 SSR\u00b7hydration \uc548\uc815\uc131 \ud328\uce58\uc758 \ub3d9\uc2dc \uc9c4\ud589\uc774\ub2e4. Nuxt \uac1c\ubc1c\ud300\uc740 \uc9c0\uae08 \u2018\uc77c\uad04 \uc5c5\uadf8\ub808\uc774\ub4dc\u2019\ubcf4\ub2e4 lockfile, \ucee4\uc2a4\ud140 \ube4c\ub4dc \ud50c\ub7ec\uadf8\uc778, SSR \uc751\ub2f5 \uaddc\uce59\uc744 \ud568\uaed8 \uac80\uc99d\ud558\ub294 \ub2e8\uacc4\uc801 \uc804\ud658\uc744 \uad8c\uc7a5\ud560 \uadfc\uac70\uac00 \ucda9\ubd84\ud558\ub2e4. 3\uc77c \uacb0\ub860 \ud575\uc2ec \ub2f5\ubcc0: Nuxt 4.5\ub294 \uc989\uc2dc [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":272,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-273","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\/273","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=273"}],"version-history":[{"count":0,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/posts\/273\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/media\/272"}],"wp:attachment":[{"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/media?parent=273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/categories?post=273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/tags?post=273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}