๐Ÿ’› [ Firebase ] v9๋ถ€ํ„ฐ ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง„ ์‚ฌ์šฉ๋ฒ•๋“ค ๋ชจ์•„๋ณด๊ธฐ.. (์‚ด๋ ค์ฃผ์„ธ์š”)

SeonDalยท2021๋…„ 9์›” 22์ผ
42

๐Ÿš‘ ์—๋Ÿฌ์น˜์œ ์†Œ

๋ชฉ๋ก ๋ณด๊ธฐ
2/12
post-thumbnail

Firebase๋ฅผ React ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋Š”๋ฐ ์ƒ๊ธฐ๋Š” ๋ฌด์‹œ๋ฌด์‹œํ•œ ์˜ค๋ฅ˜๋“ค...
" ๋‚˜ ๋งž๊ฒŒ ํ–ˆ๋Š”๋ฐ??? " -> ๋ฒ„์ „ 9๋ถ€ํ„ฐ ์‚ฌ์šฉ๋ฒ•์ด ์•„์˜ˆ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค ^^
์˜ค๋ฅ˜ ํ•ด๊ฒฐ์„ ์ฐพ์•„ ๊ณต์‹๋ฌธ์„œ๋ฅผ ํ•ญํ•ดํ•˜๋ฉฐ ์•Œ๊ฒŒ๋œ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ๋ฒ•๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ๋ถ„๋“ค์€ ๊ณ ์ƒํ•˜์ง€ ๋งˆ์„ธ์š”

๊ณต์‹๋ฌธ์„œ ์˜ ์†Œ์ค‘ํ•จ์„ ๋Š๋ผ๊ฒŒ ๋œ ์ด์•ผ๊ธฐ.. START


1. Firebase ์ธ์ฆ ๋ชจ๋“ˆ ์‚ฌ์šฉ

import firebase from "firebase/app";
import "firebase/auth";

const firebaseConfig = {
  ...
};

firebase.initializeApp(firebaseConfig);
export const authService = fierbase.auth();

๋ถ„๋ช… ๋˜‘๊ฐ™์ด ์ณค๋Š”๋ฐ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜..


ํŒŒ์ด์–ด๋ฒ ์ด์Šค ์ธ์ฆ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉ ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ–ˆ๋‹ค

Failed to compile.
./src/fbase.js
Attempted import error: 'firebase/app' does not contain a default export (imported as 'firebase').


์•Œ๊ณ ๋ณด๋‹ˆ Firebase V9 ๋ถ€ํ„ฐ ๋‹ฌ๋ผ์ง„ import ๋ฐฉ์‹๋•Œ๋ฌธ์ด์˜€๋‹ค ใ… ใ… 
๋‚˜๋ฆ„ ์ตœ๊ทผ์— ๋ฐœํ–‰ํ•œ ์ฑ…์ด์˜€์Œ์—๋„.. ์ด๋Ÿฐ ํฐ ๋ณ€ํ™”๋ผ๋‹ˆ..

๊ทธ๋ฆฌํ–์—ฌ ๋ฐ”๋€ ๋ฒ„์ „์— ๋งž๊ฒŒ ์ƒˆ๋กœ ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค


import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";

const firebaseConfig = {
  ...
};

const app = initializeApp(firebaseConfig);
export const authService = getAuth();

  • firebase.auth ๋Œ€์‹  getAuth() ์‚ฌ์šฉ

  • firebase ๊ฐ€ ์•„๋‹Œ intiailizeApp import



2. Auth ๊ด€๋ จ ํ•จ์ˆ˜๋“ค ์‚ฌ์šฉ

์›๋ž˜

data = await authService.createUserWithEmailAndPassword(email, password);

์ด๋ ‡๊ฒŒ createUserWithEmailAndPassword ํ•จ์ˆ˜์™€ signInWithEmailAndPassword ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ

TypeError: fbase__WEBPACK_IMPORTED_MODULE_0__.authService.createUserWithEmailAndPassword is not a function

์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์™”๋‹ค...
ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ธ์‹์„ ํ•œ๋‹ค

