์น ๊ฐ๋ฐ 4์ฃผ ์ฐจ์ ๋ฐฐ์ด ๋ด์ฉ
Firebase
4์ฃผ์ฐจ์๋ Firebase๋ผ๋ ๊ตฌ๊ธ(Google)์ด ๊ฐ๋ฐํ ๋ชจ๋ฐ์ผ ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ํ๋ซํผ์ ๋ํด์ ๋ฐฐ์ ๋ค!๐
Firebase๋ ๊ฐ๋ฐ์๋ค์ด ๋ฐฑ์๋ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๊ฑฐ๋ ๊ด๋ฆฌํ๋ ๋ณต์กํ ์์
์์ด ํต์ฌ ๊ธฐ๋ฅ์ ์ง์คํ ์ ์๋๋ก ๋์์ค๋ค.
์ฐ์ Firebase ์ฌ์ดํธ์ ์ ์ํด์ ๋ก๊ทธ์ธ์ ํด์ฃผ์๋ค.
๊ตฌ๊ธ(Google) ๋ก๊ทธ์ธ์ ์๋ฃํ ํ ์ฝ์๋ก ์ด๋ํ๊ณ ํ๋ก์ ํธ(Sparta)๋ฅผ ๋ง๋ค์ด์ฃผ์๋ค!!
ํ๋ก์ ํธ๊ฐ ์์ฑ๋๊ณ ๋์๋ ์น์ผ๋ก ์ ํํ์ฌ ์งํํ์๊ณ ์ฑ ๋๋ค์์ spartaProject๋ฅผ ์ ๊ณ ์ฑ ๋ฑ๋ก์ ์คํํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค
Firebase๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋จผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ๋ ์ ์ตํ๋ ์๊ฐ์ ๊ฐ์ก๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค : ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฌ๋ฌ ์ฌ๋๋ค์ด ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ์ ๋ชจ์
์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฐพ๊ธฐ ์ํด์ ์กด์ฌํ๋ ๊ฒ์ด๋ค!!
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ณด๋ฅผ ์ฝ๊ฒ ์ฐพ๊ณ ์
๋ฐ์ดํธํ ์ ์๊ณ , ๋ง์ ์์ ์ ๋ณด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
์ด๋ฐ ์ด์ ๋ก ๋ง์ ์กฐ์ง๊ณผ ๊ธฐ์
๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค!
๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ธฐ ์ํด SQL ์ธ์ด๋ฅผ ๋ฐฐ์ฐ๊ณ , SQL์ ํตํด ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ์ ์๊ฒ ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํฌ๊ฒ ๋ ๊ฐ์ง ์ข ๋ฅ๋ก ๋๋ ์ง๋๋ฐ,
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(SQL) ๊ณผ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(NoSQL)์ด ์๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ๋ฆฌ๋ ์ ๋ณด๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ํ, ๋๊ธฐ์
๋ฑ์์ ์ฌ์ฉํ๋ค.
๋ฐ๋ฉด ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ณต์กํ๊ฑฐ๋ ์ ์ฐํ ์ ๋ณด๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉํด์ ๋ง์ ๋ณํ๊ฐ ์์๋๋ ์คํํธ์
์์ ์ฌ์ฉํ๋ค.
๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ์ ๋ค๋ฅธ ์ฉ๋์ ์ฅ๋จ์ ์ ๊ฐ์ง๊ณ ์๋ค.
๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ์๊ตฌ ์ฌํญ์ ๋ง์ถฐ์ ์ ์ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ํ์ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋คโญโญ
๊ทธ๋ ๋ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค์ฒด๋ ๋ฌด์์ผ๊น? ํน๋ณํ ์ปดํจํฐ์ผ๊น??
๊ทธ๋ ์ง ์๋ค... ์์ฃผ ๊ฐ๋จํ๊ฒ ๋งํ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ๊ณผ ๊ฐ์ ๊ฒ์ด๋ค!
๋ด ์ปดํจํฐ์ ๊ฒ์๋ ์ค์นํ๊ณ , PPT๋ ์ค์นํ๊ณ , DB๋ ์ค์นํ ์ ์๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์์๋ Cloud ํํ๋ก ์ ๊ณตํด์ฃผ๋ ๊ณณ๋ค์ด ๋ง์ด ์๊ฒจ๋ฌ๋ค!!
์ ์ ๊ฐ ๋ชฐ๋ฆฌ๊ฑฐ๋, DB๋ฅผ ๋ฐฑ์
ํด์ผ ํ๊ฑฐ๋, ๋ชจ๋ํฐํฌ ํ๊ธฐ๊ฐ ์์ฃผ ์ฉ์ดํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ์ง๊ธ๋ถํฐ ์ต์ ํด๋ผ์ฐ๋ ์๋น์ค์ธ Firestore Database๋ฅผ ์ฌ์ฉํด์ ์ ์ ์งํํ ํ๋ก์ ํธ๋ฅผ ์
๊ทธ๋ ์ด๋ ์ํฌ ๊ฒ์ด๋ค๐๐
Firestore Database
Firestore : ๊ตฌ๊ธ(Google)์ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค
๊ฐ๋จํ ๋งํ์๋ฉด, Firestore๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋น์ค๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
Firestore๋ ์ปค๋ค๋ ์ฐฝ๊ณ ์ด๊ณ , ์ฐฝ๊ณ ์์๋ ๋ง์ ์๋์ฅ๋ค์ด ์๊ณ , ๊ฐ๊ฐ์ ์๋์ฅ์๋ ๋ค์ํ ์ข
๋ฅ์ ๋ฌธ์๋ค์ด ๋ค์ด์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค!
- ์ปฌ๋ ์ (Collection) : ์๋์ฅ ๊ทธ๋ฃน์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์๋ค์ด ํน์ ํ ์ฃผ์ ๋๋ ์ ํ์ผ๋ก ๊ทธ๋ฃนํ๋์ด ์๋ค. ์๋ฅผ ๋ค์ด "albums"๋ผ๋ ์ปฌ๋ ์ ์์๋ ๋ฌธ์๋ค์ด ์ ์ฅ๋ ์ ์๋ค.
- ๋ฌธ์(Document) : ์๋์ฅ ์์ ๋ค์ด์๋ ์์ ์ข ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ํ๋์ ์ข ์ด๋ ์ฌ๋ฌ ๊ฐ์ ํ๋(Field)๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ํ๋๋ ์ข ์ด์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ธ๋ค.
- ํ๋(Field) : ๋ฌธ์ ์์ ์๋ ๋ฐ์ดํฐ์ ์์ ๋ถ๋ถ์ด๋ค. ๊ฐ ํ๋๋ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ๋ฌธ์์ ํ๋๋ก๋ "๋ด์ฉ", "๋ ์ง", "์ด๋ฏธ์ง์ฃผ์", "์ ๋ชฉ" ๋ฑ์ด ์์ ์ ์๋ค.
Firestore ๊ท์น ์์ ํ๊ธฐ
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
Firestore ์ธํ ํ๊ธฐ
// Firebase SDK ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ธ์ค๊ธฐ
import { initializeApp } from "https://www.gstatic.com/firebasejs/9.22.0/firebase-app.js";
import { getFirestore } from "https://www.gstatic.com/firebasejs/9.22.0/firebase-firestore.js";
import { collection, addDoc } from "https://www.gstatic.com/firebasejs/9.22.0/firebase-firestore.js";
import { getDocs } from "https://www.gstatic.com/firebasejs/9.22.0/firebase-firestore.js";
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
apiKey: "",
authDomain: "",
projectId: "",
storageBucket: "",
messagingSenderId: "",
appId: "",
measurementId: ""
};
// Firebase ์ธ์คํด์ค ์ด๊ธฐํ
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);
Firebase์ ์ฐ๋ํ๊ธฐ ์ํด script ํ๊ทธ์ type="module"๋ก ๋ฐ๊พธ๋ฉด์ ์ ์ ์์ฑํ๋ onclick(), makeCard()์ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ด ์๋๋์ง ์์ ๋ชจ๋ ๊ณ ์ณ์ฃผ์ด์ผ ํ๋ค....๐ฅฒ
Firestore Database์ ๋ฐ์ดํฐ ๋ฃ๊ธฐ - addDoc
$("#postingbtn").click(async function () {
let image = $('#image').val(); //์์ ์๋ image value ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
let title = $('#title').val();
let content = $('#content').val();
let date = $('#date').val();
let doc = {
'image': image,
'title': title,
'content': content,
'date': date
};
await addDoc(collection(db, "albums"), doc);
alert('์ ์ฅ ์๋ฃ!');
window.location.reload();
})
PostBox์ ์ ๋ ฅํ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฃ๋ ์์ ์ ์งํํ๋ค!
- alert() ์ฝ๋๋ฅผ ํตํด ์๋ฆผ ๋ด์ฉ์ ์ถ๊ฐํ๋ค.
- window.location.reload(); ์ฝ๋๋ฅผ ํตํด ํ๋ฉด์ ์๋ก๊ณ ์นจํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค.
Firestore Database์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ - getDocs
let docs = await getDocs(collection(db, "albums"));
docs.forEach((doc) => {
let row = doc.data();
let image = row['image'];
let title = row['title'];
let content = row['content'];
let date = row['date'];
let temp_html = `
<div class="col">
<div class="card h-100">
<img src="${image}"
class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">${title}</h5>
<p class="card-text">${content}</p>
</div>
<div class="card-footer">
<small class="text-body-secondary">${date}</small>
</div>
</div>
</div>`;
$('#card').append(temp_html);
});
Firestore Database์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ๋ณ์์ ๊ฐ๊ฐ ๋ด์์ฃผ๊ณ makeCard() ํจ์์ ์๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ์์ ์ฝ๊ฒ ์์ฑํ ์ ์์๋ค.
Postbox ์ด๊ณ ๋ซ๋ ๊ธฐ๋ฅ, ๋ฏธ์ธ๋จผ์ ๋๋ ๋ํ๋ด๋ ๊ธฐ๋ฅ ์์ ํ๊ธฐ
์์ฑํ๋ ์ฝ๋๋ฅผ ๊ณ ์น๋ค๊ณ ํด์ ๊ฒ๋จน์์ง๋ง ์์ฑ๋์ด์๋ ์ฝ๋์์ ํฌ๊ฒ ๋ฐ๋๋ ์ ์ด ์์ด์ ์์ฌ์ด ๋์๋ค.
$("#savebtn").click(async function () {
$('#postingbox').toggle(); //display ๊ฐ์ด none์ผ๋ก ๋ฐ๋๋ฉด์ ์๋ณด์ด๊ฒ ๋๋ ์๋ฆฌ์ด๋ค.
})
let url = "http://spartacodingclub.shop/sparta_api/seoulair";
fetch(url).then(res => res.json()).then(data => {
let mise = data['RealtimeCityAir']['row'][0]['IDEX_NM'];
//console.log(mise); //mise ์ถ๋ ฅํ๊ธฐ! - ์ข์๋ง ์ถ๋ ฅ๋๋ค.
$('#msg').text(mise); //span ํ๊ทธ ์์ '๋์จ'์ด๋ผ๋ ๋จ์ด๋ฅผ mise ๊ฐ์ผ๋ก ๋ณ๊ฒฝํด์ค๋ค. ํ์ํ ๊ณณ์ ํ
์คํธ๋ฅผ ๊ฐ์๋ผ์ ๋ค.
})
์น ๊ฐ๋ฐ ์ข ํฉ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด์ ๋๋ ์ ๐คจ๐คจ
Firestore Database์ ์ฐ๋ํด์ ์ง์ ์ ๋ ฅํ ๋ด์ฉ๋ค์ด ์๋ก๊ณ ์นจ์๋ ์์ด์ง์ง ์๊ณ ๊ณ์ ์ ์ง๋๋ ๊ฒ์ ๋ณด๊ณ , ํ๋ก ํธ์๋์ ๋ฐฑ์๋์ ํฉ๋์ผ๋ก ํ์ด์ง๊ฐ ๋ ์๋ฒฝํด์ง์ ๋๋ ์ ์์๋ค ๐ฎ๐ฎ
+ ์ค๋ ์คํํ ๊ณํ
- SQL, ์๋ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๊ฐ๊ฐ 2๋ฌธ์ ์ฉ ํ์ด!
- ์์ง ํ๋ก๊ทธ๋๋จธ์ค๊ฐ ์ต์์น ์์์ ์ธ์ด ์ ํ์ด ์๋ ์ค ๋ชจ๋ฅด๊ณ C ์ธ์ด ์ ์ถ๋์ Java ์ธ์ด๋ก ์์ฑ ํ ๊ณ์ ์คํจ๋๋ ๊ฒ์ ๋ณด๋ฉฐ ์ ๋งํ๊ณ ์์๋ค... ์ฝ๋์ ์ค๋ฅ๋ ์๋๋ฐ ๊ณ์ ์คํจ๋๋ ๊ฒ์ ๋ณด๋ฉด์ ํ๋ก๊ทธ๋๋จธ ํ์ด์ง๋ฅผ ์ดํด๋ณด๋ค๊ฐ ์ธ์ด๋ฅผ ๋ฐ๊ฟ ์ ์๋ ๊ฒ์ ํ์ธํ๊ณ ๋ฌด์ฌํ ๋๊ด์ ํด๊ฒฐํ ์ ์์๋ค........๐ฅฒ๐ฅฒ๐ฅฒ๐ฅฒ
- ์๋ฐ ๋ ๋ฒ์งธ ๋ฌธ์ ๊ฐ ์๋ฐ ๋ฐฐ์ด์ ์ด์ฉํ ๋ฌธ์ ์๋๋ฐ, ์์ง ์๋ฐ ๋ฐฐ์ด์ ๋ํ ๊ฐ์๋ฅผ ๋ฃ์ง ๋ชปํด์ ๋นํฉํ๋ค. ํ์ง๋ง ๊ตฌ๊ธ๋ง์ ํตํด ์๋ฐ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ(length)์ ์ ์ ์์๊ณ ๋ฐฉ๋ฒ์ ํตํด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์์๋ค.
class Solution {
public double solution(int[] arr) {
double answer = 0;
double sum = 0;
for (int i = 0; i < arr.length; i++) {
sum = sum + arr[i];
}
answer = sum / arr.length;
return answer;
}
}
- ์น ๊ฐ๋ฐ ์ข
ํฉ 4์ฃผ์ฐจ ๊ฐ์ ์๊ฐ
- ๋ํ๊ต ์กธ์ ์ํ ๋ง๋ค ๋ Firebase๋ฅผ ํ์ฉํด์ ํ์ด์ง๋ฅผ ๋ง๋ค์๋ ๊ฒฝํ์ด ์์ด์ ๊ฐ์ ๋ด์ฉ์ด ์ข ๋ ์ฝ๊ฒ ์ดํด๋๋ ๊ฒ ๊ฐ๋ค๐
'Today I Learned(TIL) > ์คํ๋ฅดํ ๋ด์ผ๋ฐฐ์์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
4์กฐ S.A (7) | 2024.11.04 |
---|---|
์น ๊ฐ๋ฐ ์ข ํฉ_5์ฃผ์ฐจ (5) | 2024.11.01 |
์น ๊ฐ๋ฐ ์ข ํฉ_3์ฃผ์ฐจ (3) | 2024.10.30 |
์น ๊ฐ๋ฐ ์ข ํฉ_2์ฃผ์ฐจ (5) | 2024.10.29 |
Spring ์ฌ์ ์บ ํ ํ์คํธ_๋ฐ๋ณต๋ฌธ ์ฐ์ตํ๊ธฐ (0) | 2024.10.29 |