ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ธฐ ์ํด vue ๊ตฌ์กฐ์ vue router์ ๋ํด ์์๋ด
์๋ค.
Vue 06-2 ์ฐธ์กฐํด์ vue-cli๋ฅผ ์ค์นํ๋์?
๐ต ๊ตฌ์กฐ
ํ๋ก์ ํธ ์์ฑํ๊ธฐ
$vue create my-project
node_modules
npm
์ผ๋ก node.js ํ๊ฒฝ์ ์ฌ๋ฌ ์์กด์ฑ ๋ชจ๋
g
์ต์
์ ์ค ๊ฒฝ์ฐ๋ ์ ์ญ ์์ญ์ ์ค์น๋๊ณ ํด๋น ์ต์
์ ๋นผ๋ฉด ํ๋ก์ ํธ ํด๋ ๋ด๋ถ(local)์ ์์ฑ๋๋ค.
- ์ ๋๋ก git์ผ๋ก ๊ด๋ฆฌํ๋ฉด ์๋๋ ํด๋
public/index.html
- The file
public/index.html
is a template that will be processed with html-webpack-plugin.
- Vue ์ฑ์ ๋ผ๋๊ฐ ๋๋ html ํ์ผ
main.js
์์ $mount('#app')
๋ง์ดํธ์ ๋์์ด ๋๋ DOM Element๊ฐ ์กด์ฌํ๋ค.
- ์ค์ ๋ฐฐํฌ๋ฅผ ํ๊ธฐ ์ํด
npm run build
ํ ๊ฒฐ๊ณผ๋ฌผ์ ์ด html ๋ฌธ์ ํ ์ฅ์ ๋ชจ๋ ๋ฌถ์ด๊ฒ ๋๋ค.
package.json
- ์ผ๋ฐ์ ์ผ๋ก
node_modules
๋ฅผ ๊ณต์ ํ์ง ์๊ธฐ ๋๋ฌธ์ package.json
์ ๋ด์ฉ์ ํ์ฌ์ ๊ฐ๋ฐ ํ๊ฒฝ์์ ๊ทธ๋๋ก ํ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด npm์ ํ์ฉํ๋ฉด ๋๋ค.
$ npm install
- script
- vue์์ ์ฌ์ฉํ ๋ช
๋ น์ด script
- dependencies
- Dev + Production Level์์๊น์ง ํ์ฉ ํ ๋ชจ๋
- ๋ฒ์ ์ ๊ฐ์ด ๋ช
์
- devDependencies
- Development Level์์๋ง ํ์ฉ ํ ๋ชจ๋
package-lock.json
- Describe a single representation of a dependency tree such that teammates, deployments, and continuous integration are guaranteed to install exactly the same dependencies.
node_modules
์ ์ค์น๋๋ ๋ชจ๋๊ณผ ๊ด๋ จํด์ ๋ชจ๋ ์์กด์ฑ์ ์์์ ์ค์ ํ๋ค. โ ์ฝ๊ฒ ๋งํ๋ฉด ์ฌ์ฉ ํ ํจํค์ง์ ๋ฒ์ ์ ๊ณ ์ ํ๋ ๊ฒ์ด๋ค.
npm install
๋ช
๋ น์ด์ ์์ฑ๋๋ค. โ ์ฆ, ๊ทธ ์๊ฐ์ ์ต์ ์ ๋ณด๋ฅผ ๋ฐ์ํ ์์กด์ฑ ๋ชจ๋์ ์ ๊ฒํ๋ ๊ฒ.
- ์ด๋ ๊ฒ ์งง์ ์๊ฐ์ ๋ฐ์ํ ์ ์๋ ํ์
๊ฐ๋ฐ ๊ณผ์ ๊ฐ์ ์์กด์ฑ ํจํค์ง ์ถฉ๋ ๋ฑ์ ํผํ ์ ์๋ค.
babel.config.js
- ๋ฐ๋ฒจ ์ค์ ๊ณผ ๊ด๋ จ๋ ๋ด์ฉ์ด ๋ค์ด๊ฐ๋ ํ์ผ
src/
assets/
- webpack์ ์ํด ๋น๋๋ ์ ์ ํ์ผ
components/
- ํ์ ์ปดํฌ๋ํธ
- ํ์ง๋ง ๋ฐ๋์ ํ์ ์ปดํฌ๋ํธ๋ฅผ ๋ฃ์ด์ผ ํ๋ ๊ฒ์ ์๋๋ค.
App.vue
main.js
- Webpack์ด ๋น๋๋ฅผ ์์ํ ๋ ๊ฐ์ฅ ๋จผ์ ๋ถ๋ฌ์ค๋ ์ง์
์ (Entry Point)
- ์ค์ ๋จ์ผ ํ์ผ์์ DOM๊ณผ Data๋ฅผ ์ฐ๊ฒฐ ํ๋ ๊ฒ๊ณผ ๋์ผํ ์์
์ด ์ด๋ฃจ์ด์ง๋ ํ์ผ
- Vue ์ ์ญ์์ ํ์ฉ ํ ๋ชจ๋์ ๋ฑ๋กํ ์ ์๋ ํ์ผ
url์ ๊ด๋ฆฌํด์ฃผ๋ ๋ฐ ๋์์ ์ค๋ค!
$vue add router
ํ๊ฒฝ์ค์
Vue CLI ํ๊ฒฝ์์๋ ํธํ๊ฒ ๋ช
๋ น์ด ํ์ค๋ง ์
๋ ฅํ๋ฉด ์ค์น ๊ฐ๋ฅ
- ์ค๊ฐ์ commit ์ฌ๋ถ๋ฅผ ๋ฌผ์ด๋ณด๋ ๊ฒ์ ์ ํ์ ์ผ๋ก ์งํํ๋ฉด ๋๊ณ History๋ชจ๋๋ฅผ ๋ฌผ์ด๋ณด๋ ๊ฒ์ ๋ฌด์กฐ๊ฑด Y
- router๋ฅผ ์ค์ ํ๋ฉด ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๊ฐ ๋ฐ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ ์ commit์ ํตํด ์ด์ ๋ฒ์ ์ผ๋ก ๋์๊ฐ ์ ์๋๋ก ์ ๋ํ๋ ๊ฒ
History mode vs Hash mode
- SPA
๋จ์ผ ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์
์ด๋ผ๋ ๊ฒ์ ๋ง ๊ทธ๋๋ก ์๋ต ๋ฐ์ ํ๋์ htmlํ์ผ์์ ์ด๋ํ์ง ์๊ณ JavaScript๋ฅผ ํ์ฉํด ๋ด์ฉ๋ง ๋ณ๊ฒฝํ๋ ๊ฒ์ด๋ค.
์ด ๋ ์ฃผ์๊ฐ ๋ฐ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ ์ค์ ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ด ์๋๋ผ ๋ด์ฉ(์ปดํฌ๋ใ
)๋ง ๋ณ๊ฒฝ๋๊ณ ์๋ ๊ฒ์ด๋ค.
- ์ฃผ์๋ฅผ ๋ฐ๊พธ์ง ์์ผ๋ฉด ๋์ง ์์? โ ์ฌ์ฉ์ ์
์ฅ์์ ์ฃผ์๊ฐ ์ด๋ํ์ง ์๋ ๊ฒ์ ์ด์ํ ์ ์์ด์.
- HTML ๋ด์ฉ์ ๋ณํํ์ง๋ง ๊ฐ์ ํ์ด์ง์ ๋จธ๋ฌด๋ ๊ฒ ๊ฐ์ ๋๋์ด ๋ค๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด๋ฌํ ์ด์ ๋ก URI์ ๋ณํ๋ฅผ ํตํด ๋ง์น ๋ฐ๋๋ ํ๋ฉด์ ๋ง์ถฐ ํ์ด์ง๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ฒ๋ผ ๋ง๋ฆ.
์ด๋ ์ฌ์ฉํ๋ ๋ฐฉ์์ด Hash์ History 2๊ฐ์ง์ด๋ค.
- Hash (#) ๋ชจ๋
- ํน์ ํ ์ฃผ์๋ฅผ ์
๋ ฅํ๊ณ Enter๋ฅผ ์น๋ ํ์๋ Server์๊ฒ ์์ฒญ(GET)์ ๋ณด๋ด๋ ํ์์ด๋ค.
- ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฑด endpoint๋ก ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ด๊ณ ๊ทธ์ ๋ง๋ HTML์ ๋ฐ์์ผํ๋ค. ํ์ง๋ง ์๋ฒ์์ URL์ ๋ง๋ค์ด ๋์ง ์์ผ๋ฉด ์๋ฌด๋ฐ ์๋ฏธ๊ฐ ์๋ค. ์ฆ ,Server๊ฐ URL์ ๋ง๋๋ ์ฃผ์ฒด๊ฐ ๋๋ค.
- Hash ๋ชจ๋๋ ํ๋ ๊ทธ๋จผํธ(#) ๋ค์ ์ค๋ ๋ฌธ์์ด์ ๊ฒฝ๋ก๋ก ์ธ์ํ์ง ์๋ ํน์ง์ ํ์ฉํด ๋ง์น URL์ด ๋ณํํ์ง๋ง ์ค์ ์๋ฒ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ง ์๋ ํํ๋ก ๊ตฌํํ๋ ๊ฒ
- ํ์ง๋ง
#
์ด ์ฃผ์ ์์ ํฌํจ๋ ๊ฑด ์ฌ์ฉ์์๊ฒ ์ด์ํจ์ ์ค ์ ์์ด ์ต๊ทผ ์ ์ฌ์ฉํ์ง ์๋๋ค.
- History ๋ชจ๋
- HTML5 ์คํ์ค ํ๋์ธ history API๋ฅผ ์ฌ์ฉํด์ router๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ค.
History
API์ pushState
๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด API๋ ๋ธ๋ผ์ฐ์ ์ ํ์คํ ๋ฆฌ๋ ๋จ๊ธฐ์ง๋ง ์ค์ ํ์ด์ง๋ ์ด๋ํ์ง ์๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ค!