{"id":575,"date":"2026-10-07T12:54:59","date_gmt":"2026-10-07T12:54:59","guid":{"rendered":"https:\/\/gilnas.synology.me\/wordpress\/575\/"},"modified":"2026-10-07T12:54:59","modified_gmt":"2026-10-07T12:54:59","slug":"nuxt-4-6-nuxt-server-%ec%a0%84%ed%99%98-%ea%b0%80%ec%9d%b4%eb%93%9c-a-practical-nuxt-server-upgrade-guide","status":"publish","type":"post","link":"https:\/\/gilnas.synology.me\/wordpress\/575\/","title":{"rendered":"Nuxt 4.6 nuxt\/server \uc804\ud658 \uac00\uc774\ub4dc | A Practical nuxt\/server Upgrade Guide"},"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-07.jpg\" alt=\"Nuxt 4.6 nuxt\/server \uc804\ud658 \uac00\uc774\ub4dc | A Practical nuxt\/server Upgrade Guide\" \/><\/figure>\n<p><strong>\ud575\uc2ec \ub2f5\ubcc0:<\/strong> Nuxt 4.6\uc774 2026\ub144 10\uc6d4 5\uc77c \uacf5\uac1c\ub410\uc2b5\ub2c8\ub2e4. \uc774\ubc88 \ubc84\uc804\uc758 \uc911\uc2ec\uc740 \uc0c8 \uae30\ub2a5\uc744 \ub9ce\uc774 \ucd94\uac00\ud55c \uac83\ubcf4\ub2e4 \uc11c\ubc84 \ucf54\ub4dc\ub97c <code>h3<\/code>\uc640 <code>Nitro<\/code>\uc758 \uad6c\uccb4 \ubc84\uc804\uc5d0\uc11c \ud55c \ub2e8\uacc4 \ub5bc\uc5b4 \ub0b8 <code>nuxt\/server<\/code>\uc785\ub2c8\ub2e4. \uc9c0\uae08 Nuxt 4 \uc571\uc744 \uc6b4\uc601\ud55c\ub2e4\uba74 \ubaa8\ub4e0 <code>server\/api<\/code> \ud30c\uc77c\uc744 \uae09\ud788 \ubc14\uafc0 \ud544\uc694\ub294 \uc5c6\uc2b5\ub2c8\ub2e4. \ub300\uc2e0 \uc0c8 API\uc640 \uc218\uc815\uc774 \uc7a6\uc740 \uc11c\ubc84 \ubaa8\ub4c8\ubd80\ud130 \uc774 \uacbd\uacc4\ub85c \uc62e\uae30\uba74 Nuxt 5\u00b7Nitro 3\u00b7H3 v2 \uc804\ud658 \ub54c\uc758 \ucda9\uaca9\uc744 \uc904\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc2e4\ubb34\uc5d0\uc11c \ub354 \ubc18\uac00\uc6b4 \ubcc0\ud654\ub294 \ud0c0\uc785\uacfc \uad00\ucc30 \uac00\ub2a5\uc131\uc785\ub2c8\ub2e4. \uc11c\ubc84 \ub77c\uc6b0\ud2b8\uac00 \uc218\ubc31 \uac1c\ub85c \ub298\uba74\uc11c <code>$fetch<\/code> \ud0c0\uc785 \uac80\uc0ac\uc5d0 \uc2dc\uac04\uc774 \uac78\ub9ac\uac70\ub098 <code>TS2589<\/code> \uc624\ub958\uac00 \ub09c \ud504\ub85c\uc81d\ud2b8, SSR \uc624\ub958\uac00 CI \ub85c\uadf8\uc5d0\uc11c\ub9cc \ubcf4\uc774\ub358 \ud504\ub85c\uc81d\ud2b8\ub77c\uba74 4.6\uc758 \uc0c8 typed fetch\uc640 CLI v4\uac00 \uc9c1\uc811\uc801\uc778 \uc810\uac80 \ub300\uc0c1\uc785\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774\ub294 minor \ub9b4\ub9ac\uc2a4\ub77c\uace0 \ubb34\uc2ec\ud788 \uc62c\ub9b4 \uc885\ub958\uc758 \ubcc0\ud654\ub294 \uc544\ub2d9\ub2c8\ub2e4. Node \ubc84\uc804, server handler\uc758 import \ucd9c\ucc98, \ube44\ubc00\uac12, CI\uc758 clean build\ub97c \ud55c \ubc88\uc5d0 \ud655\uc778\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p><strong>\uc624\ub298\uc758 \uacb0\ub860:<\/strong> Nuxt 4.6\uc758 \uccab \uc801\uc6a9\uc740 <code>npx nuxt upgrade --dedupe<\/code>\uac00 \uc544\ub2c8\ub77c \ud604\uc7ac \uc11c\ubc84 \uacbd\uacc4\ub97c \ub208\uc73c\ub85c \ubcf4\ub294 \uc77c\uc785\ub2c8\ub2e4. <code>server\/api<\/code>\uc5d0\uc11c <code>h3<\/code>\/<code>nitropack<\/code>\uc744 \uc9c1\uc811 \uac00\uc838\uc624\ub294 \ud30c\uc77c\uc744 \ubaa9\ub85d\ud654\ud558\uace0, \uc791\uc740 read-only API \ud558\ub098\ub97c <code>nuxt\/server<\/code>\ub85c \uc62e\uae34 \ub4a4 typecheck\u00b7SSR\u00b7\ubc30\ud3ec smoke test\ub97c \ud1b5\uacfc\uc2dc\ud0a4\uc138\uc694. Nuxt 3\uc740 \uc774\ubbf8 2026\ub144 7\uc6d4 31\uc77c EOL\uc774\ubbc0\ub85c \uc774\ubc88 \ub9b4\ub9ac\uc2a4\uc5d0 3.x \ub3d9\ubc18 \ubc84\uc804\uc740 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\ubb34\uc2a8 \uc77c\uc774 \uc788\uc5c8\ub098<\/h2>\n<p><strong>2026\ub144 10\uc6d4 5\uc77c, Nuxt core team:<\/strong> \uacf5\uc2dd <a href=\"https:\/\/nuxt.com\/blog\/v4-6\" target=\"_blank\" rel=\"noopener\">Nuxt 4.6 \ubc1c\ud45c<\/a>\uc640 <a href=\"https:\/\/github.com\/nuxt\/nuxt\/releases\/tag\/v4.6.0\" target=\"_blank\" rel=\"noopener\">v4.6.0 \ub9b4\ub9ac\uc2a4 \ub178\ud2b8<\/a>\uac00 \uacf5\uac1c\ub410\uc2b5\ub2c8\ub2e4. 4.5.2 \uc774\ud6c4 362\uac1c \uc774\uc0c1 \ucee4\ubc0b\uc774 \ud3ec\ud568\ub410\uace0, Nuxt\uac00 \uc790\uccb4 request event\u00b7route rules\u00b7typed <code>$fetch<\/code> \ud0c0\uc785\uc744 \uc815\uc758\ud558\uba70 <code>nuxt\/server<\/code> import surface\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uae30\ubcf8 \uc11c\ubc84\ub294 \uc5ec\uc804\ud788 Nitro\uc774\uba70, \uc21c\uc218 Vite \uc11c\ubc84 \ube4c\ub4dc\ub294 <code>@nuxt\/vite-server<\/code>\ub77c\ub294 \uc2e4\ud5d8\uc801 \uc120\ud0dd\uc9c0\uc785\ub2c8\ub2e4. \uacf5\uc2dd \ud300\ub3c4 \ub300\ubd80\ubd84\uc758 \uc571\uc5d0\ub294 Nitro\uac00 \uc801\ud569\ud558\ub2e4\uace0 \ubc1d\ud799\ub2c8\ub2e4.<\/p>\n<p><strong>\uac19\uc740 \ub0a0, Nuxt CLI v4:<\/strong> <a href=\"https:\/\/github.com\/nuxt\/cli\/releases\/tag\/v4.0.0\" target=\"_blank\" rel=\"noopener\">CLI v4 \ub9b4\ub9ac\uc2a4<\/a>\ub294 dev \uc11c\ubc84\uc758 \ud130\ubbf8\ub110 UI, \uc694\uccad ID\uac00 \ubd99\uc740 \ub85c\uadf8\uc640 \uc624\ub958, <code>nuxt docs<\/code>, \uc2e4\ud589 \uc911 \uc11c\ubc84\uc640 \ud1b5\uc2e0\ud558\ub294 <code>nuxt curl<\/code>\/<code>nuxt task<\/code>, dev \uc11c\ubc84 lock file\uc744 \uc18c\uac1c\ud588\uc2b5\ub2c8\ub2e4. CI\ub098 non-TTY\uc5d0\uc11c\ub294 \uc77c\ubc18 \ub85c\uadf8\ub85c \ub0b4\ub824\uac00\uba70 <code>--no-tui<\/code>\ub85c \uae30\uc874 \ucd9c\ub825\uc744 \uace0\ub97c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><strong>\ud638\ud658\uc131 \uae30\uc900:<\/strong> \uacf5\uc2dd \ubc1c\ud45c\uc758 \uc5c5\uadf8\ub808\uc774\ub4dc \uc139\uc158\uc740 Node.js <code>^22.22.3 || ^24.15.0 || &gt;=26.0.0<\/code>\uc744 \uc694\uad6c\ud569\ub2c8\ub2e4. <a href=\"https:\/\/nuxt.com\/docs\/4.x\/getting-started\/upgrade\" target=\"_blank\" rel=\"noopener\">\uc5c5\uadf8\ub808\uc774\ub4dc \uac00\uc774\ub4dc<\/a>\ub294 Nuxt 5\uac00 \uc544\uc9c1 \uac1c\ubc1c \uc911\uc774\uace0 <code>future.compatibilityVersion: 5<\/code>\ub85c \uc77c\ubd80 \uae30\ubcf8\uac12\uc744 \ubbf8\ub9ac \uc2dc\ud5d8\ud560 \uc218 \uc788\ub2e4\uace0 \uc124\uba85\ud569\ub2c8\ub2e4. \uc774\ub294 \uc6b4\uc601 \uc804\ud658 \uc2a4\uc704\uce58\uac00 \uc544\ub2c8\ub77c \ud638\ud658\uc131 \ud14c\uc2a4\ud2b8\uc6a9 \ubd84\ub9ac \ube0c\ub79c\uce58\uc5d0\uc11c \ub2e4\ub8f0 \uc635\uc158\uc785\ub2c8\ub2e4.<\/p>\n<h2>\uc65c \uc911\uc694\ud55c\uac00<\/h2>\n<p>Nuxt \uc11c\ubc84 \ucf54\ub4dc\ub294 \uadf8\ub3d9\uc548 \ud3b8\ub9ac\ud558\uac8c <code>h3<\/code>\uc640 Nitro \uae30\ub2a5\uc744 \uc9c1\uc811 \uc4f8 \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ubb38\uc81c\ub294 \ud504\ub808\uc784\uc6cc\ud06c\u00b7\uc11c\ubc84 \uc5d4\uc9c4\u00b7\ub77c\uc6b0\ud130\uac00 \uac01\uac01 major \ubc84\uc804\uc744 \uc62c\ub9b4 \ub54c\uc785\ub2c8\ub2e4. \ud55c \ubaa8\ub4c8\uc758 peer dependency\uac00 \ub2e4\ub978 \uc571\uc758 H3 \ud0c0\uc785\uacfc \ubd80\ub52a\ud788\uac70\ub098, handler\uac00 \ud2b9\uc815 event \ubaa8\uc591\uc744 \uc804\uc81c\ud574 \uc5c5\uadf8\ub808\uc774\ub4dc\ub97c \ub9c9\uc2b5\ub2c8\ub2e4. 4.6\uc758 <code>nuxt\/server<\/code>\uc740 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uac10\ucd94\ub294 \ucd94\uc0c1\ud654\uac00 \uc544\ub2c8\ub77c, \uc77c\ubc18\uc801\uc778 handler\uac00 \uae30\ub300\ub3c4 \ub418\ub294 \uc548\uc815\uc801\uc778 Nuxt \uacbd\uacc4\ub97c \ub9cc\ub4e0 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ubcc0\ud654\ub294 \ubcf4\uc548\uacfc \uc6b4\uc601\uc5d0\ub3c4 \ub2ff\uc2b5\ub2c8\ub2e4. request\u00b7response\ub97c web standard \uc911\uc2ec\uc73c\ub85c \uc77d\uace0, body validation\uacfc session\uc744 \uba85\uc2dc\uc801\uc73c\ub85c \uc4f0\uba74 handler\uc758 \uc785\ub825\u00b7\ucd9c\ub825 \uacc4\uc57d\uc774 PR\uc5d0\uc11c \ub354 \uc798 \ubcf4\uc785\ub2c8\ub2e4. \ubc18\ub300\ub85c \uc790\ub3d9 import\uc758 H3 helper\uc640 \uba85\uc2dc\uc801\uc73c\ub85c \uac00\uc838\uc628 <code>nuxt\/server<\/code> helper\ub97c \uc11e\uc73c\uba74 event \ud615\ud0dc\uac00 \ub2ec\ub77c \uc624\ub958\uac00 \ub0a9\ub2c8\ub2e4. \ud3b8\uc758\uc0c1 \uc77c\uad04 \uce58\ud658\ud558\uae30\ubcf4\ub2e4 \ud30c\uc77c \ub2e8\uc704\ub85c \ud14c\uc2a4\ud2b8\ud574\uc57c \ud558\ub294 \uc774\uc720\uc785\ub2c8\ub2e4.<\/p>\n<h3>1. <code>nuxt\/server<\/code>\uc740 \ub2e4\uc74c major\ub97c \uc704\ud55c \uc11c\ubc84 \uacbd\uacc4\uc785\ub2c8\ub2e4<\/h3>\n<p><strong>\ubcc0\ud654:<\/strong> <code>defineEventHandler<\/code>, query\u00b7body\u00b7cookie\u00b7redirect\u00b7session \ub4f1 \uc790\uc8fc \uc4f0\ub294 \ub3c4\uad6c\ub97c <code>nuxt\/server<\/code>\uc5d0\uc11c \uc81c\uacf5\ud558\uba70, portable <code>RequestEvent<\/code> \ud0c0\uc785\uc744 \uc501\ub2c8\ub2e4. <strong>\uc2e4\uc81c \uc601\ud5a5:<\/strong> \uc0c8 handler\uac00 Nitro 2, Nitro 3, \uc2e4\ud5d8\uc801 Vite server \uc0ac\uc774\uc5d0\uc11c \uac19\uc740 \ucf54\ub4dc\ub97c \uc4f8 \uc5ec\uc9c0\uac00 \uc0dd\uae41\ub2c8\ub2e4. <strong>\uc801\uc6a9 \uc870\uac74:<\/strong> \uc0c8 API\ub098 \uacf5\uc6a9 \ubaa8\ub4c8\ubd80\ud130 \uba85\uc2dc import\ub85c \uc2dc\uc791\ud558\uc138\uc694. \uc608\ub97c \ub4e4\uc5b4 <code>server\/api\/profile.get.ts<\/code>\uc5d0\uc11c \ub2e4\uc74c\ucc98\ub7fc \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre><code>import { defineEventHandler, getQuery } from 'nuxt\/server'\nexport default defineEventHandler((event) =&gt; {\n  const { locale = 'ko' } = getQuery&lt;{ locale?: string }&gt;(event)\n  return { locale }\n})<\/code><\/pre>\n<p>\ud30c\uc77c \uc5c5\ub85c\ub4dc\ucc98\ub7fc \uc0c8 surface\uc5d0 \uc5c6\ub294 \uae30\ub2a5\uc740 \ud604\uc7ac\ucc98\ub7fc <code>h3<\/code>\ub97c \uc4f8 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <strong>\uac80\uc99d:<\/strong> \uac19\uc740 API\uc5d0 unit test\uc640 \uc2e4\uc81c SSR \uc694\uccad\uc744 \ubd99\uc774\uace0, auto-import\uc640 \uc0c8 import\ub97c \uc758\ub3c4\uce58 \uc54a\uac8c \uc11e\uc5c8\uc744 \ub54c \ub098\uc624\ub294 <code>NUXT_E8012<\/code> \uc624\ub958\uac00 \uc5c6\ub294\uc9c0 typecheck\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694.<\/p>\n<h3>2. \uc138\uc158\uc740 \ube44\ubc00\uac12 \ud558\ub098\ub97c \ub354 \uc5c4\uaca9\ud788 \ub2e4\ub8e8\uac8c \ud569\ub2c8\ub2e4<\/h3>\n<p><strong>\ubcc0\ud654:<\/strong> 4.6\uc740 <code>runtimeConfig.appSecret<\/code>\uacfc <code>NUXT_APP_SECRET<\/code>, \uadf8\ub9ac\uace0 cookie\uc5d0 sealed session\uc744 \uc800\uc7a5\ud558\ub294 <code>useSession<\/code> helper\ub97c \ucd94\uac00\ud588\uc2b5\ub2c8\ub2e4. \ubaa8\ub4c8\uacfc \uc11c\ubc84 \uae30\ub2a5\uc740 <code>deriveSecret(purpose)<\/code>\ub85c \ubaa9\uc801\ubcc4 \uac12\uc744 \ud30c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <strong>\uc2e4\uc81c \uc601\ud5a5:<\/strong> \ubcc4\ub3c4 \uc11c\ubc84 \uc800\uc7a5\uc18c \uc5c6\uc774 \uc791\uc740 \uc138\uc158 \uae30\ub2a5\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc9c0\ub9cc, app secret\uc774 \ubc14\ub00c\uba74 \uae30\uc874 \uc138\uc158\uc740 \uc77d\uc9c0 \ubabb\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uac1c\ubc1c\uc5d0\uc11c\ub294 \uac12\uc774 \uc0dd\uc131\u00b7\uc720\uc9c0\ub420 \uc218 \uc788\uc5b4\ub3c4 build\ub294 \uc0dd\uc131\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. <strong>\uc801\uc6a9 \uc870\uac74:<\/strong> \uc6b4\uc601 \uc2dc\ud06c\ub9bf\uc740 CI\/CD secret store\uc5d0\uc11c \uc8fc\uc785\ud558\uace0, \uc2a4\ud14c\uc774\uc9d5\u00b7\uc6b4\uc601 \uac12\uc744 \ubd84\ub9ac\ud558\uc138\uc694. <code>nuxt.config.ts<\/code>, \ub85c\uadf8, PR \uc124\uba85\uc5d0 \uac12\uc744 \uc4f0\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. <strong>\uac80\uc99d:<\/strong> \ubc30\ud3ec \uc804 \uc0c8 \uac12\uc744 \uac00\uc9c4 preview \ud658\uacbd\uc5d0\uc11c \ub85c\uadf8\uc778\u00b7\ub85c\uadf8\uc544\uc6c3\u00b7\ub9cc\ub8cc\u00b7\ud0a4 \ud68c\uc804 \ub4a4\uc758 \uc2e4\ud328 \ub3d9\uc791\uc744 \uc2dc\ud5d8\ud558\uace0, cookie\uc758 Secure\u00b7HttpOnly\u00b7SameSite \uc124\uc815\uc744 \ube0c\ub77c\uc6b0\uc800\uc640 curl\ub85c \ud655\uc778\ud569\ub2c8\ub2e4.<\/p>\n<h3>3. typed <code>$fetch<\/code>\ub294 \ud070 API \ud2b8\ub9ac\uc758 CI \uc2dc\uac04\uc744 \ubc14\uafc0 \uc218 \uc788\uc2b5\ub2c8\ub2e4<\/h3>\n<p><strong>\ubcc0\ud654:<\/strong> Nuxt\ub294 \uc11c\ubc84 route \ud0c0\uc785 \uc0dd\uc131\uc744 <code>fetchdts<\/code> \uae30\ubc18\uc73c\ub85c \ub2e4\uc2dc \ub9cc\ub4e4\uc5c8\uace0, 4.x\uc5d0\uc11c\ub294 <code>experimental.routeTypedFetch: true<\/code>\ub85c \uc120\ud0dd \uc801\uc6a9\ud569\ub2c8\ub2e4. \uacf5\uc2dd \uc218\uce58\ub294 1,000 routes\uc5d0\uc11c \uc774\uc804 \ubc29\uc2dd\uc774 TS2589\uc640 \ud568\uaed8 \uc57d 7.44\ucd08\u00b71,283\ub9cc \uc778\uc2a4\ud134\uc2dc\uc5d0\uc774\uc158\uc774\ub358 \uc608\uac00 \uc0c8 \ubc29\uc2dd\uc5d0\uc11c\ub294 \uc57d 0.20\ucd08\u00b75.1\ub9cc\uc73c\ub85c \uc904\uc5c8\ub2e4\uace0 \ubcf4\uc5ec \uc90d\ub2c8\ub2e4. \uc774\ub294 Nuxt \ud300 \ubca4\uce58\ub9c8\ud06c\uc774\uc9c0 \ubaa8\ub4e0 \uc800\uc7a5\uc18c\uc758 \ubcf4\uc7a5\uce58\ub294 \uc544\ub2d9\ub2c8\ub2e4. <strong>\uc2e4\uc81c \uc601\ud5a5:<\/strong> body\u00b7query \uac80\uc99d \uc815\ubcf4\uac00 \ud638\ucd9c\ubd80 \ud0c0\uc785\uc73c\ub85c \uc774\uc5b4\uc838 \uc798\ubabb\ub41c POST body\ub97c \ub354 \uc77c\ucc0d \uc7a1\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <strong>\uc801\uc6a9 \uc870\uac74:<\/strong> \ud070 \uc571\uc5d0\uc11c\ub9cc \ubcc4\ub3c4 \ube0c\ub79c\uce58\ub85c \ucf1c\uace0, \uc190\uc73c\ub85c \ub9cc\ub4e0 <code>ServerRoutes<\/code> augmentation\uacfc <code>Date<\/code> \uc9c1\ub82c\ud654 \uac00\uc815\uc744 \uc810\uac80\ud558\uc138\uc694. <strong>\uac80\uc99d:<\/strong> <code>nuxi typecheck<\/code> \uc2dc\uac04\uacfc \uc624\ub958 \uc218\ub97c \uc5c5\uadf8\ub808\uc774\ub4dc \uc804\ud6c4 \ube44\uad50\ud558\uace0, \ub300\ud45c <code>server\/api<\/code> \ud638\ucd9c\uc5d0 \uc798\ubabb\ub41c body\u00b7\uc5c6\ub294 route\uc758 \ucef4\ud30c\uc77c \uc2e4\ud328 \ud14c\uc2a4\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<h3>4. CLI v4\uc758 \uad00\ucc30 \uae30\ub2a5\uc740 \uac1c\ubc1c \ud3b8\uc758\uac00 \uc544\ub2c8\ub77c \uc7ac\ud604 \uc18d\ub3c4 \ubb38\uc81c\uc785\ub2c8\ub2e4<\/h3>\n<p><strong>\ubcc0\ud654:<\/strong> CLI v4\ub294 \uc694\uccad\ub9c8\ub2e4 ID\ub97c \ubd99\uc774\uace0, \uc2dc\uc791\uc774 \ub290\ub9b0 \uc774\uc720\u00b7\uc7ac\uc2dc\uc791 \uc6d0\uc778\u00b7\ubaa8\ub4c8 \uc124\uc815 \uc2dc\uac04\uc744 \ubcf4\uc5ec \uc8fc\uba70, source map\uc744 \uc801\uc6a9\ud55c SSR \uc624\ub958 \ud654\uba74\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. <strong>\uc2e4\uc81c \uc601\ud5a5:<\/strong> \u201c\ub85c\uceec\uc5d0\uc11c \ud55c \ubc88\ub9cc 500\uc774 \ub0ac\ub2e4\u201d\ub294 \ubc84\uadf8\ub97c middleware\u00b7data fetch\u00b7\ub80c\ub354\uc758 \ud55c \uc694\uccad \ud0c0\uc784\ub77c\uc778\uc73c\ub85c \uc881\ud788\uae30 \uc26c\uc6cc\uc9d1\ub2c8\ub2e4. \ud558\uc9c0\ub9cc dev \uc624\ub958 \ud654\uba74\uc5d0\ub294 \uc694\uccad \uc815\ubcf4\uac00 \uc788\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c \uc678\ubd80\uc5d0 \uc5f4\ub9b0 \uac1c\ubc1c \uc11c\ubc84\ub97c \uc6b4\uc601 \ub3c4\uad6c\ucc98\ub7fc \ucde8\uae09\ud558\uba74 \uc548 \ub429\ub2c8\ub2e4. OpenAI \uc5d0\uc774\uc804\ud2b8\ub098 \ub2e4\ub978 \uc790\ub3d9\ud654\uac00 \ub450 \ubc88\uc9f8 <code>nuxt dev<\/code>\ub97c \uc2e4\ud589\ud558\ub294 \ud658\uacbd\ub3c4 \uc0c8 lock file \ub3d9\uc791\uc744 \uc774\ud574\ud574\uc57c \ud569\ub2c8\ub2e4. <strong>\uc801\uc6a9 \uc870\uac74:<\/strong> CI \ub85c\uadf8 \ud30c\uc11c\ub294 TUI \ucd9c\ub825\uc5d0 \uc758\uc874\ud558\uc9c0 \uc54a\uac8c \ud558\uace0 CI\uc5d0\ub294 plain \ubaa8\ub4dc\ub97c \uc501\ub2c8\ub2e4. <strong>\uac80\uc99d:<\/strong> \uc758\ub3c4\uc801\uc778 SSR \uc608\uc678\uc640 <code>nuxt.config.ts<\/code> \uc624\ub958 fixture\ub97c \ub9cc\ub4e4\uc5b4 \ub85c\uceec \uac1c\ubc1c\u00b7CI\u00b7preview\uc5d0\uc11c \uc624\ub958 \ub0b4\uc6a9\uacfc \ube44\ubc00 \ub9c8\uc2a4\ud0b9\uc774 \uae30\ub300\ub300\ub85c\uc778\uc9c0 \ud655\uc778\ud558\uc138\uc694.<\/p>\n<h2>\uac1c\ubc1c\uc790 \uc2e4\ud589 \uacc4\ud68d<\/h2>\n<ol>\n<li><strong>P0:<\/strong> CI\uc640 \ubc30\ud3ec image\uc758 Node \ubc84\uc804\uc744 \ud655\uc778\ud574 4.6 \uc694\uad6c \ubc94\uc704\ub97c \ub9cc\uc871\uc2dc\ud0a4\uace0 lockfile\uc744 \ubcf4\uc874\ud569\ub2c8\ub2e4.<\/li>\n<li><strong>P0:<\/strong> <code>server\/api<\/code>, <code>server\/middleware<\/code>, Nuxt module\uc5d0\uc11c <code>h3<\/code>\/<code>nitropack<\/code> \uc9c1\uc811 import\ub97c \uac80\uc0c9\ud574 \ubaa9\ub85d\ud654\ud569\ub2c8\ub2e4.<\/li>\n<li><strong>P1:<\/strong> read-only API \ud55c \uac1c\ub9cc <code>nuxt\/server<\/code> \uba85\uc2dc import\ub85c \uc62e\uaca8 unit test\u00b7SSR smoke test\ub97c \ud1b5\uacfc\uc2dc\ud0b5\ub2c8\ub2e4.<\/li>\n<li><strong>P1:<\/strong> <code>NUXT_APP_SECRET<\/code>\uc758 \uc6b4\uc601 \uc8fc\uc785\u00b7\ud68c\uc804\u00b7\ub864\ubc31 \ucc45\uc784\uc790\ub97c \uc815\ud558\uace0 \uc800\uc7a5\uc18c\uc640 \ub85c\uadf8\uc5d0 \uac12\uc774 \uc5c6\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.<\/li>\n<li><strong>P1:<\/strong> \ud070 route \uc218\uac00 \uc788\ub294 \uc571\uc5d0\uc11c\ub9cc <code>routeTypedFetch<\/code>\ub97c \ubd84\ub9ac \ube0c\ub79c\uce58\ub85c \ucf1c\uace0 typecheck \uc2dc\uac04\uacfc \ud0c0\uc785 \uc624\ub958\ub97c \ube44\uad50\ud569\ub2c8\ub2e4.<\/li>\n<li><strong>P2:<\/strong> <code>npx nuxt upgrade --dedupe<\/code> \ud6c4 clean install, <code>nuxi typecheck<\/code>, build, SSR\u00b7\ub85c\uadf8\uc778\u00b7API e2e\ub97c CI \ud544\uc218 \ub2e8\uacc4\ub85c \ub461\ub2c8\ub2e4.<\/li>\n<li><strong>P2:<\/strong> <code>future.compatibilityVersion: 5<\/code>\uc740 production\uc774 \uc544\ub2cc nightly\/\ud638\ud658\uc131 \ube0c\ub79c\uce58\uc5d0\uc11c\ub9cc \uac80\uc99d\ud569\ub2c8\ub2e4.<\/li>\n<\/ol>\n<h2>\ub9ac\uc2a4\ud06c\uc640 \ud55c\uacc4<\/h2>\n<p>4.6\uc740 Nuxt 4 \uc0ac\uc6a9\uc790\uc5d0\uac8c \uac15\uc81c migration\uc744 \uc694\uad6c\ud558\uc9c0 \uc54a\uc9c0\ub9cc, Node \ubc94\uc704\uc640 CLI major\uac00 \ud568\uaed8 \ubc14\ub01d\ub2c8\ub2e4. CI runner\uac00 \uc774\uc804 Node\uc5d0 \uace0\uc815\ub3fc \uc788\uac70\ub098 module\uc774 \ub0b4\ubd80 H3 event\ub97c \uac00\uc815\ud558\uba74 build\uac00 \uba3c\uc800 \uc2e4\ud328\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc0c8 <code>nuxt\/server<\/code> helper\ub294 H3 v1 \uc774\ub984\uacfc \uc644\uc804\ud788 \uac19\uc740 \ub3d9\uc791\uc774 \uc544\ub2d9\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 redirect \ubc18\ud658\uacfc response header \uc124\uc815 \ubc29\uc2dd\uc774 \ub2e4\ub985\ub2c8\ub2e4. \ubb38\uc81c \ubc1c\uc0dd \uc2dc \uc774\uc804 \uac80\uc99d image\uc640 lockfile\ub85c \ub864\ubc31\ud558\uace0, \ubaa8\ub4e0 handler\ub97c \ub418\ub3cc\ub9ac\uae30\ubcf4\ub2e4 \ubcc0\uacbd \ud30c\uc77c\ub9cc \ubd84\ub9ac\ud574 \uc7ac\ud604\ud558\uc138\uc694. Nuxt 5\uc640 Vite server\ub294 \ubbf8\ub798 \ud638\ud658\uc131 \ubc29\ud5a5\uc774\uc9c0 \uc774\ubc88 \ub9b4\ub9ac\uc2a4\uc5d0\uc11c \uc6b4\uc601 \uae30\ubcf8\uac12\uc73c\ub85c \ud655\uc815\ub41c \uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4.<\/p>\n<h2>FAQ<\/h2>\n<h3>Nuxt 4.6\uc73c\ub85c \uc62c\ub9ac\uba74 \ubaa8\ub4e0 server\/api\ub97c nuxt\/server\ub85c \ubc14\uafd4\uc57c \ud558\ub098\uc694?<\/h3>\n<p>\uc544\ub2d9\ub2c8\ub2e4. \uae30\uc874 H3\u00b7Nitro import\ub294 \uacc4\uc18d \ub3d9\uc791\ud569\ub2c8\ub2e4. \uc0c8 \ucf54\ub4dc\uc640 \uacf5\uc6a9 \ubaa8\ub4c8\ubd80\ud130 \uc2dc\uc791\ud558\uace0, \ud30c\uc77c \uc5c5\ub85c\ub4dc\ucc98\ub7fc \ud544\uc694\ud55c H3 \uae30\ub2a5\uc740 \uadf8\ub300\ub85c \ub450\ub294 \ud3b8\uc774 \uc548\uc804\ud569\ub2c8\ub2e4.<\/p>\n<h3>Nuxt 4.6\uc758 appSecret\uc740 \uae30\uc874 JWT\ub098 \uc138\uc158 DB\ub97c \ub300\uccb4\ud558\ub098\uc694?<\/h3>\n<p>\uc791\uc740 sealed-cookie session\uc744 \ub9cc\ub4e4 \uc218 \uc788\ub294 \uae30\ubc18\uc744 \uc81c\uacf5\ud558\uc9c0\ub9cc \ubaa8\ub4e0 \uc778\uc99d \uad6c\uc870\uc758 \ub300\uccb4\ud488\uc740 \uc544\ub2d9\ub2c8\ub2e4. \uad8c\ud55c \ubaa8\ub378, \ub85c\uadf8\uc544\uc6c3 \ubb34\ud6a8\ud654, \ub2e4\uc911 \uae30\uae30 \uad00\ub9ac, \uac1c\uc778\uc815\ubcf4 \ubcf4\uad00 \uc694\uad6c\uc5d0 \ub9de\ub294\uc9c0 \ubcc4\ub3c4\ub85c \ud310\ub2e8\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<h3>routeTypedFetch\ub294 \ubc14\ub85c production\uc5d0 \ucf1c\ub3c4 \ub420\uae4c\uc694?<\/h3>\n<p>4.x\uc5d0\uc11c\ub294 \uc120\ud0dd \uae30\ub2a5\uc785\ub2c8\ub2e4. \ub300\ud615 route \ud2b8\ub9ac\uc5d0\uc11c \ud6a8\uacfc\uac00 \ud074 \uc218 \uc788\uc9c0\ub9cc type inference\uc640 \uc190\uc218 \ub9cc\ub4e0 \ud0c0\uc785 \ud655\uc7a5\uc774 \ub2ec\ub77c\uc9c8 \uc218 \uc788\uc73c\ub2c8 \ubcc4\ub3c4 \ube0c\ub79c\uce58\uc5d0\uc11c typecheck\uc640 \ub300\ud45c API \ud638\ucd9c\uc744 \uba3c\uc800 \uac80\uc99d\ud558\uc138\uc694.<\/p>\n<h2>\ucd9c\ucc98 \ubc0f \ucd94\uac00 \uc77d\uae30<\/h2>\n<ul>\n<li><a href=\"https:\/\/nuxt.com\/blog\/v4-6\" target=\"_blank\" rel=\"noopener\">Nuxt \u2014 Nuxt 4.6 (2026-10-05)<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/nuxt\/nuxt\/releases\/tag\/v4.6.0\" target=\"_blank\" rel=\"noopener\">nuxt\/nuxt \u2014 v4.6.0 release notes<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/nuxt\/cli\/releases\/tag\/v4.0.0\" target=\"_blank\" rel=\"noopener\">nuxt\/cli \u2014 v4.0.0 release notes<\/a><\/li>\n<li><a href=\"https:\/\/nuxt.com\/docs\/4.x\/getting-started\/upgrade\" target=\"_blank\" rel=\"noopener\">Nuxt Docs \u2014 Upgrade Guide<\/a><\/li>\n<li><a href=\"https:\/\/nuxt.com\/docs\/4.x\/guide\/going-further\/experimental-features\" target=\"_blank\" rel=\"noopener\">Nuxt Docs \u2014 Experimental Features<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/h3js\/h3\/releases\/tag\/v2.0.2\" target=\"_blank\" rel=\"noopener\">h3 \u2014 v2.0.2 release<\/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.6\uc758 nuxt\/server, appSecret, typed $fetch, CLI v4\ub97c \uc11c\ubc84 \ucf54\ub4dc\u00b7CI\u00b7\ubc30\ud3ec \uad00\uc810\uc5d0\uc11c \uc548\uc804\ud558\uac8c \uc801\uc6a9\ud558\ub294 \uc21c\uc11c\ub97c \uc815\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n","protected":false},"author":1,"featured_media":574,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-575","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\/575","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=575"}],"version-history":[{"count":0,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/posts\/575\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/media\/574"}],"wp:attachment":[{"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/media?parent=575"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/categories?post=575"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gilnas.synology.me\/wordpress\/wp-json\/wp\/v2\/tags?post=575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}