[Vue+Nuxt.js] Nuxt.js ์‹œ์ž‘ํ•˜๊ธฐ

2022. 5. 18. 23:35ใ†Front-End ์ž‘์—…์‹ค/Nuxt.js

728x90
๋ฐ˜์‘ํ˜•

 

Git Hub

 

 

 

๐Ÿ—‚ ๋ชฉ์ฐจ

โ— [Vue+Nuxt.js] Nuxt.js ๊ธฐ๋ณธ 
โ—[Vue+Nuxt.js] Nuxt.js ์‹œ์ž‘ํ•˜๊ธฐ 
โ— [Vue+Nuxt.js] Nuxt.js Data ํ˜ธ์ถœ ๋ฐฉ์‹๊ณผ API ์—ฐ๋™  
โ—[Vue+Nuxt.js] Nuxt.js๋ฅผ ์ด์šฉํ•˜์—ฌ ์‡ผํ•‘ ์ƒํ’ˆ ๋ชฉ๋ก ํŽ˜์ด์ง€์™€ ์ƒ์„ธ ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ
โ— [Vue+Nuxt.js] Nuxt.js๋ฅผ ์ด์šฉํ•˜์—ฌ ์‡ผํ•‘ ์ƒํ’ˆ ๊ฒ€์ƒ‰ UI ๊ฐœ๋ฐœ
โ—[Vue+Nuxt.js] Vuex๋ฅผ ์ด์šฉํ•˜์—ฌ ์žฅ๋ฐ”๊ตฌ๋‹ˆ Page ๋งŒ๋“ค๊ธฐ
โ— [Vue+Nuxt.js] Vuex ์ƒˆ๋กœ๊ณ ์นจ ์‹œ ์ดˆ๊ธฐํ™” ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ

 

 

๐Ÿ—‚ ๋ถ€๋ก

โ— [FrontEnd] HMR(Hot Module Replacement)
โ— [Nuxt.js] ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ ๋ฐฉ๋ฒ•

โ— V-Model ๋™์ž‘ ์›๋ฆฌ์™€ ํ™œ์šฉ ๋ฐฉ๋ฒ•
โ— [Nuxt.js] NuxtServerInit

 

 

๐Ÿ—‚ ๋‚ด๊ฐ€ ๋งŒ๋‚œ Error

โ— [vuex] expects string as the type, but found undefined.

 

 

 

 

 

 

๐Ÿš€ Nuxt Project Created

    ๐Ÿ”ฝ  ์„ค์น˜

        ๐Ÿ“ฆ Nuxt-app

Nuxt.js ๊ณต์‹ ๋ฌธ์„œ์—๋Š” ์–ด๋–ป๊ฒŒ ์„ค์น˜๋ฅผ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ๋‹ˆํ•˜๋ž‘์€ `npm`์„ ์ด์šฉํ•ด์„œ ์„ค์น˜๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•ด์š”!

์ถœ์ฒ˜ : https://nuxtjs.org/docs/get-started/installation

 

 

 

์ตœ์ดˆ ์ด๋ ‡๊ฒŒ ํ™”๋ฉด์ด ๋‚˜์˜ค๋ฉด Y๋ฅผ ๋ˆŒ๋Ÿฌ ๋„˜์–ด๊ฐ€ ์ฃผ์„ธ์š”!

 

 

๊ทธ๋Ÿฐ ๋‹ค์Œ Project ์ด๋ฆ„์„ ๋ฌด์—‡์œผ๋กœ ํ• ์ง€ ๋ฌผ์–ด๋ณด๋Š”๋ฐ, Enter๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ตœ์ดˆ ์ƒ์„ฑํ•œ Project ์ด๋ฆ„์œผ๋กœ ์„ค์ •์ด ๋ฉ๋‹ˆ๋‹ค.

 

 

๋‹ค์Œ์€ Program Languge๋ฅผ ์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋Š”๋ฐ, ์ฃผ๋‹ˆํ•˜๋ž‘์€ `JavaScript`๋ฅผ ์„ ํƒํ•ด์„œ ์ง„ํ–‰ ํ•ด ๋ณด๋ ค ํ•ด์š”!
์™œ๋ƒํ•˜๋ฉด ๊ฐ•์˜ํ•ด์„œ `JavaScript`๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.

 

 

 