์ด ์—ญ์‹œ ํŒŒ์ด์–ด๋ฒ ์ด์Šค v9๋กœ ์ธํ•ด ํ•จ์ˆ˜ ์‚ฌ์šฉ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์ง„๊ฑฐ์˜€๋‹คใ… ใ… 


ํ•ด๊ฒฐ

import {
  createUserWithEmailAndPassword,
  signInWithEmailAndPassword,
} from "firebase/auth";

๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ 

data = await createUserWithEmailAndPassword(
          authService,
          email,
          password
        );

์˜ ํ˜•ํƒœ๋กœ createUserWithEmailAndPassword ํ•จ์ˆ˜์™€ signInWithEmailAndPassword ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค



3. export ~ = firebase

export const firebaseInstance = firebase;

Failed to compile.
src/fbase.js
Line 23:33: 'firebase' is not defined no-undef
Search for the keywords to learn more about each error.

์ต์ˆ™ํ•œ ์˜ค๋ฅ˜..
getAuth() ##1 ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ getAuth๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ–ˆ๋‹ค ใ… ใ… 

export const firebaseInstance = getAuth();


4.GoogleAuthProvider ๊ฐ€ ์•ˆ๋˜๋Š” ์˜ค๋ฅ˜

provider = new firebaseInstance.authGoogleAuthProvider();

Unhandled Rejection (TypeError): Cannot read property 'GoogleAuthProvider' of undefined

ํŒŒ์ด์–ด๋ฒ ์ด์Šค ์†Œ์…œ๋กœ๊ทธ์ธ๋งŒ ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธด๋‹ค
๋ฌผ๋ก  ์ด๊ฒƒ๋„ ์—ญ์‹œ! ๋ฒ„์ „์˜ ์ฐจ์ด ^^!

ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ํŒŒ์ผ ์œ„์—

import {
  signInWithPopup,
  GoogleAuthProvider,
} from "firebase/auth";

๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ 

provider = new GoogleAuthProvider();

๋กœ ํ•จ์ˆ˜ ์‚ฌ์šฉ ๋ฐฉ์‹์„ ๋ฐ”๊ฟ”์ค€๋‹ค



5. signInWithPopup ์˜ค๋ฅ˜

const data = await authService.signInWithPopup(provider);

Unhandled Rejection (TypeError): fbaseWEBPACK_IMPORTED_MODULE_0.authService.signInWithPopup is not a function

ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ๋‚˜์˜จ๋‹ค (์–ด๋””์„ ๊ฐ€ ๋งŽ์ด ๋ดค๋‹ค)
์œ„ ##4 ๊ทธ๋ฆฌ๊ณ  ##2 ์™€ ๋น„์Šทํ•˜๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋‹ค

const data = await signInWithPopup(authService, provider);


6. firestore export ์˜ค๋ฅ˜

Failed to compile.
src/fbase.js
Line 25:26: 'firebase' is not defined no-undef
Search for the keywords to learn more about each error.

ํ™˜์žฅ์ ์ธ ์˜ค๋ฅ˜.. ๊ทผ๋ฐ ์–ด๋””์„œ ๋งŽ์ด ๋ณธ ์˜ค๋ฅ˜๋‹ค.
##1 ์˜ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์‘์šฉํ•ด์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค

//import "firebase/firestore" ๋Œ€์‹ 
import { getFirestore } from "firebase/firestore";
//export const dbService = firebase.firestore(); ๋Œ€์‹ 
export const dbService = getFirestore();


7. collection.add 9๋ฒ„์ „์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

import {dbService} from "fbase";
...
collection("nweets").add({...});

Unhandled Rejection (TypeError): fbase__WEBPACK_IMPORTED_MODULE_1__.dbService.collection is not a function

์•„์ฃผ ์ต์ˆ™ํ•˜๊ฒŒ ์ƒ๊ธด ์˜ค๋ฅ˜๊ฐ€ ๋˜ ๋‚˜์™”๋‹ค.
์ด์ œ๋Š” ๋‚ด๊ฐ€ ๋‚ด๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ํ•ด๊ฒฐ์„ ์‹œ๋„ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค..
์ด๋ฒˆ์—๋Š” ##4๋ฅผ ์ฐธ๊ณ ํ•จ

//import {dbService} from "fbase"; ๋Œ€์‹ 
import {collection} from "firebase/firestore"

