ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

Vue/์‚ฝ์งˆ์ผ๊ธฐ

Nuxt ์‚ฌ์šฉ ํ›„๊ธฐ

๋Œ•๋Œ•์ด๋ฐœ๐Ÿพ 2020. 6. 28. 19:18

์ผ๋‹จ Vue js์™€ Nuxt์— ๋Œ€ํ•œ ์„ธ๋ถ€์ ์ธ ๋‚ด์šฉ์ด ์—†๋Š” ๋ถ€๋ถ„์€ ์–‘ํ•ด๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.  
Nuxt๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ๋‚˜์„œ ๊ฒช์—ˆ๋˜ ์žฅ๋‹จ์ ๋“ค์„ ์ ์–ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

 

NUXT JS

์ง๊ด€์ ์ธ 
Vue ํ”„๋ ˆ์ž„์›Œํฌ

์›น ๊ฐœ๋ฐœ์„ ์‰ฝ๊ณ  ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์ธ Nuxt.js๋กœ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋‹ค์Œ Vue.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”. 

 

Nuxt ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์— ๋‚˜์™€์žˆ๋Š” ๋Œ€๋ฌธ ๋ฌธ๊ตฌ์ž…๋‹ˆ๋‹ค. ์œ„ ๋ง ๊ทธ๋Œ€๋กœ Vue๋ฅผ front-end ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ๋” ๋งŒ๋“ค์–ด์ง„ framework์ž…๋‹ˆ๋‹ค. 

๊ณต์‹ ํ™ˆํŽ˜์ด์ง€๊ฐ€ ํ•œ๊ธ€๋กœ ์ด๋ฏธ ๋ฒˆ์—ญ์ด ๋˜์–ด์žˆ์–ด์„œ ์ž์„ธํ•œ ์„ค๋ช…์€ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„  ์ง์ ‘ NUXT JS๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ๊ฒช์—ˆ๋˜ ๋‚ด์šฉ๋“ค์„ ์œ„์ฃผ๋กœ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

๊ธฐ์กด์˜ Vue๋ฅผ ์“ฐ๋ฉด์„œ ํ•„์š”ํ–ˆ๋˜ ์ž‘์—…๋“ค...

๋‹จํŽธ์ ์œผ๋กœ vue๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š”๊ฑด ๊ทธ๋ฆฌ ์–ด๋ ค์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. vue ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์— ๋‚˜์˜จ๋Œ€๋กœ ๋”ฐ๋ผํ•˜๋ฉด ํ™”๋ฉด์„ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ํ™”๋ฉด์„ ์›น์— ๋„์šฐ๋Š”๊ฑด ์ •๋ง ์‰ฝ๊ฒŒ ์„ค๋ช…์ด ๋˜์–ด์žˆ๊ตฌ์š”.. ๋‹จ, vue์—์„œ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡๋ช‡ ์„ค์ •์ž‘์—…๋“ค์ด ํ•„์š”ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋‹จ์ˆœ ์‹ค์Šต์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ํ•„์š”ํ•œ ์ž‘์—…๋“ค์ž…๋‹ˆ๋‹ค.

 

  1. ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ์™€์˜ ์—ฐ๋™์ž‘์—…
    : Vue๋Š” front-end์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ฆ‰ server ์˜ ๊ฐœ๋…์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ”ํžˆ ๋งํ•˜๋Š” server์˜ API ํ˜ธ์ถœ์„ ํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์„œ๋ฒ„ ํ”„๋กœ์ ํŠธ์™€์˜ ์—ฐ๋™ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต Proxy์— ๊ด€๋ จ๋œ ์ž‘์—…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ณ , Vue์—์„œ ์„œ๋ฒ„์ชฝ ์†Œ์Šค์˜ API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ํ™˜๊ฒฝ์„ ์žก์•„์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

  2. Webpack ์ž‘์—…
    : webpack ์€ ์ฐธ ์ข‹์€ ๋„๊ตฌ์ด๋ฉด์„œ๋„ ๊ท€์ฐฎ์€ ๋ถ€๋ถ„์ค‘์— ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. webpack ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์„ ํ•˜๋ ค๋ฉด ๋ณ„๋„์˜ ๊ธ€์„ ์ž‘์„ฑํ•ด์•ผ ํ• ๋งŒํผ ํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ๋‹ค์–‘ํ•˜๊ณ  ์„ค์ •๋„ ๊ฐ€์ง€๊ฐ์ƒ‰์ž…๋‹ˆ๋‹ค. ์•„์ฃผ ๋‹จํŽธ์ ์ธ ๋‚ด์šฉ๋งŒ ์ฒจ๋ถ€ํ•˜์ž๋ฉด ๋ชจ๋“ˆ ๋ฒˆ๋“ค๋ง ๋„๊ตฌ๋ผ๊ณ ๋“ค ํ•˜๋Š”๋ฐ, webpack์˜ config ํŒŒ์ผ์˜ ์ž‘์„ฑ๋œ ๊ทœ์น™๋“ค์„ ์ฐธ์กฐํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ๋งคํ•‘ํ•˜๊ณ  ๋ฒˆ๋“ค์„ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 

  3. Vue์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค ์ถ”๊ฐ€
    : Vue์—์„œ ๊ณต์‹์ ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ช‡๋ช‡ ๋ชจ๋“ˆ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ์˜ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„๋“ค์ด์ฃ . ์˜ˆ๋ฅผ๋“ค๋ฉด ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ Vuex ๋‚˜ Vue์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์šฐํ„ฐ์ธ Vue Router ๊ฐ€ ๋Œ€ํ‘œ์ ์ด์ฃ . 