๊ทธ ๋‹ค์Œ Package Manager๋Š” NPM(Node Package Manager)๋ฅผ ์„ ํƒํ•ด์„œ ์ง„ํ–‰ ํ•ด ๋ณผ ๊ฒƒ์ด์—์š”.

 

 

์ด๋ฒˆ์—๋Š” UI Framework๋ฅผ ์ •ํ•˜๋Š” ๋ถ€๋ถ„์ธ๋ฐ, ์ตœ์ดˆ ์•„๋ฌด๊ฒƒ๋„ ์„ ํƒํ•˜์ง€ ์•Š๊ณ , None์œผ๋กœ ํ•˜์—ฌ ์ง„ํ–‰ ํ•ด ๋ณผ๊ฒŒ์š”.

 

 

 

 

๊ทธ ๋‹ค์Œ์€ `Nuxt.js`์˜ Module์„ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด์—์š”. ์ด๋ฒˆ์—๋„ ์•„๋ฌด๊ฒƒ๋„ ์„ ํƒํ•˜์ง€ ์•Š๊ณ , ๋„˜์–ด ๊ฐ€๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

`Linting Tools`๋Š” `ESlint`์™€ `Prettier`๋ฅผ ์ด์šฉํ•ด์„œ ์ง„ํ–‰ ํ•ด ๋ณผ ๊ฒƒ์ด์—์š”.

 

 

 

๊ทธ ๋‹ค์Œ์—๋Š” `Test Tool`์„ ์ •ํ•˜๋Š” ๋ถ€๋ถ„์ธ๋ฐ, ์ด ๋ถ€๋ถ„๋„ ์ผ๋‹จ None์œผ๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ํ•  ๊ฒƒ์ด์—์š”.

 

 

 

์ด๋ฒˆ์—๋Š” Rendering ๋ฐฉ์‹์„ ์„ ํƒํ•˜๋Š” ๋ถ€๋ถ„์ด์—์š”.
Nuxt.js๋Š” SSR์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” Framework๋ผ๊ณ  ์ด์ „ ๊ธ€์—์„œ ๊ณต๋ถ€๋ฅผ ํ•ด ๋ณด์•˜๋Š”๋ฐ, `SPA`๋„ ์ง€์›ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์ด์—์š”.

์ฃผ๋‹ˆํ•˜๋ž‘์€ ์ฃผ์ œ์— ๋งž๊ฒŒ `Universal(SSR/SSG)`๋กœ ๊ณต๋ถ€๋ฅผ ํ•ด ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ `SSG`๋Š” `Static Site Generator`์˜ ์•ฝ์ž๋กœ ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ๊ธฐ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ต๋‹ˆ๋‹ค.

 

 

 

๊ทธ ๋‹ค์Œ์—๋Š” `Deployment target`์„ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„์ธ๋ฐ, ์—ฌ๊ธฐ์„œ๋Š” `Server(Node.js hosting)`์„ ์„ ํƒํ•ด์„œ ๋„˜์–ด๊ฐˆ ๊ฒƒ์ด์—์š”.

 

 

 

์ด๋ฒˆ์—๋Š” ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ถ€๋ถ„์ด์—์š”.

๊ฐ•์˜์—์„œ๋Š” `VS Code`๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— `jsconfig.json...`์„ ์„ ํƒํ•ด ์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฑธ ์„ ํƒํ•˜๋ฉด VS Code ๋‚ด์— ์ž๋™ ์™„์„ฑ๋“ฑ์˜ ๊ธฐ๋Šฅ ๋“ฑ์ด ์ถ”๊ฐ€๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

๊ทธ๋Ÿฐ ๋‹ค์Œ `CI Tool(Continuous Integration Tool)`์€ ์ผ๋‹จ None์œผ๋กœ ์„ ํƒํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋„๋ก ํ• ๊ฒŒ์š”.

 

 

 

