{"id":558,"date":"2026-10-04T12:47:31","date_gmt":"2026-10-04T12:47:31","guid":{"rendered":"https:\/\/gilnas.synology.me\/wordpress\/558\/"},"modified":"2026-10-04T12:47:31","modified_gmt":"2026-10-04T12:47:31","slug":"nuxt-4-5-2-%ed%8c%a8%ec%b9%98-server-islands%c2%b7routerules%c2%b7nuxt-3-eol-%ec%a0%90%ea%b2%80-nuxt-4-5-2-patch-checklist","status":"publish","type":"post","link":"https:\/\/gilnas.synology.me\/wordpress\/558\/","title":{"rendered":"Nuxt 4.5.2 \ud328\uce58: Server Islands\u00b7routeRules\u00b7Nuxt 3 EOL \uc810\uac80 | Nuxt 4.5.2 Patch Checklist"},"content":{"rendered":"<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/gilnas.synology.me\/wordpress\/wp-content\/uploads\/2026\/10\/nuxt-2026-10-04.jpg\" alt=\"Nuxt 4.5.2 \ud328\uce58: Server Islands\u00b7routeRules\u00b7Nuxt 3 EOL \uc810\uac80 | Nuxt 4.5.2 Patch Checklist\" \/><\/figure>\n<p><strong>\ud575\uc2ec \ub2f5\ubcc0:<\/strong> Nuxt 4.5.2\uc640 3.21.11\uc740 2026\ub144 8\uc6d4 5\uc77c \uacf5\uac1c\ub41c \ud328\uce58 \ub9b4\ub9ac\uc2a4\uc785\ub2c8\ub2e4. \uc9c0\ub09c \ubcf4\uc548 \ub9b4\ub9ac\uc2a4 4.5.1\u00b73.21.10\uc744 \uc774\ubbf8 \uc801\uc6a9\ud55c \ud300\uc774\ub77c\ub3c4, server islands\uc758 payload \uc9c1\ub82c\ud654\uc640 props \uc785\ub825, prerender \uc911\ubcf5 \ub80c\ub354, routeRules\uc758 decoded path \ub9e4\uce6d, preview mode hydration\uc744 \uc2e4\uc81c \uc571 \uacbd\ub85c\uc5d0\uc11c \ub2e4\uc2dc \ud655\uc778\ud560 \uc774\uc720\uac00 \uc0dd\uacbc\uc2b5\ub2c8\ub2e4. \ud2b9\ud788 Nuxt 3\uc740 7\uc6d4 31\uc77c\uc5d0 EOL(\uacf5\uc2dd \uc720\uc9c0\ubcf4\uc218 \uc885\ub8cc)\uc5d0 \ub4e4\uc5b4\uac14\uc73c\ubbc0\ub85c 3.21.11\uc740 \u201c\uacc4\uc18d \uba38\ubb3c\ub7ec\ub3c4 \uc548\uc804\ud558\ub2e4\u201d\ub294 \ub73b\uc774 \uc544\ub2d9\ub2c8\ub2e4.<\/p>\n<p>\ud328\uce58 \ub178\ud2b8\uc758 \ud56d\ubaa9\uc740 \uc791\uc544 \ubcf4\uc785\ub2c8\ub2e4. \uadf8\ub7ec\ub098 <code>components\/islands\/<\/code>\uc5d0\uc11c \ud0a4 \uc774\ub984\uc5d0 \ubc11\uc904\uc774 \ub4e4\uc5b4\uac04 \ub370\uc774\ud130\ub97c \ubcf4\ub0b4\uac70\ub098, <code>routeRules<\/code>\uc5d0 URL \uaddc\uce59\uc744 \uc801\uace0, \uc815\uc801 \uc0dd\uc131\uacfc preview mode\ub97c \ud568\uaed8 \uc4f0\ub294 \uc11c\ube44\uc2a4\ub77c\uba74 \ud654\uba74\uc774 \uc544\ub2c8\ub77c \uc11c\ubc84 \ub80c\ub354\ub9c1\u00b7payload\u00b7\uce90\uc2dc \uacbd\uacc4\uc5d0\uc11c \ubb38\uc81c\uac00 \ub4dc\ub7ec\ub0a0 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubc30\ud3ec \ud6c4 \ud398\uc774\uc9c0\uac00 \uc5f4\ub9ac\ub294\uc9c0\ub9cc \ubcf4\uc9c0 \ub9d0\uace0, \ube4c\ub4dc \uc0b0\ucd9c\ubb3c\uacfc \uc11c\ubc84 \uc694\uccad, \ube0c\ub77c\uc6b0\uc800 hydration\uc744 \ud55c \ud750\ub984\uc73c\ub85c \ud655\uc778\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p><strong>\uc624\ub298\uc758 \uacb0\ub860:<\/strong> 4.5.2\ub294 Nuxt 4 \uc11c\ube44\uc2a4\uc758 \ud604\uc2e4\uc801\uc778 \uae30\uc900 \ubc84\uc804\uc774\uace0, 3.21.11\uc740 migration \uc900\ube44 \uc2dc\uac04\uc744 \ubc84\ub294 \ub9c8\uc9c0\ub9c9 \ud328\uce58\ub85c \ub2e4\ub8e8\ub294 \ud3b8\uc774 \ub9de\uc2b5\ub2c8\ub2e4. <code>npx nuxt upgrade --dedupe<\/code> \ud6c4 typecheck\u00b7production build\u00b7prerender\u00b7\uc778\uc99d \uacbd\ub85c\u00b7island \uc694\uccad\uc744 \ud655\uc778\ud558\uace0, Nuxt 3 \uc11c\ube44\uc2a4\uc5d0\ub294 v4 \uc804\ud658 \ubc94\uc704\uc640 \ub0a0\uc9dc\ub97c \uc774\uc288\ub85c \uace0\uc815\ud574 \ub450\uc138\uc694.<\/p>\n<h2>\ubb34\uc2a8 \uc77c\uc774 \uc788\uc5c8\ub098<\/h2>\n<p><strong>2026\ub144 8\uc6d4 5\uc77c, Nuxt core team:<\/strong> GitHub\uc758 \uacf5\uc2dd <a href=\"https:\/\/github.com\/nuxt\/nuxt\/releases\/tag\/v4.5.2\" target=\"_blank\" rel=\"noopener\">Nuxt v4.5.2 \ub9b4\ub9ac\uc2a4<\/a>\ub294 \ubcc0\uacbd\ub418\uc9c0 \uc54a\uc740 \uc0dd\uc131 \ud30c\uc77c\uc758 \uc7ac\uc791\uc131\uc744 \uac74\ub108\ub6f0\uace0, lazy import\u00b7\ucef4\ud3ec\ub10c\ud2b8 \uc2a4\uce94 \uc7ac\uc0ac\uc6a9\uc73c\ub85c \ud30c\uc2f1\uacfc \uac1c\ubc1c \uc791\uc5c5\uc744 \uac1c\uc120\ud588\uc2b5\ub2c8\ub2e4. \ub3d9\uc2dc\uc5d0 island \ub0b4\ubd80 \ub9c1\ud06c\uc758 \ud074\ub77c\uc774\uc5b8\ud2b8 \ud0d0\uc0c9, \ubc11\uc904 \ud0a4\ub97c \uac00\uc9c4 island payload \uc9c1\ub82c\ud654, prerender \uc2dc island render \uc911\ubcf5 \uc81c\uac70, object\uac00 \uc544\ub2cc island props \uac70\uc808\uc744 \uace0\ucce4\uc2b5\ub2c8\ub2e4. <code>definePageMeta<\/code>\ub85c \uc815\ud55c route params\uc758 \ud0c0\uc785 \uc0dd\uc131\uacfc Vite \ud658\uacbd wrapper\uc758 \uc138\ubd80 \ud638\ud658\uc131\ub3c4 \ud3ec\ud568\ub429\ub2c8\ub2e4.<\/p>\n<p><strong>\uac19\uc740 \ub0a0, Nuxt 3.21.11:<\/strong> <a href=\"https:\/\/github.com\/nuxt\/nuxt\/releases\/tag\/v3.21.11\" target=\"_blank\" rel=\"noopener\">v3.21.11 \uacf5\uc2dd \ub9b4\ub9ac\uc2a4<\/a>\ub294 \ud575\uc2ec island\u00b7routeRules\u00b7asyncData\u00b7preview \uad00\ub828 \uc218\uc815\uc774 backport\ub41c \ud328\uce58\uc785\ub2c8\ub2e4. \ub9b4\ub9ac\uc2a4 \ub178\ud2b8\ub294 Nuxt v3\uac00 EOL\uc774\uba70 v4 \ub610\ub294 \ubcc4\ub3c4 \uc7a5\uae30 \uc9c0\uc6d0\uc744 \uac80\ud1a0\ud558\ub77c\uace0 \ubd84\uba85\ud788 \uc801\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c \uc774 \uae00\uc758 Nuxt 3 \uc870\uc5b8\uc740 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc744 \ub298\ub9ac\ub294 \ubc29\ubc95\uc774 \uc544\ub2c8\ub77c, \ud604\uc7ac \uc11c\ube44\uc2a4\ub97c \uc548\uc815\uc801\uc73c\ub85c \uc774\uc804\ud558\uae30 \uc704\ud55c \uc810\uac80 \uc21c\uc11c\uc785\ub2c8\ub2e4.<\/p>\n<p><strong>\ubcf4\uc548 \ud328\uce58\uc640\uc758 \uc5f0\uacb0:<\/strong> \uc55e\uc120 <a href=\"https:\/\/nuxt.com\/blog\/v4-5-security\" target=\"_blank\" rel=\"noopener\">Nuxt Security Patch Releases<\/a>\ub294 4.5.1\uacfc 3.21.10\uc5d0\uc11c server-side RCE, server island props, route rule \uc778\uc99d \uc6b0\ud68c, cached payload \ub178\ucd9c, \uac1c\ubc1c \uc11c\ubc84 \ub178\ucd9c \ub4f1\uc744 \uc218\uc815\ud588\uace0 CDN\/edge cache purge\ub97c \uad8c\ud588\uc2b5\ub2c8\ub2e4. 4.5.2\uac00 \ubcf4\uc548 \uacf5\uc9c0\ub97c \ub300\uccb4\ud55c\ub2e4\ub294 \ub73b\uc740 \uc544\ub2d9\ub2c8\ub2e4. \uc544\uc9c1 4.5.1 \ubbf8\ub9cc \ub610\ub294 3.21.10 \ubbf8\ub9cc\uc774\uba74 \uba3c\uc800 \ubcf4\uc548 \uae30\uc900\uc120\uc73c\ub85c \uc62c\ub9ac\uace0, \uadf8 \ub2e4\uc74c 4.5.2 \ub610\ub294 3.21.11\uc744 \uac80\uc99d\ud558\ub294 \uc21c\uc11c\uac00 \uc548\uc804\ud569\ub2c8\ub2e4.<\/p>\n<h2>\uc65c \uc911\uc694\ud55c\uac00<\/h2>\n<p>Nuxt\uc758 \ud30c\uc77c \uae30\ubc18 \ub77c\uc6b0\ud305\uc740 \ube60\ub974\uc9c0\ub9cc, \ud55c \ud30c\uc77c\uc758 \uc774\ub984\uacfc URL \uc778\ucf54\ub529, \ubbf8\ub4e4\uc6e8\uc5b4 \uaddc\uce59, \uc815\uc801 \uc0dd\uc131 \uacb0\uacfc\uac00 \uc11c\ub85c \ub2e4\ub978 \uce35\uc5d0\uc11c \ud574\uc11d\ub429\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \uc0ac\ub78c\uc774 \uc77d\ub294 URL\uc5d0\ub294 \uacf5\ubc31\u00b7\ud55c\uae00\u00b7\ud37c\uc13c\ud2b8 \uc778\ucf54\ub529\uc774 \uc11e\uc77c \uc218 \uc788\uace0, <code>routeRules<\/code>\ub294 \uc815\ucc45\uc744 \uc801\uc6a9\ud558\ub294 \uc704\uce58\uc785\ub2c8\ub2e4. v4.5.2\u00b7v3.21.11\uc758 decoded path \ub9e4\uce6d \uc218\uc815\uc740 \u201c\ubcf4\ud638 \uaddc\uce59\uc774 \uc2e4\uc81c \uc694\uccad \uacbd\ub85c\uc5d0\ub3c4 \ub9de\ub294\uac00\u201d\ub97c \ud14c\uc2a4\ud2b8\ud574\uc57c \ud55c\ub2e4\ub294 \uc6b4\uc601 \uc2e0\ud638\uc785\ub2c8\ub2e4. \ud074\ub77c\uc774\uc5b8\ud2b8 middleware\ub294 \ud3b8\uc758 \uae30\ub2a5\uc77c \uc218 \uc788\uc9c0\ub9cc \ubbfc\uac10\ud55c <code>server\/api<\/code> \uc791\uc5c5\uc758 \uc720\uc77c\ud55c \uad8c\ud55c \uacbd\uacc4\uac00 \ub418\uc5b4\uc11c\ub294 \uc548 \ub429\ub2c8\ub2e4.<\/p>\n<p>server island\ub294 \ud398\uc774\uc9c0 \uc804\uccb4 hydration \uc5c6\uc774 \uc11c\ubc84\uc5d0\uc11c \uc791\uc740 \ubd80\ubd84\uc744 \ub80c\ub354\ub9c1\ud574 \uc131\ub2a5\uc744 \ub2e4\ub8e8\ub294 \uae30\ub2a5\uc785\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc785\ub825 props\uc640 payload\ub294 \uc11c\ubc84\ub85c \ub4e4\uc5b4\uc624\ub294 \ub370\uc774\ud130 \uacbd\uacc4\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4. \uc9c0\ub09c \ubcf4\uc548 \ub9b4\ub9ac\uc2a4\uac00 island props\ub97c \ub2e4\ub8ec \ub4a4, \uc774\ubc88 \ud328\uce58\uac00 non-object props \uac70\uc808\uacfc payload \uc9c1\ub82c\ud654\ub97c \ub2e4\ub8ec \uac83\uc740 \ub2e8\uc21c UI \ubc84\uadf8\ubcf4\ub2e4 \uc11c\ube44\uc2a4 \uc2e0\ub8b0\uc131\uc5d0 \uac00\uae5d\uc2b5\ub2c8\ub2e4. \uc2e4\uc81c \ub370\uc774\ud130\ub294 schema\ub85c \uc881\ud788\uace0, \uc624\ub958 \uc751\ub2f5\u00b7CPU\u00b7render \ud69f\uc218\ub97c \uad00\ucc30\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<h3>1. island payload\ub294 \u2018\ubcf4\uc774\ub294 \uac12\u2019\uc774 \uc544\ub2c8\ub77c API \uacc4\uc57d\uc73c\ub85c \ub2e4\ub8f9\ub2c8\ub2e4<\/h3>\n<p><strong>\ubcc0\uacbd:<\/strong> 4.5.2\uc640 3.21.11\uc740 \ubc11\uc904\uc774 \ub4e4\uc5b4\uac04 \ucef4\ud3ec\ub10c\ud2b8 \ud0a4\uc758 island payload \uc9c1\ub82c\ud654, object\uac00 \uc544\ub2cc island props \uac70\uc808, prerender \uc911 island render dedupe\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4. <strong>\uc2e4\uc81c \uc601\ud5a5:<\/strong> <code>components\/islands\/Product_card.vue<\/code>\ucc98\ub7fc \uc774\ub984\u00b7\ub370\uc774\ud130 \ud0a4\uc5d0 \uc5b8\ub354\uc2a4\ucf54\uc5b4\uac00 \uc788\ub294 \uc11c\ube44\uc2a4\ub294 SSR\uc5d0\uc11c\ub294 \ubcf4\uc774\ub294\ub370 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc774\ub3d9 \ud6c4 \uc0c1\ud0dc\uac00 \ub2ec\ub77c\uc9c0\ub294 \ubb38\uc81c\ub97c \uacaa\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ube44\uc815\uc0c1 props\uac00 \ub80c\ub354\ub7ec\uae4c\uc9c0 \ud750\ub974\uba74 \uc624\ub958\uc640 \ubd88\ud544\uc694\ud55c \ubd80\ud558\ub3c4 \ub298\uc5b4\ub0a9\ub2c8\ub2e4. <strong>\uc801\uc6a9 \uc870\uac74:<\/strong> island props\ub97c <code>defineProps<\/code>\uc640 zod \uac19\uc740 schema\ub85c \uc120\uc5b8\ud558\uace0, \uc694\uccad \uac12\uc5d0\uc11c \ud544\uc694\ud55c \ud544\ub4dc\ub9cc \ubcc0\ud658\ud574 \ub118\uae30\uc138\uc694. <code>v-bind=\"$attrs\"<\/code>\ub97c \uc678\ubd80 \uc785\ub825\uc5d0 \uadf8\ub300\ub85c \uc5f0\uacb0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. <strong>\uac80\uc99d:<\/strong> \uc5b8\ub354\uc2a4\ucf54\uc5b4 \ud0a4, \ube48 \uac1d\uccb4, \ubc30\uc5f4, \ubb38\uc790\uc5f4, \ud070 body\ub97c \uac00\uc9c4 staging \uc694\uccad\uc744 \ub9cc\ub4e4\uace0 4xx \ucc98\ub9ac\u00b7payload \uc77c\uad00\uc131\u00b7\ub80c\ub354 \ud69f\uc218\ub97c \ud655\uc778\ud569\ub2c8\ub2e4.<\/p>\n<h3>2. prerender\uc640 preview\ub294 \ubc30\ud3ec \uc804\ud6c4\ub97c \ub098\ub204\uc5b4 \uac80\uc99d\ud569\ub2c8\ub2e4<\/h3>\n<p><strong>\ubcc0\uacbd:<\/strong> \uc774\ubc88 \ud328\uce58\ub294 prerender \uc2dc island \uc911\ubcf5 render\ub97c \uc81c\uac70\ud558\uace0 prerender \ud398\uc774\uc9c0 hydration \ub4a4 preview mode\ub97c \ub2e4\uc2dc \ud655\uc778\ud569\ub2c8\ub2e4. <strong>\uc2e4\uc81c \uc601\ud5a5:<\/strong> \ucf58\ud150\uce20 \uc0ac\uc774\ud2b8\uc5d0\uc11c <code>nuxi generate<\/code>\uac00 \uac19\uc740 island\ub97c \uc5ec\ub7ec \ubc88 \ub80c\ub354\ud558\uba74 \ube4c\ub4dc \uc2dc\uac04\uacfc \uc678\ubd80 API \ud638\ucd9c\uc774 \ubd88\ud544\uc694\ud558\uac8c \ucee4\uc9d1\ub2c8\ub2e4. preview cookie\ub97c \uc4f0\ub294 \ud3b8\uc9d1 \ud750\ub984\uc5d0\uc11c\ub294 \uc815\uc801\uc73c\ub85c \ub9cc\ub4e0 \ud398\uc774\uc9c0\uac00 hydration \ub4a4\uc5d0\ub3c4 \uc62c\ubc14\ub978 \ucd08\uc548 \uc0c1\ud0dc\ub85c \ubc14\ub00c\ub294\uc9c0\uac00 \uc911\uc694\ud569\ub2c8\ub2e4. <strong>\uc801\uc6a9 \uc870\uac74:<\/strong> <code>nitro.prerender<\/code> \uacbd\ub85c\uc640 preview \uc9c4\uc785 URL\uc744 \ubb38\uc11c\ud654\ud558\uace0, \ube4c\ub4dc\uc5d0\uc11c \uc678\ubd80 CMS \ud638\ucd9c\uc5d0\ub294 \uc81c\ud55c\uacfc \uce90\uc2dc\ub97c \ub461\ub2c8\ub2e4. preview \ub370\uc774\ud130\ub294 public route cache\uc5d0 \ub123\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. <strong>\uac80\uc99d:<\/strong> production build\uc640 preview \ubc30\ud3ec\uc5d0\uc11c \uac19\uc740 \ud398\uc774\uc9c0\ub97c \ube44\ub85c\uadf8\uc778\/\ud3b8\uc9d1\uc790 \uacc4\uc815\uc73c\ub85c \uc5f4\uace0, HTML\u00b7payload\u00b7\ucfe0\ud0a4 \ubcc0\ud654\uc640 API \ud638\ucd9c \ud69f\uc218\ub97c \ube44\uad50\ud558\uc138\uc694.<\/p>\n<h3>3. routeRules\ub294 decoded URL\uacfc server\/api\ub97c \ud568\uaed8 \uc2dc\ud5d8\ud569\ub2c8\ub2e4<\/h3>\n<p><strong>\ubcc0\uacbd:<\/strong> \ub9b4\ub9ac\uc2a4\uc5d0\ub294 route rules\ub97c decoded path \uae30\uc900\uc73c\ub85c \ub9e4\uce6d\ud558\ub294 \uc218\uc815\uc774 \ub4e4\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. <strong>\uc2e4\uc81c \uc601\ud5a5:<\/strong> \ud55c\uae00 \uc2ac\ub7ec\uadf8, \uacf5\ubc31, \ud37c\uc13c\ud2b8 \uc778\ucf54\ub529, redirect\uac00 \uc788\ub294 URL\uc740 \ube0c\ub77c\uc6b0\uc800 \uc8fc\uc18c\uc640 \uc11c\ubc84 \ub0b4\ubd80 \ubb38\uc790\uc5f4\uc774 \ub2e4\ub97c \uc218 \uc788\uc2b5\ub2c8\ub2e4. <code>routeRules: { '\/admin\/**': { appMiddleware: 'auth' } }<\/code>\ub9cc \ubbff\uc73c\uba74 URL \ubcc0\ud615\uc774\ub098 API \uc9c1\uc811 \ud638\ucd9c\uc5d0\uc11c \uc758\ub3c4\uc640 \ub2e4\ub978 \uacb0\uacfc\ub97c \ub193\uce60 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <strong>\uc801\uc6a9 \uc870\uac74:<\/strong> \uad8c\ud55c \ud310\uc815\uc740 <code>server\/api\/admin\/*.ts<\/code>\uc5d0\uc11c session\uacfc \uc5ed\ud560\uc744 \ub2e4\uc2dc \uac80\uc99d\ud558\uace0, routeRules\ub294 cache\u00b7headers\u00b7\ud654\uba74 \uc9c4\uc785 \uc815\ucc45\uc73c\ub85c \ubcf4\uc870\ud569\ub2c8\ub2e4. <strong>\uac80\uc99d:<\/strong> \ubcf4\ud638 URL\uc744 \uc6d0\ubb38\u00b7encode\ub41c \uacbd\ub85c\u00b7\ud63c\ud569 \ub300\uc18c\ubb38\uc790\u00b7trailing slash\ub85c \uc694\uccad\ud558\uace0, \ud398\uc774\uc9c0\uc640 API \ubaa8\ub450 \uae30\ub300\ud55c 401\/403 \ub610\ub294 redirect\uac00 \ub418\ub294\uc9c0 Playwright\uc640 HTTP smoke test\uc5d0 \ub123\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>4. \ube4c\ub4dc \uac1c\uc120\uc740 CI \uce90\uc2dc\ub97c \uac80\uc99d\ud55c \ub4a4 \ubc1b\uc544\ub4e4\uc785\ub2c8\ub2e4<\/h3>\n<p><strong>\ubcc0\uacbd:<\/strong> v4.5.2\ub294 \ubcc0\uacbd\ub418\uc9c0 \uc54a\uc740 \uc0dd\uc131 \ud30c\uc77c \uc7ac\uc791\uc131 \uc0dd\ub7b5, lazy import, app\/component scan \uc7ac\uc0ac\uc6a9\uc744 \uc131\ub2a5 \uac1c\uc120\uc73c\ub85c \ub0c8\uc2b5\ub2c8\ub2e4. <strong>\uc2e4\uc81c \uc601\ud5a5:<\/strong> \ubaa8\ub178\ub808\ud3ec\ub098 layer\uac00 \ub9ce\uc740 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \uac1c\ubc1c \uc11c\ubc84 \uc7ac\uc2dc\uc791\uacfc CI build\uac00 \ube68\ub77c\uc9c8 \uc5ec\uc9c0\uac00 \uc788\uc9c0\ub9cc, stale cache\uac00 \ud0c0\uc785\u00b7route \uc0dd\uc131\ubb3c \ubb38\uc81c\ub97c \uc228\uae38 \uac00\ub2a5\uc131\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. <strong>\uc801\uc6a9 \uc870\uac74:<\/strong> lockfile\uacfc <code>.nuxt<\/code>, Vite\/Nitro \uce90\uc2dc\uc758 \ud0a4\uc5d0 Nuxt \ubc84\uc804\u00b7Node \ubc84\uc804\u00b7workspace \uc758\uc874\uc131\uc744 \ub123\uace0, \uce90\uc2dc \ubbf8\uc2a4\uc778 clean build\ub3c4 \uc815\uae30\uc801\uc73c\ub85c \ub3cc\ub9bd\ub2c8\ub2e4. <strong>\uac80\uc99d:<\/strong> \uce90\uc2dc warm\/cold \uac01\uac01\uc5d0\uc11c <code>nuxi typecheck<\/code>, <code>nuxi build<\/code>, e2e smoke\ub97c \uc2e4\ud589\ud574 \uc2dc\uac04\ubfd0 \uc544\ub2c8\ub77c route manifest\uc640 \uc0b0\ucd9c\ubb3c \ud574\uc2dc\uac00 \uae30\ub300\ub300\ub85c\uc778\uc9c0 \ube44\uad50\ud558\uc138\uc694.<\/p>\n<h2>\uac1c\ubc1c\uc790 \uc2e4\ud589 \uacc4\ud68d<\/h2>\n<ol>\n<li><strong>P0:<\/strong> \ubc30\ud3ec image\uc640 lockfile\uc758 \uc2e4\uc81c <code>nuxt<\/code> \ubc84\uc804\uc744 \ud655\uc778\ud574 4.5.2 \ub610\ub294 3.21.11 \uae30\uc900\uc73c\ub85c \uc62c\ub9bd\ub2c8\ub2e4.<\/li>\n<li><strong>P0:<\/strong> 4.5.1\/3.21.10 \ubbf8\ub9cc\uc774\uc5c8\ub358 \uc11c\ube44\uc2a4\ub294 \ubcf4\uc548 \ud328\uce58 \ud6c4 CDN\u00b7edge cache\ub97c purge\ud569\ub2c8\ub2e4.<\/li>\n<li><strong>P1:<\/strong> <code>npx nuxt upgrade --dedupe<\/code> \ub4a4 clean install, <code>nuxi typecheck<\/code>, unit test, production build\ub97c CI\uc5d0\uc11c \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/li>\n<li><strong>P1:<\/strong> <code>components\/islands\/<\/code>\uc758 dynamic props, <code>$attrs<\/code>, \uc5b8\ub354\uc2a4\ucf54\uc5b4 \ud0a4\ub97c \uac80\uc0c9\ud558\uace0 \uc785\ub825 schema\uc640 \uc74c\uc131 \ud14c\uc2a4\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.<\/li>\n<li><strong>P1:<\/strong> prerender\u00b7preview route\ubcc4\ub85c \ube4c\ub4dc API \ud638\ucd9c \uc218, hydration \uc624\ub958, payload \uc0c1\ud0dc\ub97c \uad00\ucc30\ud569\ub2c8\ub2e4.<\/li>\n<li><strong>P2:<\/strong> URL encoding\u00b7case\u00b7trailing slash \ubcc0\ud615\uacfc <code>server\/api<\/code> \uc9c1\uc811 \ud638\ucd9c\uc744 \uad8c\ud55c e2e\uc5d0 \ub123\uc2b5\ub2c8\ub2e4.<\/li>\n<li><strong>P2:<\/strong> Nuxt 3 \uc11c\ube44\uc2a4\ub9c8\ub2e4 v4 migration \ub2f4\ub2f9\uc790, module \ud638\ud658\uc131 \ubaa9\ub85d, \ub864\ubc31 image, \ubaa9\ud45c \ub0a0\uc9dc\ub97c \uc774\uc288\ub85c \uad00\ub9ac\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n<h2>\ub9ac\uc2a4\ud06c\uc640 \ud55c\uacc4<\/h2>\n<p>4.5.2\ub294 patch release\uc9c0\ub9cc Vite wrapper, generated files, island navigation\ucc98\ub7fc \ube4c\ub4dc\uc640 \ub7f0\ud0c0\uc784 \uc591\ucabd\uc5d0 \ub2ff\uc2b5\ub2c8\ub2e4. custom Vite plugin, Nuxt module, workspace layer\uac00 \uc788\ub294 \ud504\ub85c\uc81d\ud2b8\ub294 typecheck \ud1b5\uacfc\ub9cc\uc73c\ub85c \ucda9\ubd84\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. hydration mismatch, preview cookie \ubb38\uc81c, route behavior \ubcc0\ud654\uac00 \ub098\uc624\uba74 \uc774\uc804 \uac80\uc99d image\ub85c \ub864\ubc31\ud558\uace0, \uce90\uc2dc\ub97c purge\ud55c \ub4a4 \ucd5c\uc18c \uc7ac\ud604 \uc800\uc7a5\uc18c\uc5d0\uc11c Nuxt \ubc84\uc804 \ubcc0\uacbd\ub9cc \ubd84\ub9ac\ud574 \uc870\uc0ac\ud558\uc138\uc694. Nuxt 3.21.11\uc740 EOL \uc774\ud6c4\uc758 \ud328\uce58\uc774\uba70 \ud5a5\ud6c4 \uae30\ub2a5\u00b7\ubcf4\uc548 \uc720\uc9c0\ubcf4\uc218\ub97c \ubcf4\uc7a5\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc7a5\uae30 \uc6b4\uc601 \uc11c\ube44\uc2a4\ub294 migration\uc744 \ubbf8\ub8e8\ub294 \uadfc\uac70\ub85c \uc0bc\uc9c0 \ub9c8\uc138\uc694.<\/p>\n<h2>FAQ<\/h2>\n<h3>Nuxt 4.5.1\uc5d0\uc11c 4.5.2\ub85c \ubc14\ub85c \uc62c\ub824\uc57c \ud558\ub098\uc694?<\/h3>\n<p>server islands, prerender, preview mode, routeRules\ub97c \uc4f0\ub294 \uc11c\ube44\uc2a4\ub77c\uba74 \ud14c\uc2a4\ud2b8 \ud658\uacbd\uc5d0\uc11c \uc62c\ub824 \ud655\uc778\ud558\ub294 \ud3b8\uc774 \uc88b\uc2b5\ub2c8\ub2e4. 4.5.1\uc758 \ubcf4\uc548 \uc218\uc815\uc740 \uc720\uc9c0\ud558\ub418, 4.5.2\uc758 island\u00b7\uacbd\ub85c\u00b7\ube4c\ub4dc \uad00\ub828 \uc218\uc815\uae4c\uc9c0 \uc2e4\uc81c \ud750\ub984\uc73c\ub85c \uac80\uc99d\ud558\uc138\uc694.<\/p>\n<h3>Nuxt 3.21.11\uc744 \uc62c\ub9ac\uba74 Nuxt 3 \uc9c0\uc6d0\uc774 \uc5f0\uc7a5\ub418\ub098\uc694?<\/h3>\n<p>\uc544\ub2d9\ub2c8\ub2e4. \uacf5\uc2dd \ub9b4\ub9ac\uc2a4\ub294 Nuxt 3\uc774 EOL\uc774\ub77c\uace0 \uba85\uc2dc\ud569\ub2c8\ub2e4. \uc774 \ubc84\uc804\uc740 \ud604\uc7ac \uc11c\ube44\uc2a4\uc758 \uc548\uc815\ud654\uc640 v4 \uc774\ub3d9 \uc900\ube44\uc5d0 \ud65c\uc6a9\ud558\ub418, \uc7a5\uae30 \uacc4\ud68d\uc740 \ubcc4\ub3c4\ub85c \uc138\uc6cc\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<h3>routeRules\ub85c \uc778\uc99d\ud588\ub294\ub370 server\/api\uc5d0\uc11c\ub3c4 \uac80\uc0ac\ud574\uc57c \ud558\ub098\uc694?<\/h3>\n<p>\ub124. routeRules\ub294 \uc720\uc6a9\ud558\uc9c0\ub9cc URL \ud574\uc11d\uacfc \ud074\ub77c\uc774\uc5b8\ud2b8 \uacbd\ub85c\uc5d0 \uc601\ud5a5\uc744 \ubc1b\uc2b5\ub2c8\ub2e4. \ubbfc\uac10\ud55c \ub370\uc774\ud130\u00b7\ubcc0\uacbd \uc791\uc5c5\uc740 <code>server\/api<\/code>\uc5d0\uc11c \uc138\uc158\uacfc \uc5ed\ud560\uc744 \ub2e4\uc2dc \ud655\uc778\ud574\uc57c \uc9c1\uc811 \uc694\uccad\uc5d0\ub3c4 \uc548\uc804\ud569\ub2c8\ub2e4.<\/p>\n<h2>\ucd9c\ucc98 \ubc0f \ucd94\uac00 \uc77d\uae30<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/nuxt\/nuxt\/releases\/tag\/v4.5.2\" target=\"_blank\" rel=\"noopener\">nuxt\/nuxt \u2014 v4.5.2 release (2026-08-05)<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/nuxt\/nuxt\/releases\/tag\/v3.21.11\" target=\"_blank\" rel=\"noopener\">nuxt\/nuxt \u2014 v3.21.11 release (2026-08-05)<\/a><\/li>\n<li><a href=\"https:\/\/nuxt.com\/blog\/v4-5-security\" target=\"_blank\" rel=\"noopener\">Nuxt \u2014 Security Patch Releases<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/nuxt\/nuxt\/releases\/tag\/v4.5.1\" target=\"_blank\" rel=\"noopener\">nuxt\/nuxt \u2014 v4.5.1 security release<\/a><\/li>\n<li><a href=\"https:\/\/nuxt.com\/blog\/v4-5\" target=\"_blank\" rel=\"noopener\">Nuxt \u2014 Nuxt 4.5 release notes<\/a><\/li>\n<li><a href=\"https:\/\/nuxt.com\/docs\/getting-started\/upgrade\" target=\"_blank\" rel=\"noopener\">Nuxt Docs \u2014 Upgrade guide<\/a><\/li>\n<li><a href=\"https:\/\/nuxt.com\/docs\/guide\/directory-structure\/server\" target=\"_blank\" rel=\"noopener\">Nuxt Docs \u2014 Server directory and API routes<\/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>Nuxt 4.5.2\u00b73.21.11 \uacf5\uc2dd \ud328\uce58\uc5d0\uc11c server islands, prerender, routeRules, CI \uce90\uc2dc\ub97c \uc2e4\uc81c \ubc30\ud3ec \ud750\ub984\uc73c\ub85c \uc810\uac80\ud569\ub2c8\ub2e4.<\/p>\n","protected":false},"author":1,"featured_media":557,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-558","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\/558","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=558"}],"version-history":[{"count":0,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/posts\/558\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/media\/557"}],"wp:attachment":[{"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/media?parent=558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/categories?post=558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/tags?post=558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}