๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Today I Learned(TIL)/์ŠคํŒŒ๋ฅดํƒ€ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

์›น ๊ฐœ๋ฐœ ์ข…ํ•ฉ_4์ฃผ์ฐจ

by carrot0911 2024. 10. 31.

์›น ๊ฐœ๋ฐœ 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๋ฅผ ํ™œ์šฉํ•ด์„œ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋˜ ๊ฒฝํ—˜์ด ์žˆ์–ด์„œ ๊ฐ•์˜ ๋‚ด์šฉ์ด ์ข€ ๋” ์‰ฝ๊ฒŒ ์ดํ•ด๋๋˜ ๊ฒƒ ๊ฐ™๋‹ค๐Ÿ˜Ž