Version ๊ด€๋ฆฌ๋Š” ๋‹น์—ฐ Git์„ ์ด์šฉํ•ด์•ผ ๊ฒ ์–ด์š”.

 

 

 

์ด๋ ‡๊ฒŒ ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ด๋Ÿฐ ํ™”๋ฉด์ด ๋‚˜์˜ค๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.
์•„์ฃผ ์นœ์ ˆํ•˜๊ฒŒ ์–ด๋–ป๊ฒŒ ์ด์šฉํ•˜๋ฉด ๋˜๋Š”์ง€ ์ด์•ผ๊ธฐ ํ•ด ์ฃผ๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

Project๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ์œ„์น˜๋ฅผ ๊ฐ€๋ณด๋‹ˆ ์ด๋ ‡๊ฒŒ ์•Œ๋”ฑ์ž˜๊น”์„ผ(์•Œ์•„์„œ ๋”ฑ ์ž˜ ๊น”๋”ํ•˜๊ณ  ์„ผ์Šค์žˆ๊ฒŒ) ๋งŒ๋“ค์–ด ์ค€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”. 

 

 

 

๊ทธ๋Ÿฐ ๋‹ค์Œ `num run dev` ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‹คํ–‰์„ ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ์ž˜ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

Nuxt.js๊ฐ€ ์ž˜ ์‹คํ–‰ ๋˜๊ณ  ์žˆ์–ด์š”.
์ดˆ๊ธฐ ์„ค์น˜๋Š” ํฌ๊ฒŒ ์–ด๋ ต์ง€ ์•Š๋„ค์š”!

 

 

    ๐Ÿ”ฝ  Project Package

        ๐Ÿ“ฆ structure

์œ„์—์„œ Nuxt.js Project๋ฅผ ์ดˆ๊ธฐ ๊ตฌ์„ฑ ์™„๋ฃŒํ•œ ๊ฒƒ์ด์—์š”.

 

 

Package ๊ตฌ์กฐ๋ฅผ ํ•œ๋ฒˆ ์‚ดํŽด ๋ณด๋„๋ก ํ• ๊ฒŒ์š”.

๊ฐ•์˜์—์„œ๋Š” ์œ„์™€ ๊ฐ™์€ Project ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ์ฃผ๋‹ˆํ•˜๋ž‘ ๊ตฌ์กฐ๋Š” ๋ญ”๊ฐ€ ๋ช‡ ๊ฐœ ๋น ์ง€๊ฒŒ ๋œ ๊ฒƒ์ด์—์š”.

 

 

์ผ๋‹จ์€ ๊ฐ•์˜์—์„œ ๋‚˜์˜ค๋Š”๊ฒŒ ๋” ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ•์˜์—์„œ ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถ€ ํ•ด ๋ณด๋„๋ก ํ• ๊ฒŒ์š”.

 

 

โ— .nuxt๋ž€? 
   - Nuxt.js Build Package์ธ๋ฐ, ์‰ฝ๊ฒŒ ๋งํ•ด Build๊ฐ€ ๋œ ๊ฒฐ๊ณผ๋ฌผ์ด ๋‹ด๊ธฐ๋Š” ๊ณณ.
   - ์ฆ‰, `npm run dev`์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Build๋ฅผ ํ•˜๊ณ , ์‹คํ–‰์„ ํ•˜๋ฉด ์ƒ์„ฑ.

โ— assets์ด๋ž€?
   - image, CSS, Resource ๋“ฑ์ด ๋‹ด๊ธฐ๋Š” ๊ณณ.

โ— components๋ž€?
   - Vue CLI(Command Line Interface), Vue Component๊ฐ€ ๋‹ด๊ธฐ๋Š” ๊ณณ.

โ— layouts์ด๋ž€?
   - Router๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŠน์ • URL์— ์ ‘๊ทผํ–ˆ์„ ๋•Œ ๋ฟŒ๋ ค์ง€๋Š” Component ์ฆ‰, Page Component๊ฐ€ ๋ฟŒ๋ ค์งˆ ๋•Œ, ๊ฐ€์žฅ ์ตœ์ƒ์œ„ Component ์ฆ‰, Page Component์˜ Layout์„ ๋‹ด๋‹นํ•˜๋Š” Component๊ฐ€ ๋‹ด๊ธฐ๋Š” ๊ณณ. 

