1. Vue.js Project ์ƒ์„ฑ

vue create todoapp

๋ฏธ๋ฆฌ Git Clone ์‹œ์ผœ๋†“๊ณ  ๊ทธ ํด๋” ์•ˆ์— Vue.js ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

(Git Clone : GitHub Code ๋ณต์‚ฌ → VSCode์—์„œ Ctrl + Shift + P → Git: Clone → GitHub Code ๋ถ™์—ฌ ๋„ฃ๊ธฐ)

 

 

cd todoapp
npm run serve

ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณด๊ณ  ์‹คํ–‰์ด ์ž˜ ๋œ๋‹ค๋ฉด

Defalut ํŒŒ์ผ src/component/HelloWorld.vue ํŒŒ์ผ์„ ์‚ญ์ œํ•œ๋‹ค.

src/App.vue์— HelloWorld.vue ๊ด€๋ จ ๋‚ด์šฉ์„ ๋‹ค ์ง€์šด๋‹ค. (์•„๋ž˜ ์ฃผ์„ ๋ถ€๋ถ„)

<!-- src/App.vue -->
<template>
  <div id="app">
    <!-- <img alt="Vue logo" src="./assets/logo.png"> -->
    <!-- <HelloWorld msg="Welcome to Your Vue.js App"/> -->
  </div>
</template>

<script>
// import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    // HelloWorld
  }
}
</script>

 

 

2. Components ์ƒ์„ฑ ๋ฐ import (TodoInput, TodoList, TodoItem)

src/components ์•„๋ž˜์— 3๊ฐœ์˜ vue ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ ,

์ผ๋‹จ ํŒŒ์ผ ๋‚ด์šฉ์€ <h3> ํƒœ๊ทธ๋กœ ํŒŒ์ผ๋ช…๋งŒ ์ž‘์„ฑ์„ ํ•ด๋‘”๋‹ค.

 

 

<!-- src/App.vue -->
<template>
  <div id="app">
    <TodoInput/>
    <TodoList/>
  </div>
</template>

<script>
import TodoInput from '@/components/TodoInput';
import TodoList from '@/components/TodoList';