๋ฅผ ์ž„ํฌํŠธํ•ด์ฃผ๊ณ 

//dbService.collection("nweets").add({...}) ๋Œ€์‹ 
collection("nweets").add({...});

๋กœ ํ•จ์ˆ˜ ์‚ฌ์šฉ๋ฐฉ์‹์„ ๋ณ€๊ฒฝ

Unhandled Rejection (FirebaseError): Function collection() cannot be called with an empty path.

์—ฅ ์•ˆ๋œ๋‹ค...?

๊ฒฐ๊ตญ ๊ณต์‹๋ฌธ์„œ ๋ณด๊ณ ์™”๋‹ค. ใ…Ž

FireStore ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ ๋ฅผ ๋ดค๋”๋‹ˆ

addDoc ๋ผ๋Š” ์•„์˜ˆ ์ƒ๊ฐ์ง€๋„ ๋ชปํ•œ ํ•จ์ˆ˜.. ๊ฐ€ ํŠ€์–ด๋‚˜์˜ค๋„ค....์Œ....
๊ฐํžˆ ๋‚ด๊ฐ€ ์ด๋ ‡๊ฒŒ ๋งŽ์€ ๋ณ€ํ˜•์„ ์‹œ๋„ํ•ด๋„ ๋˜๋Š”๊ฑด์ง€ ๊ธด๊ฐ€๋ฏผ๊ฐ€ํ•˜์ง€๋งŒ ์ผ๋‹จ ๋‹ค์‹œ ํ•ด๋ดค๋‹ค

// await collection("nweets").add({...}); ๋Œ€์‹ 

 await addDoc(collection(dbService, "nweets"), {
      text: nweet,
      createdAt: Date.now(),
    });

์™€์•„์•„์•™ ์„ฑ๊ณต@@!@!
๋‚˜๋Š” ์ด์ œ ๊ณต์‹๋ฌธ์„œ์—๊ฒŒ ์ธ์Šคํƒ€์—์„œ๋งŒ๋‚œ๋Œ€ํ•™๊ต๊ณผ๋™๊ธฐ ์ •๋„์˜ ์นœ๋ฐ€๊ฐ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๋‹ค



8. collection.get() v9๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

const dbNweets = await dbService.collection("nweets").get();

Unhandled Rejection (TypeError): fbaseWEBPACK_IMPORTED_MODULE_2.dbService.collection is not a function

๋‚œ ์ด์ œ ์˜ค๋ฅ˜๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์ง€์— ์ด๋ฅด๋ €๋‹ค

