NuxtJS 활용한 웹 개발, 서버 및 클라이언트 렌더링 구별 - Whitmem
NuxtJS 활용한 웹 개발, 서버 및 클라이언트 렌더링 구별
VueJS 개발
2025-06-22 17:20 게시 02c1cd4b0dc332ffcc6b

0
0
2
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
NuxtJS 에서 스크립트 코드를 작성하면 이 코드는 서버에서 실행되는 걸까? 아니면 클라이언트에서 실행되는 걸까?
<template> <div> <NuxtRouteAnnouncer /> <NuxtWelcome /> </div> </template> <script> console.log("OK"); </script>
위와 같은 소스 코드가 존재한다고 가정할 때 이 코드는 분명히 웹 브라우저단에서 렌더링되는 코드이기 때문에 웹 브라우저에서는 반드시 실행된다고 볼 수 있다.
실제 NuxtJS 서버를 개방한 뒤 실행하면 아래와 같이 출력되는 것을 확인할 수 있다.
OK runtime-core.esm-bundler.js?v=f1734152:7089 <Suspense> is an experimental feature and its API will likely change. devtools.client.js?v=f1734152:52 ✨ Nuxt DevTools Press Shift + Alt + D to open DevTools
즉 OK 는 브라우저 단에서 실행되는 것은 확실한데, 서버에서도 가끔 출력되는 것을 확인할 수 있다.
C:\Users\WhitmemHome\Desktop\Work2\project_test>npm run dev > dev > nuxt dev Nuxt 3.17.5 with Nitro 2.11.12 nuxi 오후 5:04:35 오후 5:04:35 ➜ Local: http://localhost:3000/ ➜ Network: use --host to expose ➜ DevTools: press Shift + Alt + D in the browser (v2.5.0) 오후 5:04:37 √ Vite client built in 130ms 오후 5:04:40 √ Vite server built in 788ms 오후 5:04:41 √ Nuxt Nitro server built in 1907ms nitro 오후 5:04:43 i Vite client warmed up in 5ms 오후 5:04:43 i Vite server warmed up in 1229ms 오후 5:04:44 OK
NuxtJS 는 상황에 따라 서버 측에서도 렌더링하고 클라이언트 측에서도 렌더링하기 때문에 서버 측에서도 해당 코드가 실행될 수 있다는 점에 유의해야 한다.
즉 서버에서 애초 클라이언트 화면에 렌더링되어야 할 사항들을 미리 서버에서 가상 렌더러에 렌더링을 한다.[
즉 같은 코드에 대해서 서버에서도 추가적으로 실행하고, 브라우저에 전달되어 브라우저 단에서 실행될 수 있음에 유의해야 한다.
즉 NuxtJS 에서는 이러한 렌더링 차이를 구별할 수 있도록 bool 상태를 제공하는데 그것이 바로 process.server process.client이다.
<template> <div> <NuxtRouteAnnouncer /> <NuxtWelcome /> </div> </template> <script> console.log("[SERVER] " + process.server); console.log("[CLIENT] " + process.client); console.log("OK"); </script>
이 코드를 적용한뒤 NuxtJS 서버를 실행해본다.
[SERVER] true [CLIENT] false OK
접속할 때 쯤, 서버측에서는 위 처럼 콘솔이 출력되는 것을 볼 수 있고,
[SERVER] false app.vue:10 [CLIENT] true app.vue:11 OK browser.mjs?v=f1734152:48 ssr [SERVER] true at <anonymous> (C:\Users\WhitmemHome\Desktop\Work2\project_test\node_modules\nuxt\dist\core\runtime\nitro\plugins\dev-server-logs.js) at Object.log (C:\Users\WhitmemHome\Desktop\Work2\project_test\node_modules\nuxt\dist\core\runtime\nitro\plugins\dev-server-logs.js) at C:\Users\WhitmemHome\Desktop\Work2\project_test\app.vue at process.processTicksAndRejections (node:internal/process/task_queues) at async ViteNodeRunner.runModule (/node_modules/vite-node/dist/client.mjs)
브라우저 측 콘솔 출력에서는 위와 같이 출력되는 것을 볼 수 있다. 즉 서버에서 실행되는 코드에 대해서는 process.server 가 true로, 클라이언트에서 실행되는 코드에 대해서는 process.client 가 true로 디버깅되는 것을 확인할 수 있다.
NuxtJS 에서 동적인 데이터를 가져올 때, 위 상태 변수를 활용해서 목적지 서버의 아이피를 지정할 수 있다. 서버 측에서는 localhost 로, 클라이언트 측에서는 외부 주소로 접근하는 식으로 요청할 수 있다.
댓글 0개
댓글을 작성하는 경우 댓글 처리 방침에 동의하는 것으로 간주됩니다. 댓글을 작성하면 일회용 인증키가 발급되며, 해당 키를 분실하는 경우 댓글을 제거할 수 없습니다. 댓글을 작성하면 사용자 IP가 영구적으로 기록 및 부분 공개됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.