์ด ์™ธ์— ๋งŽ์€ ์ž‘์—…๋“ค์ด ์žˆ๊ฒ ์ง€๋งŒ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€๋งŒ ์ ์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ทธ ๋‚ด์šฉ๋„ ์ƒ์„ธํ•˜๊ฒŒ ์ ์€๊ฑด ์•„๋‹ˆ๊ธด ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์œ„ ์ž‘์—…๋“ค์€ Vue ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ๋„ ๋‹ค ์นœ์ ˆํ•˜๊ฒŒ ๊ฐ€์ด๋“œํ•ด์ฃผ๋Š” ๋‚ด์šฉ๋“ค์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

NUXT.js๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ!(create-nuxt-app)

Nuxt.js ํŒ€์€ ๋น ๋ฅธ ์‹œ์ž‘์„ ์œ„ํ•ด create-nuxt-app๋ผ๋Š” ํˆด์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. Server side ํ”„๋กœ์ ํŠธ๋ฅผ Node.js ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— Node.js์™€ Vue.js๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์žก๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋„ ์žˆ์ง€๋งŒ, ์ „ ๊ฐœ์ธ์ ์œผ๋กœ ์œ„ ํˆด๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ตฌ์กฐ๊ฐ€ ๋‚˜์˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ด๋‹น ํˆด๋กœ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์ ํŠธ๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ 3๊ฐ€์ง€ ์ž‘์—…๋“ค์„ ๋‹ค ํฌํ•จํ•œ ์ฑ„๋กœ ์ž๋™์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค. 

 

์‚ฌ์šฉ๋ฒ•๋งŒ ์ตํžˆ๋ฉด ๋œ๋‹ค.

Nuxt.js ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ์ƒ์„ธํ•˜๊ฒŒ ๊ฐ€์ด๋“œ๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค. server ํ”„๋กœ์ ํŠธ์— ์žˆ๋Š” router๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ์จ์•ผํ•˜๋Š”์ง€, Vuex๋ฅผ ์“ฐ๋ ค๋ฉด ์–ด๋Š ๋””๋ ‰ํ† ๋ฆฌ์— ์–ด๋–ค ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์•ผํ•˜๋Š”์ง€, module ์‚ฌ์šฉ์„ ํ•˜๋ ค๋ฉด config ํŒŒ์ผ์— ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š”์ง€, ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด ์–ด๋Š ํŒŒ์ผ์— ์ž‘์„ฑํ•ด์•ผํ•˜๋Š”์ง€, webpack ๋นŒ๋“œ์— ๋Œ€ํ•ด์„œ ์ถ”๊ฐ€์ ์ธ ์‚ฌํ•ญ์„ ๋„ฃ์œผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”์ง€ ๋“ฑ๋“ฑ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๊ฐ€ ์ž˜ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•œ ๋‚ด๋ถ€์ ์ธ ๋กœ์ง์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•ด์ฃผ๋Š”๊ฑด ์•„๋‹™๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WHY?

ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๋Š”๊ฑด ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ์žˆ๋Š” ๊ตฌ์กฐ์— ์ •ํ•ด์ง„ ๊ทœ์น™๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์•ผ ์˜ค๋ฅ˜์˜ ์œ„ํ—˜์ด ์ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ์™€ Nuxt.js ์˜ ๊ตฌ์กฐ๊ฐ€ ๋งž๋‹ค๊ณ  ๋งํ•  ์ˆœ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์„ ๋Š๋‚€ ์ด์œ ๋Š” ๋’ค์—์„œ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