collection.add ๋Š” addDoc(collection(...),{...}) ๋กœ ๋ฐ”๋€Œ์—ˆ๊ณ  (##7 ์ฐธ๊ณ )
colletion.get ์€ ๋ญ๋กœ ๋ฐ”๊ผˆ๋Š”์ง€ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋Ÿฌ๊ฐ€์ž

๋น„์Šทํ•˜๊ฒŒ getDocs ๋ฅผ ์“ฐ๋‹ˆ๊นŒ ์ด์— ๋”ฐ๋ผ ๋ฐ”๊ฟ”์ค€๋‹ค

//const dbNweets = await dbService.collection("nweets").get(); ๋Œ€์‹ 
const dbSweets = await getDocs(collection(dbService, "sweets"));


9. v9 onSnapshot ์‚ฌ์šฉ

dbService.collection("nweets").onSnapshot((snpashot) => {

Failed to compile.
src/routes/Home.js
Line 21:24: 'snapshot' is not defined no-undef
Search for the keywords to learn more about each error.

์ด์ œ ๊ณต์‹๋ฌธ์„œ ์—†์ด ๋ชป์‚ฌ๋Š” ์‚ฌ๋žŒ์ด ๋˜์—ˆ๋‹ค

import {onSnapshot} from "firebase/firestore";
...
// dbService.collection("nweets").onSnapshot((snapshot) => ์–ด์ฉŒ๊ตฌ ๋Œ€์‹ 

onSnapshot(collection(dbService, "sweets"), (snapshot) => { ์–ด์ฉŒ๊ตฌ

์š”๋ ‡๊ฒŒ ๋ฐ”๊ฟง๋‹ค



10. db.doc() v9์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ

const data = await dbService.doc(`nweets/%{nweetOnj.id}`);

์—ญ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋œฌ๋‹ค
์—ฅ ๊ทผ๋ฐ ์กฐ๊ธˆ ๋‚ฏ์„  ๊ฒฝ๊ณ ๋ฌธ๊ตฌ...

Unexpected reserved word 'await'.

await ์„ ๋นผ๋ผ๋„ค..?
์ฐพ์•„๋ณด๋‹ˆ onSnapshot ํ•จ์ˆ˜๋Š” async-await ์„ ๋ชป์“ด๋‹จ๋‹ค
v8์—์„œ๋Š” ํ—ˆ์šฉํ–ˆ๋Š”๋ฐ v9์—์„œ๋Š” ์•„์˜ˆ ํ—ˆ์šฉ๋„ ์•ˆํ•œ๋“ฏ

//const data = await dbService.doc(`nweets/%{nweetOnj.id}`); ๋Œ€์‹ 
const data = dbService.doc(`nweets/%{nweetOnj.id}`);

๊ทธ๋ž˜์„œ ๋นผ์ฃผ๋ฉด

TypeError: fbaseWEBPACK_IMPORTED_MODULE_0.dbService.doc is not a function

์ด์ œ๋Š” ์ •๋“ค์–ด๋ฒ„๋ฆฐ ์ด ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ,,

import { doc } from "@firebase/firestore"; //์ถ”๊ฐ€

...

//const data = dbService.doc(`nweets/%{nweetOnj.id}`); ๋Œ€์‹ 
const data = doc(dbService, `sweets/%{sweetOnj.id}`);

firebase v9 ์— ๋งž๋Š” ์‚ฌ์šฉ๋ฒ•์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์ž
์ด์ œ๋Š” ์ ๋‹นํžˆ ์–ด๋–ป๊ฒŒ ๋ฐ”๊พธ๋ฉด ๋ ์ง€ ์˜ˆ์ธกํ•˜๋Š” ์ง€๊ฒฝ์— ์ด๋ฅด๋ €๋‹ค



11. doc.delete()

const data = await dbService.doc(`nweets/${nweetObj.id}`).delete();

์ด๊ฑฐ ์˜ค๋ฅ˜๋‚˜์„œ

const data = doc(dbService, `nweets/${sweetObj.id}`).delete();

์ด๋ ‡๊ฒŒ ํ•ด๋„

TypeError: Object(...)(...).delete is not a function

์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์„œ

const data = deleteDoc(doc(dbService, `sweets/%{sweetOnj.id}`));

์ด๋ ‡๊ฒŒ ํ•ด๊ฒฐ
ํ•œ์ค„ ์•Œ์•˜๋Š”๋ฐ ์‚ญ์ œ๊ฐ€ ์•ˆ๋œ๋‹ค..?
๊ธฐ๋Šฅ์ž์ฒด๋Š” ๊ตฌํ˜„ํ•ด์„œ ์‚ญ์ œ๋Š” ๋˜๋Š”๋ฐ ๊ทธ ๋Œ€์ƒ์ด ์ž˜๋ชป์ง€์ •๋˜๋Š” ๋“ฏํ–ˆ๋‹ค

v9์— ์„ค๋ช…ํ•˜๋Š” ๋Œ€๋กœ ํ˜•์‹์„ (๋ฐ๋ฒ , ์ปฌ๋ ‰์…˜, ๋ฌธ์„œ) ๋กœ ๋ฐ”๊ฟ”๋ณด์ž

deleteDoc(doc(dbService, "sweets", sweetObj.id));

๊ตฌํ˜„์„ฑ๊ณต.. (์‰ฝ์ง€ ์•Š๊ตฐ)



12. db.doc.update() v9

dbService.doc(`nweets/${nweetObj.id}`).update({ text: newSweet });

๋Š๊ปด์ง„๋‹ค ์—๋Ÿฌ์˜ ๊ธฐ์šด

TypeError: fbaseWEBPACK_IMPORTED_MODULE_0.dbService.doc is not a function

์˜ค๋žœ๋งŒ์— ๋ณธ ๋‚ด ์—๋Ÿฌ์นœ๊ตฌ
์†์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•ด์ฃผ์ž (feat . ๊ณต์‹๋ฌธ์„œ)

import { doc, updateDoc } from "@firebase/firestore";

...

updateDoc(doc(dbService, "sweets", sweetObj.id), { text: newSweet });

๊ฐ‘์ž๊ธฐ 7์žฅ์œผ๋กœ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค ํ˜ธํ˜ธ


13. updateProfile() v9

await userObj.updateProfile({displayName: newDisplayName});

TypeError: fbaseWEBPACK_IMPORTED_MODULE_0.dbService.doc is not a function

ํ•ด๊ฒฐ

import { updateProfile } from "@firebase/auth";
...
updateProfile(userObj, { displayName: newDisplayName });

ํ”„๋กค๋กœ๊ทธ

๋„ˆ๋ฌด TMI๋ผ์„œ ๊ธ€ ๋งจ ์•„๋ž˜๋กœ ๋‚ด๋ ค๋ฒ„๋ฆผ

์•ผ์‹ฌ์ฐจ๊ฒŒ ์‹œ์ž‘ํ•œ ๋…ธ๋งˆ๋“œ ์ฝ”๋”์˜ ํŠธ์œ„ํ„ฐ ํด๋ก ์ฝ”๋”ฉ
์ตœ๊ทผ ๋ฐœํ–‰ํ•œ ์ฑ…์ธ๋ฐ ๊ทธ ์‚ฌ์ด์— ์—…๋Žƒ๋œ ํŒŒ์ด์–ด๋ฒ ์ด์Šค์˜ v9๋Š” ์ฑ…๊ณผ ๋„ˆ๋ฌด๋‚˜๋„ ๋‹ฌ๋ž๋‹ค...
๋˜‘๊ฐ™์ด ๋”ฐ๋ผ์ณ๋„ ๋‚˜๋งŒ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ฒผ๋‹ค ใ… ใ… 

์›๋ž˜๋Š” ํŠธ์œ„ํ„ฐ ํด๋ก ์ฝ”๋”ฉ ํ† ๋ง‰ TIL ์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ์ƒˆ๊ธ€์“ฐ๊ธฐ๋ฅผ ๋ˆŒ๋ €๋Š”๋ฐ..
๋‚˜๋ฅผ ๋ฐ˜๊ธฐ๋Š” ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๋“ค.....
๊ทธ ์˜ค๋ฅ˜๋“ค์„ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ€๋Š” ์ด์•ผ๊ธฐ..๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฐ.. ํด๋ก ์ฝ”๋”ฉ TIL์˜€๋˜๊ฒƒ

์ •๋ง ์ตœ๊ทผ์— ์—…๋Žƒ๋œ๊ฑฐ๋ผ ๊ทธ๋Ÿฐ์ง€ ์ธํ„ฐ๋„ท์— ์ •๋ณด๋„ ๋ณ„๋กœ ์—†์—ˆ๋‹ค
๊ทธ๋ ‡๊ฒŒ.. ๋‚˜๋Š” ๊ณต์‹๋ฌธ์„œ์™€ ์นœํ•ด์กŒ๋‹ค.

profile
๊น€์„ ๋‹ฌ ๊ฐœ๋ฐœ๋ธ”๋กœ๊ทธ

11๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2022๋…„ 2์›” 3์ผ

์‚ฌ๋ž‘ํ•ฉ๋‹ˆ๋‹ค ์„ ์ƒ๋‹˜

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2022๋…„ 8์›” 13์ผ

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!!

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2022๋…„ 9์›” 17์ผ

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2023๋…„ 1์›” 1์ผ

๋•๋ถ„์— ํฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
comment-user-thumbnail
2023๋…„ 2์›” 23์ผ

์„ ์ƒ๋‹˜ ๋•๋ถ„์— ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! >ใ…<

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
comment-user-thumbnail
2023๋…„ 3์›” 9์ผ

์ง„์งœ์ง„์งœ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค,,,, ์„ ์ƒ๋‹˜

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
comment-user-thumbnail
2023๋…„ 5์›” 13์ผ

์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค...

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด