[ 3. Vue.js ์ค์นํ๊ธฐ ]
์ค์น ์ ํ์ ๋ถ๋ค์ ์ํด ๋จ๊ฒจ๋๊ฒ ์ต๋๋ค
[Spring] (MAC, IntelliJ, vue.js) Spring boot๋ก ํ๋ก์ ํธ ๋ง๋ค๊ณ , vue.js ์ค์น์ ํ๋ก์ ํธ ์ด๊ธฐ.
์ด๋ฒ์ ๋ง๋ค ์น์ฌ์ดํธ๋vue.js๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค๐ 1. ๋ง๋ค๊ณ ์ ํ๋ ๊ฒ์? ํ์๊ฐ์ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค๊ณ ์ ํ๋ค. Vue.js๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก ํธ ๊ณต๋ถ๋ฅผ ํ๋ฉด์, ๊ฐ๋จํ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ ์ํํ๋ ์น
post-this.tistory.com
์ฐธ๊ณ ๋ก Vue.js์ ๋ํด์ ์ ๋ชจ๋ฆ ๋๋ค.
์๋ฌด๊ฑฐ๋ ๋ง ํด๋ณด๋ ์ค์ด๊ณ ์ณ์ ์ ๋ณด์ธ์ง ์ ๋ ๋ชจ๋ฆ ๋๋ค!
๋ผ์ฐํฐ๋ฅผ ์ค์นํ๊ณ
๋ฐฐ๊ฒฝ์์ ๋ฐ๊ฟ๋ณผ ๊ฒ์ด๋ค.
1. ํ๋ก์ ํธ ์์ฑํ๊ธฐ
โก Vue.js ์ ํํ๊ณ , practice01์ด๋ ์ด๋ฆ์ ๋ถ์ฌ์ฃผ๊ธฐ
Vue.js๋ฅผ ์ ํํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ npm์ ์ค์นํ๋ฉด์ ๊ฒฐ๊ตญ Vite ๊ธฐ๋ฐ์ผ๋ก ํ๋ก์ ํธ๊ฐ ๋์ํ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋์ Vite๋ก ๋ง๋ค์ด๋ ๋๊ฐ์ ๊ฒ ๊ฐ๊ธดํ๋ฐ... ์ ๋ชจ๋ฅด๋๊น ์ผ๋จ์ ํจ์คํ๊ฒ ๋ค. (๋ค์์ ํ ๋ฒ ๋์ ํด๋ณด๊ธฐ๋ก!)

โก npm ์ค์นํ๊ธฐ
์ค๋ฅธ์ชฝ ํ๋จ์ 'npm install'์ด ๋ํ๋๋ค. ์ด ์ฐฝ์ ๋ฒํผ์ ๋๋ฌ์ ์ค์นํ๋ฉด ์์์ ์ค์น๋๋ค.
๋ง์ฝ ๋ํ๋์ง ์๋๋ค๋ฉด, ํฐ๋ฏธ๋์ ๊ฐ์ ์ผ์ชฝ์ ์จ์๋ ์ด๋ก ๊ธ์จ๋๋ก ์ํํ๋ฉด ๋๋ค. ํฐ๋ฏธ๋ ๋ชป ์ฐพ๊ฒ ์ผ๋ฉด ์๋ ์ฌ์ง์ ๋ณด์ธ์, ์ฌ๋ฌ๋ทด.
(์บก์ณํด์ ๋ณด์ฌ์ค๋ ค๊ณ practice02๋ก ์๋ก ๋ง๋ค์๋ค)

โก npm run dev
ํฐ๋ฏธ๋์ ๋ค์ด๊ฐ์ 'npm run dev' ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ์ ๋๋ก ์คํ๋๋์ง ํ์ธํ์.
์ ๋๋ก ์คํ์ด ๋๋ค๋ฉด, http://localhost:5173 URL์ด ๋ํ๋๋ค.
์ฐธ๊ณ ๋ก ์ ํ๋๋ฒํผ์ด ํฐ๋ฏธ๋ ๋ฒํผ์ด๋ค.

โก http://localhost:5173