โ— middleware๋ž€?
   - SSR(Server Side Rendering)์„ ์ง„ํ–‰ํ•  ๋•Œ, Server์—์„œ ๋ธŒ๋ผ์šฐ์ €๋กœ ์–ด๋–ค ํŒŒ์ผ๋“ค์„ ๋„˜๊ธฐ๊ธฐ ์ „์— ํ•ญ์ƒ ์‹คํ–‰ ์‹œํ‚ค๋Š” ํ•จ์ˆ˜๊ฐ€ ๋‹ด๊ธฐ๋Š” ๊ณณ.

โ— pages๋ž€?
   - ํŠน์ • URL์— Mapping ๋˜์–ด ๊ทธ๋ ค์งˆ Component๋“ค์ด ๋‹ด๊ธฐ๋Š” ๊ณณ.

โ— plugin์ด๋ž€?
   - Vue ๊ด€๋ จ Plugin์ด ๋‹ด๊ธฐ๋Š” ๊ณณ.

โ— static์ด๋ž€?
   - Build๋ฅผ ํ–ˆ์„ ๋•Œ, Server์˜ `/(root)` ์ฃผ์†Œ๋กœ ์˜ฎ๊ธฐ๊ฒŒ ๋  ์ฆ‰, ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ๋“ค์ด ๋‹ด๊ธฐ๋Š” ๊ณณ.

โ— store๋ž€?
   - Vuex์˜ Store๋ฅผ ์˜๋ฏธ.

 

 

 

 

 

 

    ๐Ÿ”ฝ  ๋ฉ”์ธ ํŽ˜์ด์ง€ ์ƒ์„ฑ ๋ฐ ๊ฒฐ๊ณผ ํ™•์ธ

Nuxt.js์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ํŒŒ์ผ ๊ธฐ๋ฐ˜์˜ ์ž๋™ Route ์ƒ์„ฑ์„ ํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์ด๋ž๋‹ˆ๋‹ค.

 

 

์ตœ์ดˆ ์œ„์™€ ๊ฐ™์ด `/pages` ๋ฐ‘์— main.vue๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ , ์œ„์™€ ๊ฐ™์ด ์ž…๋ ฅ์„ ํ•ด ์ค€ ๋’ค์— ์ €์žฅ์„ ํ•˜๋Š” ์ˆœ๊ฐ„ Build๋ฅผ ํ•ด ๋‘” ์ƒํƒœ๋ผ๋ฉด Build๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰๋  ๊ฒƒ์ด์—์š”.


 

 

 

๋ฐ”๋กœ ์ด๋Ÿฐ์‹์œผ๋กœ ๋ง์ด์—์š”.

 

์ฃผ์†Œ์ฐฝ์— URI๋กœ main์„ ์ž…๋ ฅํ•ด ์ฃผ๋ฉด ์œ„์—์„œ ์ž…๋ ฅํ•œ ๊ธ€์ž๊ฐ€ ๋ณด์ด๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

 

 

์ด๋ฅผ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ Vue devtool์„ ํ†ตํ•ด ํ™•์ธํ•˜๋ฉด `<PagesMain.vue>`๊ฐ€ ํ™•์ธ์ด ๋˜๋Š”๋ฐ, ์ด๋Š” main.vue๋ผ๋Š” ํŒŒ์ผ์— ์˜ํ•ด component๊ฐ€ ์ƒ์„ฑ์ด ๋˜๊ณ , Router๊นŒ์ง€ ์ž๋™์œผ๋กœ ์•Œ์•„์„œ ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์ด๊ฒƒ์ด ๋ฐ”๋กœ Nuxt.js์˜ ๊ฐ•์ ์ธ ํŒŒ์ผ ๊ธฐ๋ฐ˜์— ์ž๋™ Routing ์ƒ์„ฑ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด์—์š”.

 

 

 