export default {
  name: 'App',
  components: {
    TodoInput,
    TodoList
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

TodoInput๊ณผ TodoList ํŒŒ์ผ์€ App.vue์— import ์‹œ์ผœ์ฃผ๊ณ ,

 

 

<!-- src/components/TodoList.vue -->
<template>
    <div>
        <h3>Todo List</h3>
        <TodoItem/>
        <TodoItem/>
        <TodoItem/>
    </div>
</template>

<script>
import TodoItem from '@/components/TodoItem';

export default {
    components: {
        TodoItem
    }
}
</script>

<style>

</style>

TodoItem์€ TodoList์— import ์‹œ์ผœ์ค€๋‹ค.

์ผ๋‹จ ์˜ˆ์‹œ๋กœ TodoItem์„ 3๊ฐœ ํ‘œ์‹œํ•ด์ค˜ ๋ดค๋‹ค.

 

์ €๋ ‡๊ฒŒ import ์‹œํ‚ค๊ณ  ์‹คํ–‰์„ ํ•˜๋ฉด ์ด๋Ÿฐ ํ™”๋ฉด์ด ์ถœ๋ ฅ๋  ๊ฑฐ๋‹ค.

 

 

3.  Vuetify ์ถ”๊ฐ€ ํ›„ UI ์ˆ˜์ •

์ด์ œ ๊ฐ์ž ํŒŒ์ผ๋ช…์ด ์•„๋‹Œ ์—ญํ• ์„ ์ฃผ๊ธฐ๋กœ ๐Ÿ˜‰

 

 

๋จผ์ € TodoInput.vue ํŒŒ์ผ์— <input>๊ณผ <button>์„ ์ƒ์„ฑํ•œ๋‹ค.

<!-- src/components/TodoInput.vue -->
<template>
    <div>
        <input type="text"/>
        <button>Add</button>
    </div>
</template>
<!-- script, style ๊ทธ๋Œ€๋กœ -->

 

 

TodoList.vue์—๋Š” <h3> ์ œ๋ชฉ ํƒœ๊ทธ๋ฅผ ์ง€์›Œ์ฃผ๊ณ  <TodoItem>๋งŒ ๋‹ด๋Š”๋‹ค.

<!-- src/components/TodoList.vue -->
<template>
    <div>
        <TodoItem/>
        <TodoItem/>
        <TodoItem/>
    </div>
</template>
<!-- script, style ๊ทธ๋Œ€๋กœ -->

 

 

TodoItem.vue์—๋Š” <button> ๋‘ ๊ฐœ์™€ ๊ธฐํƒ€ ๋“ฑ๋“ฑ ์ƒ์„ฑ ๐Ÿ˜‹

<!-- src/components/TodoItem.vue -->
<template>
    <div>
        <h5>#1</h5>
        <h3>Todo Title</h3>
        <button>Edit</button>
        <button>Delete</button>
    </div>
</template>
<!-- script, style ๊ทธ๋Œ€๋กœ -->

 

 

์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๋ฉด ๋œ๋‹ค.

๊ทผ๋ฐ UI๊ฐ€ ๋งˆ์Œ์— ์•ˆ๋“ค์–ด์„œ ์ด์ œ์•ผ Vuetify ์ถ”๊ฐ€... ^^

 

 

Vuetify ์ถ”๊ฐ€ํ•˜๋ฉด์„œ App.vue๊ฐ€ ์•„์˜ˆ ๋ฐ”๋€Œ์–ด๋ฒ„๋ ค์„œ

App.vue์— import ํ–ˆ๋˜ ๊ฑฐ ๋‹ค ์‚ฌ๋ผ์ง!

(vuetify ์ถ”๊ฐ€ํ•  ๊ฑฐ๋ฉด ๋ฏธ๋ฆฌ ํ•˜๊ธฐ ๐Ÿ™„)

 

 

ํŒŒ์ผ๋“ค์„ Vuetify Tag๋กœ ๋ฐ”๊พธ๊ณ  ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ˆ˜์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค ,,, ^^

<!-- src/App.vue -->
<v-main>
  <TodoInput/>
  <TodoList/>
</v-main>
.
.
.
<script>
import TodoInput from '@/components/TodoInput';
import TodoList from '@/components/TodoList';

export default {
  name: 'App',

  components: {
    TodoInput,
    TodoList
  },

  data: () => ({
    //
  }),
};
</script>
<!-- src/components/TodoInput.vue -->
<template>
    <v-container fluid>
        <v-row class="mt-6" justify="center">
            <v-col cols="4">
                <v-text-field outlined></v-text-field>
            </v-col>
            <v-col cols="1">
                <v-btn block x-large color="primary">Add</v-btn>
            </v-col>
        </v-row>
    </v-container>
</template>

<script>
export default {

}
</script>

<style>

</style>
<!-- src/components/TodoList.vue -->
<template>
    <v-container>
        <TodoItem/>
        <TodoItem/>
        <TodoItem/>
    </v-container>
</template>

<script>
import TodoItem from '@/components/TodoItem';

export default {
    components: {
        TodoItem
    }
}
</script>

<style>

</style>
<!-- src/components/TodoItem.vue -->
<template>
    <v-container fluid>
        <v-row class="mb-3 text-center" justify="center">
            <v-col cols="1">
                #1
            </v-col>
            <v-col cols="2">
                Todo Title
            </v-col>
            <v-col cols="1">
                <v-btn block color="primary">Edit</v-btn>
            </v-col>
            <v-col cols="1">
                <v-btn block color="error">Delete</v-btn>
            </v-col>
        </v-row>
    </v-container>
</template>

<script>
export default {

}
</script>

<style>

</style>

 

 

์ €์žฅ ํ›„ ์‹คํ–‰ํ•˜๋ฉด Vuetify Tag๊ฐ€ ์ ์šฉ๋œ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋ฅธ UI ์ž‘์—…์€ ํ•˜์ง€ ์•Š๊ณ , ์˜ˆ์ œ๋ผ ๊ฐ„๋‹จํ•œ Vuetify ์†์„ฑ๋งŒ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

 

๋‹ค์Œ ๊ธ€์€ Vuex ์—ฐ๊ฒฐํ•ด์„œ store ๊ด€๋ฆฌ๊นŒ์ง€ ๐Ÿ˜Š

์ถœ์ฒ˜ : 2021๋…„ GitHub Star ์ˆ˜ (์‚ฌ์ง„ ํด๋ฆญํ•˜๋ฉด ๋งํฌ ์ด๋™!)

React๊ฐ€ 1๋“ฑ์ด์ง€๋งŒ Vue.js๊ฐ€ ๋ฒ„์ „ 2์™€ 3์œผ๋กœ ๋ถ„ํ• ๋œ ๊ฒƒ์„ ๊ณ ๋ คํ•˜๋ฉด Vue.js๊ฐ€ ์‚ฌ์‹ค์ƒ ์„ ๋‘์—…์ฒด๋ผ๊ณ  ํ•œ๋‹ค.

 

 

1. React

React๋Š” ๊ฐ€์žฅ ์ธ๊ธฐ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.

์ธ์ง€๋„ ์ธก๋ฉด ์™ธ์—๋„, ์‚ฌ์‹ค์ƒ ์ฐธ๊ณ  ์ž๋ฃŒ๋ฅผ ์ฐพ๊ฒŒ ๋˜๋ฉด ๊ฐ€์žฅ ๋งŽ์ด ๋ณด์ธ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งŽ์€ ์–‘์˜ ํˆด๊ณผ ํ™•์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์กด์žฌํ•˜๊ธฐ ๋Œ€๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฒ˜์Œ์—” Facebook์—์„œ ์‹œ์ž‘ํ•ด์„œ, ํ˜„์žฌ๊นŒ์ง€ ์œ ์ง€๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋‹ค.

์ด๋Ÿฐ ์ธก๋ฉด์—์„œ React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋‚˜ ๊ธฐ์—…๋“ค์ด React์˜ ์ง€์†์ ์ธ ๋ฐœ์ „์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

JSX์™€ ES6๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, JavaScript์— ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐฐ์šฐ๊ธฐ๊นŒ์ง€ ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ํ• ์• ํ•œ๋‹ค.

๋•Œ๋ฌธ์— ์ง„์ž…์žฅ๋ฒฝ์ด ๋†’์€ ํŽธ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

2. Vue.js

Vue.js๋Š” ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์™€์— ๋น„ํ•ด ๊ฐ€๋ณ๊ณ  ์œ ์—ฐํ•œ ํŽธ์ด๋‹ค.

์ผ๋ถ€ ํ™”๋ฉด ๊ฐœ๋ฐœ๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ, SPA(Single Page Application) ๊ฐœ๋ฐœ๋„ ์ง€์›ํ•œ๋‹ค.

 

Vue.js๋Š” HTML ๋ฐ ES6์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์‹๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋น„๊ต์  ๋งŽ์€ ์‹œ๊ฐ„ ์ ˆ์•ฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฐ„๋‹จํ•œ Vue ํ”„๋กœ์ ํŠธ๋Š” <script> ํƒœ๊ทธ๋กœ ๋“ฑ๋กํ•˜์—ฌ ๋ณ„๋„์˜ ๋ณ€ํ™˜์ž‘์—… ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ 

Vue-router๋ฅผ ์ด์šฉํ•˜์—ฌ SPA๋„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ ์šฉ ๋ฒ”์œ„๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ง„์ž…์žฅ๋ฒฝ์ด ๋‚ฎ๋‹ค๊ณ  ์–˜๊ธฐํ•˜๊ณ  ์žˆ๋‹ค.

 

Vue.js๋Š” React์™€ Angular์™€ ๋‹ฌ๋ฆฌ 1๋ช…์˜ ๊ฐœ๋ฐœ์ž Evan You์— ์˜ํ•ด์„œ ์ œ์ž‘๋˜์—ˆ๋‹ค.

์•„์ง React, Angular์™€ ๋น„๊ตํ•  ๋•Œ ๊ฝค ์ž‘์€ ์‹œ์žฅ ์ ์œ ์œจ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

 

3. Angular

Angular๋Š” MVVM ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋“ค์ด ๋งŽ๊ณ ,

JavaScript์˜ ์ƒ์œ„ ์–ธ์–ด์ธ TypeScript๋“ฑ ์•Œ์•„์•ผํ•  ๊ธฐ์ˆ ์ด ๋งŽ์œผ๋ฉฐ,

API๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. Angular๋Š” ๊ตฌ๊ธ€์—์„œ ์ง€์›ํ•ด์ฃผ๊ณ  ์žˆ๋‹ค.

 

 

4. ์ •๋ฆฌ

  React Vue.js Angular
์–ธ์–ด JSX ES6 TypeScript
Virtual DOM O O X
์žฅ์  ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง์— ์šฉ์ด, Facebook์˜ ์ง€์›, ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ ๋‚ฎ์€ ์ง„์ž…์žฅ๋ฒฝ, Angular2์™€ React์˜ ์žฅ์  ์ ์šฉ ๊ตฌ์กฐํ™”๊ฐ€ ์ž˜ ๋˜์–ด์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด, ๊ตฌ๊ธ€์˜ ์ง€์›
๋‹จ์  ํ•„์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งŽ์Œ, JSX ํ•œ๊ณณ์— ๋กœ์ง ๊ตฌํ˜„ ์ƒ๋Œ€์ ์œผ๋กœ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์ ์Œ ๋†’์€ ๋Ÿฌ๋‹์ปค๋ธŒ
์ ํ•ฉํ•œ ํ™˜๊ฒฝ ๋งŽ์€ ์ด๋ฒคํŠธ ์‚ฌ์šฉ ๋น ๋ฅธ ๊ฐœ๋ฐœ์†๋„๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๋งŽ์€ ๊ต์œก์ด ์–ด๋ ค์šธ๋•Œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ

1. Vue ์„ค์น˜

npm install -g @vue/cli

์œ„ ๋ช…๋ น์–ด๋กœ vue ์„ค์น˜๋˜์–ด ์žˆ๋Š” ์ƒํƒœ์—์„œ Vuetify ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ!

 

 

2. Vuetify ์ถ”๊ฐ€

npm install vuetify

node_modules ๋ฐ‘์— vuetify๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

์ด์ œ vue์— ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

 

3. Vuetify ์‚ฌ์šฉ ์„ค์ •

vue add vuetify

src/main.js ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„

 

 

src/plugins/vuetify.js ํŒŒ์ผ ์ƒ์„ฑ

 

 

ํ‹ˆํ‹ˆ์ด Vue ๊ด€๋ จ ๊ธ€๋„ ์˜ฌ๋ ค์•ผ์ง€ ๐Ÿคฉ

์ข€๋น„์ฒ˜๋Ÿผ ์‚ด์•„์žˆ๋Š” 8080 Port๋ฅผ cmd์ฐฝ์—์„œ kill ์‹œ์ผœ๋ฒ„๋ฆฌ์ž ๐Ÿคข

 

 


 

 

1. ํŠน์ • Port (ex. 8080) ์กฐํšŒํ•˜๊ธฐ

netstat -ao | findstr 8080

findstr์„ ์•ˆํ•˜๊ณ  ์กฐํšŒํ•˜๋ฉด ๋„ˆ๋ฌด ๋งŽ์€ ์–‘์ด ๋‚˜์™€์„œ 8080๋งŒ ์กฐํšŒํ–ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•„์š”ํ•œ๊ฑด 8080 PID 23744์ด๊ธฐ ๋•Œ๋ฌธ์— ๐Ÿ˜

- ์ฐธ๊ณ  : ๋กœ์ปฌ ๊ธฐ์ค€์ด๋ฏ€๋กœ PID ๊ฐ’์€ ์œ ๋™์ ์œผ๋กœ ๋ณ€ํ•œ๋‹ค !

 

 

2. ์กฐํšŒ๋œ Port Kill

taskkill /f /pid 23744

์‘ ์ž˜๊ฐ€ ๋‹ค์‹œ๋Š” ์˜ค์ง€๋งˆ ๐Ÿฃ

Eclipse์—์„œ SVN ์‚ฌ์šฉ ์ค‘ Commit์ด ์•ˆ ๋˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ฒจ์„œ ํ•ด๊ฒฐ ํ›„ ์ ๋Š” ๊ธฐ๋ก

 

์‚ฌ์‹ค ๊ฐ„๋‹จํ•ด์„œ ์ฐพ์•„๋ณด๋Š”๋ฐ ์‹œ๊ฐ„์„ ํˆฌ์žํ•œ ๊ฑด ์•„๋‹ˆ์ง€๋งŒ

์•ž์œผ๋กœ ์ด๊ฒƒ์ €๊ฒƒ ์—ด์‹ฌํžˆ ๊ธฐ๋กํ•˜๋ ค๊ณ  ์‹œ์ž‘ํ•ด๋ด„ ๐Ÿ˜œ

 

 


 

 

1. ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€

 Item is out of date
svn: While preparing 'C:\...' for commit
svn: File '/branch/...' is out of date

    Working copy is not up-to-date
svn: Commit failed (details follow):
svn: File 'C:\...' is out of date
Item is out of date
svn: While preparing 'C:\...' for commit
svn: File '/branch/...' is out of date

 

 

2. ์›์ธ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŒŒ์ผ์˜ ์ •๋ณด๊ฐ€ ๋„ˆ๋ฌด ์˜ค๋ž˜๋˜์–ด์„œ ๋œจ๋Š” ์˜ค๋ฅ˜๋ผ๊ณ  ํ•œ๋‹ค.

 

 

3. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

ํ—ค๋” ์ •๋ณด๋ฅผ ์ตœ์‹ ํ™”ํ•œ ํ›„ ๋‹ค์‹œ ์ปค๋ฐ‹ํ•˜๊ธฐ ๐Ÿ˜Š

 

 

ํ”„๋กœ์ ํŠธ ์šฐํด๋ฆญ → Team → Update to HEAD → Commit

'Errors' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Vue] Use object destructuring (lint error)  (0) 2025.02.18

+ Recent posts