โก ์ธ๋ชจ์๋ ํ์ผ ์ง์๋ฒ๋ฆฌ๊ธฐ
icons ๋๋ ํ ๋ฆฌ ์์ด๊ณ , components์ ๋ค์ด์๋ vueํ์ผ๋ ์์ด๋ค.
๊ทธ๋ฆฌ๊ณ App.vue์ ์ฝ๋๋ ์์ ํ๋ค. assets๋ ๋ฌด์์์ ์๊ฑด๋ค์๋ค.


<script setup>
</script>
<template>
</template>
<style scoped>
</style>
2. ๋ผ์ฐํฐ ์ค์นํ๊ธฐ.
โก npm install vue-router
npm install vue-router๋ฅผ ํฐ๋ฏธ๋์ ์ ์ด ๋ผ์ฐํฐ๋ฅผ ์ค์นํฉ๋๋ค.
์๋ ๋งํฌ ๋ค์ด๊ฐ๋ฉด npm ๋ง๊ณ yarn ์ธ ๋ค์ํ ์ค์น๋ฐฉ๋ฒ์ด ์์ผ๋ ์ฐธ๊ณ ํ์ธ์.

Vue Router | The official Router for Vue.js
The official Router for Vue.js
router.vuejs.org
โก router ๋๋ ํ ๋ฆฌ ๋ง๋ค๊ณ , index.js ํ์ผ ๋ง๋ค๊ธฐ
src ํ์์ ๋๋ ํ ๋ฆฌ router๋ฅผ ๋ง๋ญ๋๋ค. ๊ทธ๋ฆฌ๊ณ router ๋๋ ํ ๋ฆฌ ์์ index.js ํ์ผ์ ๋ง๋ค๋ฉด ๋ฉ๋๋ค.

โก views ๋๋ ํ ๋ฆฌ ๋ง๋ค๊ณ , MainView.vue ํ์ผ ๋ง๋ค๊ธฐ

โก index.js ํ์ผ์ ์ฝ๋ ์์ฑํ๊ธฐ.
import { createRouter, createWebHistory } from 'vue-router'
import MainView from '../views/MainView.vue'
const routes = [
{ path: '/main',
name: 'Main',
component: MainView
},
]
const router = createRouter({
history: createWebHistory(),
routes
})
export default router
http://localhost:5173/main ๊ฒฝ๋ก๋ก ๋ค์ด๊ฐ๋ฉด ํ๋ฉด์ด ๋ณด์ด๋๋ก ์ค๊ณํ ๊ฒ์ด๋ค. /main์ MainView.vue์ ์ฐ๊ฒฐํ๋ค. const ํค์๋๋ ์ฌ์ ์ธ์ด ๋ถ๊ฐ๋ฅํ๋ค. (์๋ฐ๋ก ๋ฐ์ง๋ฉด final ๊ฐ์ ์กด์ฌ์ธ ๊ฒ ๊ฐ์๋ฐ, ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด const๋ ๋ณ์์๋ง ์ฌ์ฉํ๊ณ final์ ๋ณ์ ์ธ์ ํด๋์ค์ ๋ฉ์๋์ ๋ถ์ด๋๊ฒ ๊ฐ๋ฅํ๋ค๋ ์ ์ด๋ค.) ๊ทธ๋ ๊ฒ routes์ const๋ฅผ ๋ถ์ฌ ๋ฃ์ด๋ ์ ๋ณด๋ค์ด ์ธ๋ถ์์ ๋ณ๋๋์ง ์๋๋ก ๋ง๋ ๋ค. ๋งจ ์๋ ์ฝ๋์ export default๊ฐ ์๋๋ฐ export๋ import์ ๋ฐ๋๋ก ๋ณ์, ํจ์, ๊ฐ์ฒด, ํด๋์ค ๋ฑ์ ์ธ๋ถ์ ๋ณด๋ด๋ ์ญํ ์ ํ๋ ๊ฒ์ด๊ณ , default๋ ํ๋์ ํ์ผ์ ๊ฐ์ฒด ํ๋๋ง ์ ์ธ๋์ด์๋ ๋ชจ๋์ ๋ด๋ณด๋ผ๋ ์ฌ์ฉํ๋ค. ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ๊ฐ ์๋ค๋ฉด default๋ ์ฌ์ฉํ์ง ์๊ณ export๋ง ์ ์ผ๋ฉด ๋๋ค.
โก main.js ์ฝ๋ ์์ ํ๊ธฐ
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import './assets/main.css'
const app = createApp(App)
app.use(router)
app.mount('#app')
app.use๋ก router๋ฅผ ์ฐ๊ฒฐํ๊ณ , app.mount๋ฅผ ์์ผฐ๋ค. app.mount('#app')์ Vue ์ ํ๋ฆฌ์ผ์ด์ ์ HTML์ ์๋ id๊ฐ 'app'์ธ ์์์ ์ฝ์ ํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. (๋ด๊ฐ ๋ง๋ ๊ฒ๋ค dom์ ๋ฃ์ด๋ผ ๋ผ๋ ๋ฏ?) ์ฌ๊ธฐ์ Dom์ ์น ํ์ด์ง๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ค๋ฃฐ ์ ์๋ ๊ฐ์ฒด(ํธ๋ฆฌ ๊ตฌ์กฐ)๋ก ๋ง๋ ๊ฒ์ด๋ค.
์๋์ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์.
<!DOCTYPE html> <html> <body> <div id="app"> <h1>Hello!</h1> </div> </body> </html>
DOM์ผ๋ก ๋ฐ๊ฟ๋ณด๊ฒ ๋ค.Document โโ html โโ body โโ div (id="app") โโ h1 ("Hello!")
โก App.vue ์ฝ๋ ์ถ๊ฐํ๊ธฐ
<router-view/> ์ถ๊ฐํ๋ค.
<script setup>
</script>
<template>
<router-view/>
</template>
<style scoped>
</style>
<router-view/>๋ vue-router ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋ฉด์ ์๋์ผ๋ก ์ ๊ณต๋ ์ปดํฌ๋ํธ๋ค. npm install vue-routerํ๋ฉด์ ์๋์ผ๋ก ์ธ ์ ์๋๋ก ๋ด์ฅ๋์๋ค. <router-view/>๋ ํ์ฌ ์ฃผ์์ ๋ฐ๋ผ ํ ํ๋ฆฟ์ด ๋ฐ๋๋๋ก ํ๋ค. /main ๊ฒฝ๋ก๊ฐ ๋ค์ด์ค๋ฉด ์ด ๊ฒฝ๋ก์ ๋ง๋ ํ ํ๋ฆฟ์ด ๋ค์ด๊ฐ๋ ๊ฒ์ด๋ค.
3. ๋ฐฐ๊ฒฝ์ ๋ฐ๊พธ๊ธฐ.
โก MainView.vue
<script>
</script>
<template>
<div class="main-view">
</div>
</template>
<style scoped>
.main-view {
position: relative;
width: 100vw;
height: 100vh;
background-color: lemonchiffon;
}
</style>
template๋ ๋ ์ด์์์ ๊ตฌ์ฑํ๋ฉฐ ํ๋ฉด์ ๋ด๋นํ๋ค. script๋ ๋์์ ๋ด๋นํ๋ค. ์ปดํฌ๋ํธ์ ์ํ์ ํ๋์ ์ ์ํ๋๋ฐ, import์ export๋ ๋ฃ๊ณ ๋ฐ์ดํฐ, ํจ์ ๋ฑ๋ ๋ฃ๋๋ค. <style>์ ๋์์ธ์ ๋ด๋นํ๋ค. scoped๊ฐ ๋ถ์ผ๋ฉด ์ด ํ์ผ์๋ง ์คํ์ผ์ด ์ ์ฉ๋๋ค๋ ๋ป์ด๋ค.
template์ ์ ์ฒดํ๋ฉด์ ๋ด๋นํ main-view๋ฅผ ๋ง๋ค์๋ค. ๊ทธ๋ฆฌ๊ณ style์์ ๋๋น์ ๋์ด๋ฅผ 100vw, 100vh๋ผ๊ณ ํด์คฌ๋ค. ์ฒ์์๋ 100%๋ผ๊ณ ํด์คฌ๋๋ฐ ์ ์ฉ์ด ์๋๋ค. ๋ฌด์จ ์ฐจ์ด๊ฐ ์๋๊ฑธ๊น? vw(vh)๋ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ๋๋น(ํน์ ๋์ด)๋ฅผ 100๋ฑ๋ถ ํ ๊ฒ ์ค ๋ช์นธ์ด๋๋ ๋ป์ด๋ค. ๋ง์ฝ 1vw(vh)๋ผ๊ณ ์ ์์ผ๋ฉด 100๋ถ์ 1๋ก 1%๋ฅผ ์๋ฏธํ๋ค. % ๋จ์๋ ๋ถ๋ชจ ์์์ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ช %์ธ์ง ๋ํ๋ธ๋ค. ๋ถ๋ชจ ์์์ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ค์ ๊ฐ์ด ๋ฌ๋ผ์ง๊ฒ ๋๋ ๊ฒ์ด๋ค. background-color๋ก ๋ฐฐ๊ฒฝ์์ ๋ฐ๊ฟ๋ณด์๋ค.
โก ๊ฒฐ๊ณผ