์ฃผ๋‹ˆํ•˜๋ž‘์€ ์—†์–ด์„œ ๋งŒ๋“ค๊ธฐ๋Š” ํ–ˆ๋Š”๋ฐ, ์บกํ‹ดํŒ๊ต๋‹˜๊ป˜์„œ๋Š” `layouts` ๋ฐ‘์— default.vue๊ฐ€ ์žˆ์—ˆ์–ด์š”.

์œ„์— `<Nuxt />`๋ผ๋Š” Tag๋ฅผ ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์ง„์„ ๋„ฃ์–ด ๋ดค๋Š”๋ฐ, Nuxt.js ์—†์ด Vue.js๋กœ Front End๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ๋ฐ”๋กœ ์ € ๋ถ€๋ถ„์— `<router-view>`๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด๋ž๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ URL์„ ์ด๋™ํ•  ๋•Œ ๋งˆ๋‹ค Page Component๊ฐ€ ๊ทธ๋ ค์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

๊ฒฐ๊ตญ ์ด์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” URL์— ๋”ฐ๋ผ Mapping ๋˜๋Š” Component ์ฆ‰, `pages` ๋ฐ‘์— ์žˆ๋Š” vue File์ด ์œ„์˜ `<Nuxt />` Tag์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

๋ฐ˜์‘ํ˜•

 

 

    ๐Ÿ”ฝ  ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ ๋นŒ๋“œ ๊ฒฐ๊ณผ ํ™•์ธ

๊ทธ๋ ‡๋‹ค๋ฉด ๋„๋Œ€์ฒด ์–ด๋–ค Logic์œผ๋กœ Page๋ฅผ ๋งŒ๋“ค๊ณ , ์ €์žฅํ•˜์ž๋งˆ์ž Routing์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ผ๊นŒ์š”?

์šฐ๋ฆฌ๊ฐ€ ์œ ์‹ฌํžˆ ์‚ดํŽด๋ณด์•„์•ผ ํ•  ์นœ๊ตฌ๋Š” ๋ฐ”๋กœ .nuxt Package์ธ ๊ฒƒ์ด์—์š”.

์œ„์—์„œ๋„ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ, Build๋ฅผ ํ•  ๋•Œ๋งˆ๋‹ค ์ด ๊ณณ์— Build ๋‚ด์šฉ์ด ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์ธ๋ฐ, 

 

.nuxt

์œ„์™€ ๊ฐ™์ด .nuxt Package ์•ˆ์„ ๋“ค์—ฌ๋‹ค ๋ณด๋ฉด router.js๋ผ๋Š” ํŒŒ์ผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, 

 

2๋ฒˆ์งธ ์ค„์—์„œ Router๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ 12๋ฒˆ์งธ ์ค„์—์„œ ์ดˆ๊ธฐํ™”๋ฅผ ํ•œ ๋‹ค์Œ 21 ~ 29๋ฒˆ์งธ๊นŒ์ง€ `routes` ๋ฐฐ์—ด ์•ˆ์— ๊ฐ์ฒด Type์œผ๋กœ ` Router Option`์ด ์„ค์ •๋˜์–ด ์žˆ๋Š”๋ฐ, `main`์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๊ฐ€ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

 

 

์ด๋ฒˆ์—๋Š” `pages`๋ฐ‘์— `product` Package๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์— Index.vue๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์–ด ๋ณผ๊ฒŒ์š”.

 

 

์œ„์™€ ๊ฐ™์ด Code๋ฅผ ์ž…๋ ฅํ•˜๊ณ , ์ €์žฅํ•˜๋Š” ์ˆœ๊ฐ„

router.js

 

์œ„์™€ ๊ฐ™์ด 27 ~ 30๋ฒˆ์งธ ์ค„์— ํ•ด๋‹นํ•˜๋Š” routes ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

 

 

 

    ๐Ÿ”ฝ  Error Page ์ƒ์„ฑ

