๊ฐ๋จํ ์ฑ ์ ๋ณด์ ๋ฆฌ๋ทฐ๋ฅผ ๋ฑ๋กํ๋ ์น์ฑ์ Vue์ Element UI ํ๋ ์์ํฌ, ๊ทธ๋ฆฌ๊ณ Firebase๋ฅผ ์ด์ฉํด ๋ง๋ค๊ณ ์๋ค.
์ด๊ณณ์ ์ฐธ๊ณ ํ ์ ์๋ค. ์์ฑํ๊ณ ์ ํ๋ ํด๋ ๊ฒฝ๋ก์์ node prompt๋ฅผ ์ด๊ณ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ค.
vue create [vue-project-name]
Vue CLI v4.x ๋ถํฐ๋ almost-full ์ต์ ์ด ์๊ธด ๋ชจ์์ด๋ค. ์ด๋ฒ์ ํ๋ฉด์ ์ฒ์ ๋ดค๋ค. ์์ฝ๊ฒ ํ์ํ ๊ธฐ๋ฅ๋ค์ด ๋ค ์์ด์, ํด๋น ์ต์ ์ผ๋ก ์งํํ๋ค.
๊ทธ๋ฆฌ๊ณ element UI ํ๋ ์์ํฌ๋ฅผ ์ฐ๊ธฐ ์ํด ์๋ ๋ช ๋ น์ด๋ฅผ ์จ์คฌ๋ค. ๋ฌธ์๋ ์ด๊ณณ
npm i element-ui -S
๊ทธ๋ฌ๋ค๊ฐ ์ผ ํ๋ฉด์ ๊ธฐ๋ณธ ํ ํ๋ฆฟ์ผ๋ก ์ผ๋ vue-admin-template์ ์ด์ฉํ๋ ค๊ณ ํด๋น ํ๋ก์ ํธ๋ ์ง์ฐ๊ณ , ์ด๊ณณ์์ git clone์ ํด์๋ค.
# clone the project
git clone https://github.com/PanJiaChen/vue-admin-template.git
# enter the project directory
cd vue-admin-template
# install dependency
npm install
# develop
npm run dev
์๋ฒ๋ฅผ ์คํ์ํค๋ฉด ์ด ๋ฐ๋ชจ ๋ฒ์ ๋ณด๋ค ๋ ๋ค์ํ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๊ธฐ๋ณธ ํ ํ๋ฆฟ์ ์ ๊ณต ๋ฐ๋๋ค. ํ์ํ ๊ธฐ๋ฅ๋ง ์ด๋ฆฌ๊ณ ์ฐ์ง ์๋ ๊ฒ์ ์ผ๋จ ์ง์๋์๋ค.
git repo๋ฅผ ์๋ก ์์ฑํ๊ณ , ๊ธฐ์กด git์ ์ด๊ธฐํํ ๋ค์ repo์ ์ฌ๋ ค๋ ํ, ๋ฆฌ์คํธ & ํ์ผ ์ ๋ก๋๋ฅผ ์ํ ํ๋ฉด์ ๋๊ฐ ๋ง๋ค์ด๋ ๋ค์, firebase์ ํ๋ก์ ํธ๋ฅผ ํ๋ ์์ฑํ๋ค.
firebase.google.com/docs?authuser=0 ์ฌ๊ธฐ์ ์ฐ์ธก ์๋จ '์ฝ์๋ก ์ด๋'ํ๋ฉด ์๋ ๊ฐ์ ํ๋ฉด์ด ๋ฌ๋ค. ํ๋ก์ ํธ ์ถ๊ฐ๋ฅผ ํตํด vue-library-project๋ฅผ ์์ฑํ ์ํ. ํ๋ซํผ์ ์น์ผ๋ก ์ ํํ๋ค.
Nomad Coders์ ํธ์ํฐ ํด๋ก ๊ฐ์์ firebase ๋ถ๋ถ๋ง ์ฐธ๊ณ ํ๋ค. ๋ฆฌ์กํธ ๊ธฐ๋ฐ์ผ๋ก ์งํํ์ง๋ง, vue์ ํฌ๊ฒ ๋ค๋ฅผ ๊ฒ ์์ด์ ๋์์ ๋ง์ด ๋ฐ์๋ค. Auth ๋ถ๋ถ์ ์ฐ์ ๋๊ธฐ๊ณ ํ์ผ ์ ๋ก๋๋ฅผ ์ํด Cloud Firestore & Storage๋ง ์ฐ์ ๊ฑด๋๋ ค๋ดค๋ค.
๊ฐ์ฅ ์ฒ์ firebase๋ฅผ ์ฑ์ ๋ฑ๋กํ๊ธฐ ์ํด์๋
ํ๋ก์ ํธ ๊ฐ์ > ํฑ๋๋ฐํด ์ค์ ์์ด์ฝ > ํ๋ก์ ํธ ์ค์ ์ผ๋ก ๋ค์ด๊ฐ๋ค. ๋งจ ์๋ Firebase SDK snippet์ด ์๋๋ฐ, CDN ๋ฐฉ์์ผ๋ก ์งํํ์ง ์์ ๊ฒ์ด๋ผ ๋ฌธ์์ ๋์จ๋๋ก
npm install --save firebase
// ๋๋
yarn add firebase
npm ํจํค์ง๋ฅผ ์ค์นํด package.json์ ์ ์ฅํ๋ค.
์ ์ ์ฅ์ด ๋์์ผ๋ฉด, App.vue๊ฐ ์๋ ํ๋ก์ ํธ ๋ฃจํธ ๊ฒฝ๋ก์ firebase.js ํ์ผ์ ํ๋ ์์ฑํด์ฃผ๊ณ , ์๋์ฒ๋ผ import ์์ผ์ค๋ค. firestore์ storage ๋ถ๋ถ์ ์ด๋ ์ ๋ ์งํํ ํ ์ถ๊ฐํ ๊ฒ์ด๋ฏ๋ก ์ฒ์์๋ import firebase from 'firebase/app'๋ง ์์ด๋ ๋๋ค.
config ๊ฐ์ฒด์ ๋ด์ฉ์ ์๊น์ firebase SDK snippet ์์ ๊ธ์ด์ค๋ฉด ๋๋ค. git์ ์ฌ๋ฆฌ๊ธฐ ์ํด .env์ ๋ฐ๋ก ํค๋ค์ ๋ด๊ณ ์๋์๋ VUE_APP์ผ๋ก ์์ํ๋ ์์๋ก ๋์ฒดํ๋ค.
firebase.initializeApp(firebaseConfig)๋ฅผ ํตํด firebase๋ฅผ ์ด๊ธฐํํด์ฃผ๊ณ , ํ์ํ ํ์ด์ด๋ฒ ์ด์ค ์ธ์คํด์ค๋ฅผ export ํด์ค๋ค. ๋งจ ์๋ ๋ ์ค์ ํ์ firestore์ storage๋ฅผ ๋ฑ๋กํ๊ณ ์งํํ ํ์ฌ์ ์์ง๋ง ์ฒ์์๋ 19๋ฒ์งธ ์ค๋ก ๋๋ ๊ฒ์ด๋ค.
๊ฐ๋จํ form ํํ๋ฅผ ์์ฑํ bookDetail.vue ๋ผ๋ ํ์ผ์ ์ค๋นํ๋ค. ์ฑ ์ปค๋ฒ ์ด๋ฏธ์ง์ ๋์ ๊ด๋ จ ์ ๋ณด๋ฅผ ์ง์ ์์ฑํด์ ์ ๋ก๋ํ ์ ์๋ form์ด๊ธฐ ๋๋ฌธ์ ์ด ์ ๋ณด๋ฅผ ๋ชจ์๋ DB๊ฐ ํ์ํ๋ค. Firebase > Cloud Firestore์ ๋ค์ด๊ฐ๋ฉด ์ปฌ๋ ์ / ๋คํ๋จผํธ๋ผ๋ ์์คํ ์ด ์๋๋ฐ, bookDetail ์ด๋ผ๋ ์ปฌ๋ ์ ์ form์ ์ ์ฅํ ๊ฐ์ฒด๋ฅผ ๋ด์ '๋คํ๋จผํธ'๊ฐ ๋ค์ด๊ฐ๋ค.
๋ค์ bookDetail.vue ์ script ๋ก ์์,
import { dbService, storageService } from '@/firebase'
dbService๋ฅผ ๋ฑ๋กํด์ค๋ค.
element UI ๋ฅผ ์ด์ฉํด ๊ฐ๋จํ form ํํ๋ฅผ ๋ง๋ค์ด์ค๋ค. ์์ง ํ์ผ ์ ๋ก๋ ๊ธฐ๋ฅ์ ์๋ ์ํ.
<el-form ref="form" :model="params" label-width="150px" label-position="left" size="mini" @submit="onSubmit">
<h3>• ์ฑ
์ ๋ณด</h3>
<div class="form-bg">
<section>
<el-form-item label="๋์๋ช
">
<el-input v-model="params.bookNm" size="small" />
</el-form-item>
<el-form-item label="์ ์">
<el-input v-model="params.author" size="small" />
</el-form-item>
<el-form-item label="์ถํ์ฌ">
<el-input v-model="params.publisher" size="small" />
</el-form-item>
</section>
</div>
<el-row type="flex" class="form-btn">
<el-button type="info" @click="handleCancel">์ทจ์</el-button>
<el-button type="primary" @click="onSubmit">๋ฑ๋ก</el-button>
</el-row>
</el-form>
import { dbService, storageService } from '@/firebase'
export default {
name: 'BookDetail', // router/index.js ์ ๋ฑ๋กํ name๊ณผ ๋์ผํ๊ฒ
data() {
return {
list: {}, // object์ ์ฃผ์
params: {
bookName: '',
author: '',
publisher: ''
}
}
},
mounted() {
// ์ถํ์ ์์ธ ์ฑ
์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ฌ ๋ ์ฝ๋๋ฅผ ์ธ ๋ถ๋ถ
},
methods: {
async onSubmit() {
event.preventDefault()
await dbService.collection('bookDetail').add(this.params)
}
}
}
์คํฌ๋ฆฝํธ ๋ถ๋ถ์ ์์ ๊ฐ์๋ฐ, dbService์ ์๊น ์ธ๊ธํ collection์ด๋ผ๋ ๋๋ถ๋ฅ ํด๋(?) ๊ฐ์ ๊ฐ๋ ์ 'bookDetail'์ด๋ผ๋ ์ด๋ฆ์ผ๋ก params ๊ฐ๋ค์ ์ ์ฅํ๋ค.
์ด๋ฐ ์์ผ๋ก ์ ์ฅ์ด ๋์ด ๋ค์ด๊ฐ๋ค.
'๐ฉโ๐ป > Firebase' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[firebase] updateProfile is not a function Issue (0) | 2021.03.14 |
---|---|
[firebase] Vue.js + Element UI + Firebase : firestore์์ sub-collection๋ก ๋ฐ์ดํฐ ๊ณ์ธตํํ๊ธฐ (0) | 2020.12.31 |