์๋์ ์ถ์ฒ๋ฅผ ๋จ๊ฒจ๋๊ฒ ์ต๋๋ค.
๋ธ๋ก๊ทธ์ ์ ๊ฐ ์ต๋ํ ์ดํดํ ๋ด์ฉ๊น์ง๋ง ์ ๋๊ฑฐ๋ผ
์ถ์ฒ์ ๋ค์ด๊ฐ์๋ฉด ๋ ๋ง์ ๋ด์ฉ์ด ์์ด ๊ณต๋ถํ์๋๋ฐ ๋์๋์ค๊ฒ๋๋ค.
๐ชฝ
ํ๋ฆฐ ๋ด์ฉ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์
ํ ํ๋ฆฟ ๋ฌธ๋ฒ | Vue.js
v3-docs.vuejs-korea.org
vue-router ์ค์น๋ถํฐ ํ๊ฒฝ์ค์ ๋ฐ ์ฌ์ฉ๋ฐฉ๋ฒ
๋ชฉ์ฐจ1. router ์ค์น2. router ์ค์ 3. router ์์ 1. router ์ค์น (yarn , npm) yarn ์ค์นyarn add vue-router@4 npm ์ค์นnpm install vue-router@4 ์ฐธ๊ณ : https://router.vuejs.org/installation.html 2. router ์ค์ router๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด 3๊ฐ
icea.tistory.com
๋ณ์ ์ด์ ๋ฆฌ 1. var let const์ ์ ์ธ,ํ ๋น,๋ฒ์ - ์ฝ๋ฉ์ ํ ์จ๋ผ์ธ ๊ฐ์ข
0:00 var let const๋ก ๋ณ์๋ง๋ค์ด ์ฐ๋ ๋ฒ 1:30 ์ ์ธ์ด๋ผ๋ ํน์ง 2:48 ํ ๋น์ด๋ผ๋ ํน์ง 4:25 ์ฌํ ๋น ๋ถ๊ฐ๋ฅํ ๋ถ๋ณ์ Object๋ฅผ ๋ง๋ค๋ ค๋ฉด 6:52 ์กด์ฌ๋ฒ์๋ผ๋ ํน์ง 10:10 ๋ณ์๋ ํจ์ ์ ์ธ์ Hoisting ํ์
codingapple.com
[React] Mount, Update, Unmount
[React] Mount, Update, Unmount React ์ปดํฌ๋ํธ์ ๋ผ์ดํ์ฌ์ดํด์ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ(mount)๋ ๋, ์ ๋ฐ์ดํธ(update)๋ ๋, ๊ทธ๋ฆฌ๊ณ ์ธ๋ง์ดํธ(unmount)๋ ๋ ๊ฐ๊ฐ์ ๋จ๊ณ์์ ๋ฐ์ํ๋ ์ผ๋ จ์ ๊ณผ์ ์ ๋
y-chyachya.tistory.com
[JS] export, export default์ ์ฐจ์ด์
0. ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ค๋ณด๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ด๊ฐ ๋ง๋ ๋ชจ๋์ ๋ง๋ค๊ณ ๊ฐ์ ธ์ฌ ๋ import/export ๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ฌด์์์ ์ผ๋ก export, export default ๋ฅผ ๋ฒ๊ฐ์ ๊ฐ๋ฉฐ ์ฌ์ฉํ ๋๊ฐ ์๋ค.
velog.io