์ด๋ฒˆ์—๋Š” ์ด์šฉ์ž๊ฐ€ ํ˜„์žฌ ๋“ฑ๋ก๋œ URL ์ด์™ธ URL์„ ์ž…๋ ฅํ–ˆ์„ ๋•Œ, 404 Not Found Error๋ฅผ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋Š” Page๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ๊ฒŒ์š”.


 

์ผ๋‹จ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๋„๋ก Nuxt.js๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์–ด์š”.

 

 

 

์ตœ์ดˆ `layouts` ๋ฐ‘์— error.vue๋ฅผ ๋งŒ๋“ค์–ด ์ค„ ๊ฒƒ์ด์—์š”.

 

error.vue

 

Code๋Š” ์œ„์™€ ๊ฐ™์ด ๋“ฑ๋ก์„ ํ•ด ์ฃผ์—ˆ๊ณ , ์•„๊นŒ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์—†๋Š” URL์„ ์ž…๋ ฅํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

 

eslint Error

 

์‚ฌ์‹ค ์ฃผ๋‹ˆํ•˜๋ž‘์ด Vue๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ œ์ผ ์งœ์ฆ๋‚˜๋Š” ๋ถ€๋ถ„์ด Eslint Error์—์š”.

์ด๋ ‡๊ฒŒ Error๊ฐ€ ๋‚˜์‹œ๋Š” ๋ถ„๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•ด ์ฃผ์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

.eslintrc.js

.eslintrc.js์— 14๋ฒˆ์งธ ์ค„์— ๋ณด๋ฉด rules๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด ๊ณณ์— ์•„๋ž˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ ํ•ด ์ฃผ์‹œ๋ฉด ๋˜์š”.

 

 

์ด ๋‚ด์šฉ์€ multi word ์ด๋ฆ„์— ๋Œ€ํ•ด error๋ผ๋Š” ์ด๋ฆ„์€ ๋ฌด์‹œํ•˜๊ฒ ๋‹ค๊ณ  ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

์ด๋ ‡๊ฒŒ ํ•˜๊ณ  ๋‚˜๋‹ˆ ์ •์ƒ์ ์œผ๋กœ Error Page๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

์›๋ž˜ error.vue๋Š” ์‚ฌ์‹ค `pages` ๋ฐ‘์— ์žˆ์–ด์•ผ ๋” ์ •์ƒ์ ์œผ๋กœ ๋ณด์ด์ง€๋งŒ, ๊ณตํ†ต Component๋กœ ์ดํ•ดํ•˜๊ณ , ์ด ๋‚ด์šฉ์€ `layouts`์— ๋„ฃ๋Š”๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์•„์š”.

์ฆ‰, error Page๋Š” Page Component Level ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

    ๐Ÿ”ฝ  Nuxt Routing Component

 

์ถœ์ฒ˜ : ์ธํ”„๋Ÿฐ - Nuxt.js ์‹œ์ž‘ํ•˜๊ธฐ

 

localhost 3000 port๋กœ main์œผ๋กœ Server์— ์ ‘๊ทผ์„ ํ•˜๊ฒŒ ๋˜๋ฉด `layouts`์— ์ตœ์ดˆ Component๊ฐ€ ๋ฟŒ๋ ค์ง€๊ฒŒ ๋˜๊ณ , ๊ทธ๋Ÿฐ ๋’ค main์ด๋ผ๋Š” URI์™€ Mapping ๋˜๋Š” `pages` ๋ฐ‘์— main.vue๊ฐ€ Component Level์˜ pages์— ๋ฟŒ๋ ค์ง€๊ฒŒ ๋  ๊ฒƒ์ด์—์š”.

๊ทธ๋Ÿฐ ๋‹ค์Œ main.vue์— ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ Component๋“ค์„ ๋“ฑ๋กํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

    ๐Ÿ”ฝ  Layout Component

์ฃผ๋‹ˆํ•˜๋ž‘์€ `layouts` ๋ฐ‘์— ์œ„์น˜ํ•˜๋Š” Component๊ฐ€ ์•„์ง ์ž˜ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด์—์š”.