Vue  ๋Š” SPA์— ์ ํ•ฉํ•˜๋‹ค!

SPA vs MPA( ์ถœ์ฒ˜ : https://maybe.works/blog/spa-vs-mpa-pros-cons-and-gotchas )

์ „ํ†ต์ ์ธ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํŽ˜์ด์ง€์— ๋”ฐ๋ผ์„œ ํŽ˜์ด์ง€๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, SPA๋Š” ๋‹จ ํ•œ๋ฒˆ์˜ ํ˜ธ์ถœ๋งŒ์œผ๋กœ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€์—์„œ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค. Vue๋‚˜ React, Angular ๋Š” SPA ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋Œ€ํ‘œ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ž…๋‹ˆ๋‹ค. 

 

๊ทธ๋Ÿผ ๊ธฐ์กด ๋ฐฉ์‹์œผ๋กœ ๋ชป๋งŒ๋“œ๋Š” ๊ฒƒ์ธ๊ฐ€?

๋‹น์—ฐํžˆ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Nuxt.js ์—์„œ๋„ SPA ํ”„๋กœ์ ํŠธ์™€ Universal ํ”„๋กœ์ ํŠธ ์„ ํƒ์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Universal์€ ์ „ํ†ต์ ์ธ ๋ฐฉ์‹์˜ ํ”„๋กœ์ ํŠธ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

SPA๊ฐ€ ๋Œ€์„ธ๋กœ ์˜ฌ๋ผ์˜ค๊ธด ํ–ˆ์ง€๋งŒ, SPA๊ฐ€ ๋ฌด์กฐ๊ฑด ์ข‹๋‹ค๋Š”๊ฑด ์•„๋‹™๋‹ˆ๋‹ค.๊ฐœ๊ฐœ์ธ์˜ ์›น ํ”„๋กœ์ ํŠธ ๋ชฉ์ ์— ๋”ฐ๋ผ์„œ ํ•„์š”ํ•œ ๊ตฌ์กฐ๊ฐ€ ์žˆ๊ณ , ์ € ๋˜ํ•œ SPA๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด์„œ Nuxt.js๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

maybe.works/blog/spa-vs-mpa-pros-cons-and-gotchas

์œ„ ๊ธ€์˜ ๋‚ด์šฉ์„ ์ฐธ์กฐํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ „ํ†ต์ ์ธ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฉ์‹

์œ„์—์„œ ๋งํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์ „ SPA ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๊ธฐ๋•Œ๋ฌธ์—, ํŽ˜์ด์ง€๋งˆ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‹ฌ๋ž์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค๋ฉด A๋ผ๋Š” ํŽ˜์ด์ง€์—์„œ๋Š” A๋ผ๋Š” ๋ฆฌ์†Œ์Šค๋งŒ ์“ฐ๊ณ  B๋ผ๋Š” ํŽ˜์ด์ง€์—์„  B๋ผ๋Š” ๋ฆฌ์†Œ์Šค๋งŒ ์“ฐ๊ธฐ๋•Œ๋ฌธ์— ๊ตณ์ด A ํŽ˜์ด์ง€์— B ๋ฆฌ์†Œ์Šค๋ฅผ ๋กœ๋“œ์‹œํ‚ฌ ์ด์œ ๊ฐ€ ์—†๊ฒŒ๋˜์ฃ . ๊ทธ๋ฆฌ๊ณ  ์ „ํ†ต์ ์ธ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํŽ˜์ด์ง€ ์ด๋™์‹œ์— ํŽ˜์ด์ง€ ์ž์ฒด๊ฐ€ ์ƒˆ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ถœ์‹œ์ ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๊ฐ€ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋“ค์€ ๋ชจ๋‘ ์ƒˆ๋กœ ํ˜ธ์ถœ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์†Œ์Šค์ฝ”๋“œ๋“ค์ด ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ๊ฐ€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

 

Nuxt.js ์—์„œ SPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด?

Nuxt.js์—์„  ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๊ฒฝ๋กœ์— nuxt.config ํŒŒ์ผ์„ ๋‘์–ด ์ „๋ฐ˜์ ์ธ ํ”„๋กœ์ ํŠธ์˜ ์„ค์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น config๋Š” ํ”„๋กœ์ ํŠธ ์ „์ฒด์— ๋Œ€ํ•œ ๊ด€๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ถ„์ ์ธ ์„ค์ •์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ๋งํ•˜๋ฉด ์ „์—ญ๋ณ€์ˆ˜๊ฐ™์€ ๋Š๋‚Œ์œผ๋กœ ๋ณด์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ๋“ค์–ด nuxt.config ํŒŒ์ผ์— ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฃผ์ž…ํ•˜๋ฉด ๋ชจ๋“  ํŽ˜์ด์ง€์—์„œ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค SPA์—์„œ๋Š” ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ๋  ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. SPA๋Š” ์• ์ดˆ์— ํ•œ ๊ฐœ์˜ ํŽ˜์ด์ง€๋กœ ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์†Œ์Šค๋ฅผ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๋Š”๊ฒŒ ๋งž๋Š” ์ปจ์…‰์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.


Nuxt.js์—์„œ ๊ฐ๊ฐ์˜ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค ๋กœ๋“œ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์„ ์ œ๊ณตํ•ด์ค๋‹ˆ๋‹ค. (์ฐธ์กฐ: ko.nuxtjs.org/faq/)

๊ทธ๋ž˜์„œ nuxt.config์— ๋„ฃ์„๊ฑธ ๊ทธ๋ƒฅ ๊ฐ ํŽ˜์ด์ง€์— ๋„ฃ์œผ๋ฉด ๊ทธ๋งŒ์ด๋ผ๊ณ  ์ƒ๊ฐ์„ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค ์ฐธ์กฐ ํ›„ ์‹คํ–‰์— ๋Œ€ํ•œ ๋ฌธ์ œ ๋ฐœ์ƒ

์ œ๊ฐ€ ํ–ˆ๋˜๊ฑด A๋ผ๋Š” ํŽ˜์ด์ง€์— google map ์— ๊ด€ํ•œ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด A ํŽ˜์ด์ง€์—๋งŒ google map์— ๊ด€๋ จํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๊ตฌ๋ฌธ์„ ์ž‘์„ฑํ•˜๋ฉด ๋˜๋Š”๊ฑฐ๋ผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ํ•œ ๊ฐ€์ง€ ์ œ์•ฝ์‚ฌํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํŽ˜์ด์ง€๊ฐ€ ํ˜ธ์ถœ๋˜์ž๋งˆ์ž google map  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

์œ„์˜ ๋ง์€ google map์— ๊ด€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํŽ˜์ด์ง€์— ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ , ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ํ™•์‹คํ•˜๊ฒŒ ๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ง์ด ๋ฉ๋‹ˆ๋‹ค.


์—ฌ๊ธฐ์„œ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๋˜ ๋ถ€๋ถ„์€ html์— ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ฃผ์ž…์ด ๋˜์—ˆ๋‹ค ํ•˜๋”๋ผ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ผ๊ณ  ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š”๊ฑด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๋ถ„๋ช… html ์ƒ์—๋Š” google map ์— ๊ด€๋ จํ•œ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค ์ฃผ์ž…์ด ๋˜์—ˆ๋Š”๋ฐ ์‹ค์งˆ์ ์œผ๋กœ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์—์„œ๋Š” ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋กœ๋“œ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ๋ช‡๋ช‡ ์‚ฌ๋žŒ๋“ค๋„ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ํฌ์ŠคํŒ…ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.(dev.to/bawa93/troubleshooting-and-adding-google-maps-to-individual-nuxt-js-pages-1d34)

 

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฆฌ์†Œ์Šค ์ฐธ์กฐ ๋ฐ ์‹คํ–‰์„ ์–ด๋–ค ์ˆœ์„œ๋กœ ํ•˜๋Š”์ง€, Nuxt.js ์—์„œ ๊ฐ๊ฐ์˜ ํŽ˜์ด์ง€์— ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฃผ์ž…์‹œํ‚ฌ ๋•Œ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ฃผ์ž…์„ ์‹œํ‚ค๋Š”์ง€ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜๊ฐ€ ์—†์–ด์„œ ๋ฐœ์ƒํ–ˆ๋˜ ๋ฌธ์ œ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. 

 

์œ„ ์‚ฌํ•ญ์€ ์–ด์ฉ” ์ˆ˜ ์—†์ด nuxt.config ํŒŒ์ผ์— ๋ชจ๋“ˆ์„ ํฌํ•จ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. google map ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์ด ํ•œ ๊ตฐ๋ฐ๊ฐ€ ์•„๋‹ˆ์—ˆ๊ณ , ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋กœ๋“œ๊ฐ€ ๋˜๋ฉด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€์ ์ธ script ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์ฃผ์ž…ํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ์—, ๋งŒ์•ฝ ๋‹ค๋ฅธํŽ˜์ด์ง€์—์„œ google map ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จ์‹œํ‚ค๊ฒŒ ๋˜๋ฉด ์ค‘๋ณต๋˜๋Š” script ๋ฆฌ์†Œ์Šค ์ฃผ์ž…์ด ์ผ์–ด๋‚˜๊ฒŒ ๋˜์–ด์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

nuxt.config ํŒŒ์ผ์— ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค ์ฃผ์ž… ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์• ์ดˆ์— ์„œ๋ฒ„ ๊ตฌ๋™์‹œ์— ์ „์—ญ์œผ๋กœ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ฃผ์ž…๋˜๋Š”๊ฑธ ํ™•์‹คํ•˜๊ฒŒ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ์ผ๋‹จ ๊ดœ์ฐฎ์€ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ ์ „๊นŒ์ง„ ํ•ด๋‹น ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, google map ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ํŽ˜์ด์ง€์—์„  ๋ถˆํ•„์š”ํ•˜๊ฒŒ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜์ฃ . 

 

๋ผ์ดํ”„์‚ฌ์ดํด์— ๊ด€ํ•œ ๋ถ€๋ถ„์„ ๊ณ ๋ฏผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค Vue๋‚˜ React๋ฅผ ๋งํ•˜๋ฉด์„œ ๊ฐ€์žฅ๋จผ์ € ์–ธ๊ธ‰ํ•ด์•ผ๋˜๋Š” ์ปจ์…‰์ด ๊ฐ€์ƒdom์— ๋Œ€ํ•œ ์ปจ์…‰์ž…๋‹ˆ๋‹ค. ์‹ค์ œ dom์„ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฐ€์ƒ์˜ dom์„ ํ†ตํ•ด์„œ ํŽ˜์ด์ง€๋ฅผ ์ œ์–ดํ•˜๋Š” ์ปจ์…‰์„ ๊ฐ€์ง€๊ณ ์žˆ๋Š”๋ฐ, ์ด๊ฑด Nuxt.js๋ผ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ Vue.js๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ•„์ˆ˜์ ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ์ด๋™์— ๋”ฐ๋ฅธ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ „๋ฐ˜์ ์œผ๋กœ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด์•ผ ์–ด๋Š์‹œ์ ์— ์–ด๋–ค ๋ผ์ดํ”„์‚ฌ์ดํด์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•˜๋Š”์ง€๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SPA์˜ ํ˜•ํƒœ๋ฉด Nuxt.js์—์„œ ๊ฐ€์ด๋“œํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์•ฝ๊ฐ„์˜ ๋ณ€์ˆ˜๋“ค์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ข‹์•˜๋˜ ์ ์€?

๋น„๊ต ๊ธฐ์ค€์„ ๋ญ๋กœ ๋‘๋ƒ์— ๋”ฐ๋ผ ์ข€ ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ html ์ž‘์„ฑ ์ฝ”๋“œ๋กœ ๋น„๊ตํ–ˆ์„ ๋• ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ์˜ ์ฝ”๋“œ๋ฅผ ๊ต‰์žฅํžˆ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์—๋”ฐ๋ผ ์žฌ์‚ฌ์šฉ๋„ ํŽธํ•˜๊ณ  ์‹ฌ์ง€์–ด nuxt์—์„œ๋Š” layout์ด๋ผ๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋” ํ™•์žฅ์‹œ์ผœ์ฃผ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

 

์ „๋ฐ˜์ ์ธ ํ”„๋กœ์ ํŠธ์˜ ๊ด€์ ์œผ๋กœ ๋ณธ๋‹ค๋ฉด ๊ธฐ์กด์˜ ์ˆœ์ˆ˜ Vue.js๋ฅผ ํ•˜๋ฉด์„œ ํ•ด์•ผํ–ˆ๋˜ ์„œ๋ฒ„์‚ฌ์ด๋“œ๋ Œ๋”๋ง ์ž‘์—…, webpack ์„ค์ •, ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์ž‘์—… ๋“ฑ์„ ์ƒ๊ฐํ•  ํ•„์š”๊ฐ€ ๊ฑฐ์˜ ์—†์–ด์กŒ๋‹ค๋Š” ๊ฒ๋‹ˆ๋‹ค.

์ •ํ•ด์ง„ ๊ทœ์น™๋Œ€๋กœ ์ž‘์„ฑ๋งŒํ•˜๋ฉด ์ œ๊ฐ€ ์ž‘์„ฑํ•˜๋ ค๋Š” ๊ธฐ๋Šฅ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํฐ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ Vue.js ์—์„œ๋Š” ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด api ํ˜ธ์ถœ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ–ˆ๋‹ค๋ฉด, Nuxt.js์—์„œ๋Š” ๋ช‡๋ช‡ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ด์ค˜์„œ ์œ„์˜ ์• ๋กœ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. 

asyncData๋‚˜ nuxtServerInit Action์„ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ์ดํ•ด๊ฐ€ ๊ฐ€์‹ค๊ฒ๋‹ˆ๋‹ค. 

 

 

๋งˆ์ง€๋ง‰์œผ๋กœ ์•„์‰ฌ์› ๋˜ ์ 

์š”์ฆ˜ ์ถ”์„ธ๊ฐ€ Typescript๋ผ๊ณ ๋“ค ํ•˜์ฃ . ๊ธฐ์กด์˜ Vue๋„ Typescript ์‚ฌ์šฉ์„ 100% ์ง€์›ํ•œ๋‹ค๊ณ  ํ•˜๊ณ ์žˆ๊ณ , Nuxt.js์—์„œ๋„ Nuxt-ts๋ผ๋Š” ํ”„๋กœ์ ํŠธ๋กœ ์ง€์›์„ ํ•˜๊ณ  ์žˆ์ง€๋งŒ Nuxt๋‚˜ Vue์— ๋น„ํ•ด์„œ ๊ณต์‹ ๋ฌธ์„œ ๋‚ด์šฉ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋ถ€์กฑํ•œ ๊ฑธ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง€๊ธˆ ๋‹น์žฅ ์‹ค๋ฌด๋กœ Nuxt-ts๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ ํฌ๊ธฐํ–ˆ๋˜ ์ด์œ ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‹ค๋ณด๋‹ˆ ๋ช‡๋ช‡ ๋ฒ„๊ทธ์‚ฌํ•ญ๋„ ์žˆ๋Š”๊ฑธ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณ„์† ๋งํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณดํ†ต SPA ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š”๊ฑธ ํ† ๋Œ€๋กœ ๊ฐ€์ด๋“œ๋ฅผ ํ•˜๊ธฐ๋•Œ๋ฌธ์— ts๋กœ ์‚ฝ์งˆ์„ ํ•œ ๊ธ€๋“ค์„ ๊ฒ€์ƒ‰ํ•˜๋Š”๊ฒŒ ์ข€ ์–ด๋ ต๋”๊ตฐ์š”.. ts ์ž์ฒด๋ฅผ ์•„์ง ์ œ๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ด์„œ ๋” ์–ด๋ ค์›€์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.

 

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

'Vue > ์‚ฝ์งˆ์ผ๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Vue ์‚ฝ์งˆ์ผ๊ธฐ ์˜คํ”ˆ  (0) 2019.10.27
๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2024/04   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
๊ธ€ ๋ณด๊ด€ํ•จ