๋„๋Œ€์ฒด Layout Component๋Š” ์–ธ์ œ ์ด์šฉํ•˜๋ฉด ์ข‹์„๊นŒ์š”?


 

์ตœ์ดˆ `pages` ๋ฐ‘์— index.vue File์— ๋‚ด์šฉ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•ด ์ค„๊ฒŒ์š”.

 

index.vue

 

๊ทธ๋ฆฌ๊ณ , main, product.vue๋„ ๊ฐ™์ด ํ•œ๋ฒˆ ๋งŒ๋“ค๊ณ  ์ˆ˜์ •ํ•ด ๋ณผ๊ฒŒ์š”.

 

main.vue

 

 

product.vue

 

์ž! ์œ„์™€ ๊ฐ™์ด ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋Š”๋ฐ, ๋ณด๋ฉด ๊ณตํ†ต๋˜๋Š” ๋ถ€๋ถ„๋“ค์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

์„ธ ๊ฐ€์ง€ Componet ๋ชจ๋‘ <h1> Tag๊ฐ€ ๋ชจ๋‘ ๋“ค์–ด ๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๊ณตํ†ต์œผ๋กœ ์ด์šฉ๋˜๋Š” ๋ถ€๋ถ„์„ Java์—์„œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋ถ„๋ฆฌํ•ด์„œ ์ด์šฉํ•˜๋“ฏ์ด ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ `layouts` ๋ฐ‘์— ๋งŒ๋“ค๊ณ , Componet๋ฅผ ๋ถ€๋ฅด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด์šฉํ•œ๋‹ค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

layouts/defaults.vue

 

์œ„์™€ ๊ฐ™์ด defaults.vue์— 3๋ฒˆ์งธ ์ค„์ฒ˜๋Ÿผ ๊ณตํ†ต Tag๋ฅผ ์ž…๋ ฅ ํ•ด ๋ณด์•˜์–ด์š”.

 

 

 

 

๊ทธ๋žฌ๋”๋‹ˆ ์œ„์™€ ๊ฐ™์ด `Page`๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์œ„์น˜๋ฅผ ์ด๋™ํ•ด๋„ ๊ณ„์† ๋ณด์ด๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

 

 

์œ„์™€ ๊ฐ™์ด ๋˜!! eslint Multi word Error๊ฐ€ ๋‚˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์—…์„ ํ•ด ์ฃผ์„ธ์š”.

 

.eslintrc.js

 

 

 

๊ทธ๋Ÿผ ์œ„์™€ ๊ฐ™์ด ์ž˜ ์‹คํ–‰ ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์œผ์‹ค๊ฑฐ์—์š”.

 

 

layouts/default.vue

์œ„์— 3๋ฒˆ์งธ ์ค„์— route์— ์ •์˜๋œ ์ด๋ฆ„์„ ๋ถˆ๋Ÿฌ์˜ค๋„๋ก ํ•ด ๋ณด์•˜์–ด์š”.

 

router.js

routes์— ๋ณด๋ฉด ๊ฐ๊ฐ name ๊ฐ์ฒด๋กœ ์ด๋ฆ„์ด ์„ค์ •๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ฐ”๋กœ ์ด ๋ถ€๋ถ„์„ ๋ถˆ๋Ÿฌ ๊ฐ€๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

 

 

 

 

 

    ๐Ÿ”ฝ  nuxt-link Tag

vue.js ์—์„œ route link๊ฐ€ nuxt.js์—์„œ๋Š” nuxt link๋ผ๊ณ  ๋Œ€์ฒด๋˜๋Š” ๊ฒƒ์ด์—์š”.

layouts/default.vue

 

์œ„์™€ ๊ฐ™์ด 6~8๋ฒˆ์งธ ์ค„์— <a> Tag์™€ ๊ฐ™์ด ์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋Š” `<NuxtLink>`๋ฅผ ๋งŒ๋“ค์—ˆ์–ด์š”. `to`์—๋‹ค๊ฐ€ URI๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ํ•ด๋‹น Page๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

<NuxtLink> ๋Š” Vue.js์—์„œ `<router-link>` ์™€ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊ผญ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•