1. Firebase ํ์๊ฐ์ / ๋ก๊ทธ์ธ ๊ตฌํ
submit
์ผ๋ก ์๋ฒ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์๊ฐ ์๋ก๊ณ ์นจ์ด ๋๊ธฐ ๋๋ฌธ์ preventDefault()
ํจ์๋ก ์๋ก๊ณ ์นจ ๋ฐฉ์ง
๊ฐ๋ฐ์ ๋ฌธ์ -> ๋น๋ -> ์ธ์ฆ์์ ์ฝ๋ ์ฐธ์กฐํ๊ธฐ
SignUpButton
/ SignInutton
๋ฑ id๊ฐ ๊ตฌ๋ถํ๊ธฐ
document
2๊ฐ(ํ์๊ฐ์
, ๋ก๊ทธ์ธ)์ ๊ณตํต ์ฝ๋์ธ
const auth = getAuth();
๋ document
์๋ก ๋นผ์ ์ ์ญ๋ณ์๋ก ๋ง๋ค์ด ์ฃผ๊ธฐ
2. Youtube ํ์ด์ง ๋ง๋ค๊ธฐ_2
headcontain
class์๋ง display๋ฅผ flex๋ก ํ๋๋ ๊ธ์จ๊ฐ ์์ ๋ถ์๋ค.head
์ display๋ฅผ flex, headcontain
์๋ display: inherit
์ผ๋ก ํ๋ ๋ด๊ฐ ์ํ๋ ๋๋ก ๊ธ์จ๊ฐ ๊ฐ์ด๋ฐ๋ก ์ ๋ ฌ๋๋ค.class="fa-brands fa-youtube"
์ด๋ ๊ฒ ๋์ด ์๋๋ฐ fa-brands
์ fa-youtube
์ค ํ๋๋ง ์ฐ๋ ์์ ๋ณ๊ฒฝ ์ ๋จ!fa-brands fa-youtube fa-xl
์ฝ๋์ ์ง์ ์ฌ์ด์ฆ ๊ธฐ์ฌfont-size: x-large;
3. Firebase ํน๊ฐ
Firebase : ๋ณ๋์ ์๋ฒ๋ DB๊ด๋ฆฌ ์์ด ๋ฐฑ์๋ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋ ๋ฐฑ์๋ ํ๋ซํผ
์ฃผ๋ก ์ด์ฉํ ์๋น์ค
์ํ๋ ๊ธฐ๋ฅ์ API๋ ๊ฐ๋ฐ์ ๋ฌธ์์ ์ฌ๋งํ๋ฉด ๋ค ์์
์น ์ฑ์ Friebase ์ถ๊ฐ
Authentication ๋ก๊ทธ์ธ ์ค์
cloud firestore ์ค์
storage ์ค์
Authentication ์ค์
โ DOMcontentLoaded
: html, js, css ๋ชจ๋ ๋ค์ด ๋ฐ์์ ๋ ์คํํ๋ผ๋ ๊ฒ
โก ์ ์ ์ ๋ณด๊ฐ ๋ด๊ธด authSerivce
๋ผ๋ ๊ฐ์ฒด์ EventListner์ธ onAuthStateChanged
๋ฅผ ๋ฌ์ user์ ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ๊ณ์ ๋ชจ๋ํฐ๋ง ๊ฐ๋ฅ
โข handleLocation
์ ํ์ฌ url์ ํด๋นํ๋ ํ์ผ์ ๋์ฐ๋ ์ญํ = innerHTML์ ๊ฐ์ง๊ณ ํ๋ฉด์ ์ฌ๊ตฌ์ฑํ๋ ํจ์
โฃ hash๋ฅผ ์ค์ ํ๋ ์ด์ : hash๊ฐ์ ํตํด ์ด๋ค ํ๋ฉด์ ๋์ธ์ง ์ ํ
โค hash ๊ฐ์ ํตํด์ ํ์ฌ ์์น๋ฅผ ํ์
ํด ์ฌ๋ฐ๋ฅธ ํ์ด์ง๋ก ์ด๋์ํด
-> if(hash === "")
user๊ฐ ๋ก๊ทธ์ธํ๋๋ฐ ์ฌ์ ํ ๋ก๊ทธ์ธ ํ์ด์ง๋ฉด window.location.replace("#fanLog")
ํฌ๋ช
๋ก ํ์ด์ง๋ก ์ด๋์ํจ๋ค
window ๊ฐ์ฒด
๋ฒํผ ์ด๋ฒคํธ(onclick...)๊ฐ ๋ฐ์ํ ๋๋ง๋ค html์ ์ฐ๊ฒฐ์์ผ์ฃผ๋ ์ญํ
index.html์์ type="module"๋ก ํด์ผ ES6d์ module import export ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์
-> ๋ชจ๋๋ก ์ ์ธ์ด ๋ js ํ์ผ์ ๋ฒฝ์ด ์ธ์์ ธ ์ ์ญ์ผ๋ก ์ธ ์ ์์(์ง์ญ์ ์ฌ์ฉ)
-> ์ด๋์๋ ์ ๊ทผ ๊ฐ๋ฅํ window ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด main.js์์ import๋ก ๋ถ๋ฌ์จ 'update_commnet' ๋ฑ์ ํจ์๋ฅผ ํ๋์ method๋ก์จ ํ ๋น ์์ผ์ค๋ค.
๋ชจ๋์ ์ฐ์ง ์์ผ๋ ค๋ฉด main.js ํ์ผ์ ๋ชจ๋ js ๋ด์ฉ์ ๋ค ๋ฃ์ด์ผ ํ๋ค.(๋นํจ์จ์ )
โ firebaseConfig
์ ํ๋ก์ ํธ ์ ๋ณด๋ฅผ ๋ด๋๋ค
(firebase์ ํ๋ก์ ํธ ๊ฐ์ - ํ๋ก์ ํธ ์ค์ ์ ๋ณด)
โก initailizeApp
๋ฅผ ํตํด firebase์ ํ๋ก์ ํธ์ ์ฐ๊ฒฐ(์ฝ๋๋ฅผ ๊ผฝ์๋ค)
app
์ด๋ผ๋ ๋ณ์ ์์ฒด๊ฐ firebase์์ ๋ง๋ ํ๋ก์ ํธ(ํ๋ก์ ํธ์ ์์น๋ฅผ ์ง์ )
โข app
์ ๋งค๊ฐ๋ณ์๋ก ๋ด์ ํ๋ก์ ํธ์ ์๋น์ค 3๊ฐ์ง๋ฅผ ์ฐ๊ฒฐ
-> Authentication, Firestore, Storage์ ๋ชจ๋ API๋ฅผ ์ด์ฉํ ์ ์๊ฒ ๋จ
matchedEmail
: match()
method๊ฐ ๋ฌธ์์ด์ด ์ด๋ฉ์ผ regex์ ๋งค์น๋๋ ๋ถ๋ถ์ ๊ฒ์onAuthStateChanged
๋ก ์ธํด user๊ฐ ์๋๊ฒ ํ์ธ ๋์ด ํฌ๋ช
๋ก ํ์ด์ง๋ก ์ด๋ํ๊ฒ ๋ ๊ฒ โ fanLog.html์์๋ "๋๋ค์"์ธ๋ฐ ํ๋ฉด์ "๋๋ค์ ์์"์ด ๋ฌ๋ค.
- Dom์ ํ๋ฉด์ ๋์์ง ๊ฒ๋ง ์กฐ์ํ ์ ์์
- ํฌ๋ช
๋ก ํ์ด์ง๊ฐ ๋์์ง์๋ง์ ํฌ๋ช
๋ก์ ์๋ ๊ฒ๋ง JS DOM์ผ๋ก ์ ํ (ํ์ผ์ด ์๋ค๊ณ ์ ํํ ์ ์๋ ๊ฒ ์๋)
- ํ๋ฉด์ ๋์์ง DOM๋ง ์ ํํ๋ ค๋ฉด handlelocation ์์์ if๋ฌธ์ผ๋ก ์ ์ฝ์ ์ค์ผ ํ๋ค.
โก ๋๊ธ์ ๋ถ๋ฌ์ด
โข null ๋ณํฉ ์ฐ์ฐ์ : ??
-> currentUser์ photoURL์ด ์์ผ๋ฉด ๊ทธ๊ฒ์ ์ฐ๊ณ ์์ผ๋ฉด ํ๋กํ ์ฌ์ง(asset์ ๋ฃ์ ์ฌ์ง)์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ํ์ํ๋ค.
-> response์ ๊ฐ์ด ์์ผ๋ฉด ๋ณดํต null / undefined์ด๋ผ null ๋ณํฉ ์ฐ์ฐ์๋ฅผ ๋ง์ด ์
โ disabled = true
๋ฒํผ ๋นํ์ฑํ
-> ํ๋กํ ๋ณ๊ฒฝ ๋ฒํผ์ ์ฌ๋ฌ๋ฒ ๋๋ฅด๊ฒ ๋๋ฉด ๋ถํ์ํ๊ฒ ์๋ฒ์ ์์ฒญํ๊ฒ ๋จ
โก ํ๋กํ ์ด๋ฏธ์ง๊ฐ ํด๋(authService.currentuser.uid
)์
ํ์ผ(uuidv4
)๋ก ์ ์ฅ
uploadString
์ด๋ผ๋ firestorage์ api๋ฅผ ํตํด response๋ฅผ ๋ฐ๋๋ค.imgRef
: ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋๋ ์์นgetDownloadURL
์ ํตํด response์ ref๊ฐ downloadUrl
์ ๋ด๊ธด๋ค = '์ด๋ฏธ์ง ๋งํฌ'(์๊ตฌ์ )downloadUrl
์ ์ด์ฉimgDataUrl
์ ์์์ ์ธ ๊ฒ โ label๋ก ๊ฐ์ธ๊ณ input์ id="imgInput"
์ css์์ display:none
์ผ๋ก ์ค์
-> label์ ํด๋ฆญํด๋ "imgInput"์ด ์ ํ๋จ
โญlabel ์์ ์ด๋ ๋ถ๋ถ์ ๋๋ฌ๋ onfileChange
์ด๋ฒคํธ๊ฐ ์คํ๋๋๋ก ํ๊ธฐ ์ํด label๋ก ๊ฐ์ธ๋ ๊ฒ
โก input type="file"
๋ก ํ๋ฉด ์๋์ผ๋ก ํ์ผ ์ ํ ์ฐฝ์ด ๋ฌ๋ค.
โ onFileChange
ํ๋กํ ๊ด๋ฆฌ์์ ์ฌ์ง์ ๋๋ฅด๋ฉด ๋ค๋ฅธ ์ฌ์ง์ผ๋ก ๋ณ๊ฒฝํ ์ ์๊ฒ ํ์
์ด ๋จ๋ ๋์
โก JS ์์ฒด API์ธ FileReader
๋ผ๋ ํด๋์ค๋ก reader๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑ
โข readAsDataURL
์ด๋ผ๋ reader์ method๋ฅผ ํตํด the file
์ ์ธ์๋ก ๋ฃ์ผ๋ฉด file๊ฐ์ฒด๊ฐ DataUrl
๋ก ๋ณํ
-> onloadend
event. ๋ฐ์ดํฐ ๋ณํ์ด ๋๋ฌ์ ๋ ์ด ์ด๋ฒคํธ๊ฐ ์คํ์ด ๋จ
โฃ localStorage
ํ๋กํ ๋ณ๊ฒฝ์ ๋๋ฅด๊ธฐ ์ ๊น์ง๋ ํ๋กํ ์ฌ์ง์ด ๋ฐ๋์ง ์๊ฒ imgDataUrl
์ ์์ ๋ณด๊ด
-> downloadrul์ ์ป๋ ์ค๊ฐ ๊ณผ์ ์ด๋ผ๊ณ ์๊ฐ
โ add doc
Firestore DB์ ์ ์ฅํ๋ ํจ์
-> "comments"๋ผ๋ collection์ ์๋ ํ์์ documents๋ฅผ ์ ์ฅ.
โก createId
์์ , ์ญ์ ๋ฅผ ํด๋น ์ ์ id์ ํด๋นํ๋ ๋๊ธ์๋ง ๋ํ๋ด๊ธฐ ์ํด์!
โข ์๋ก๊ณ ์นจ์ ์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ์๋ง์ getCommentList
๋ฅผ ํตํด ์น ์ง์ฐ๊ณ ์
๋ฐ์ดํธ ๋ ๋ด์ฉ์ ๋ค์ ๋ถ๋ฌ์จ๋ค
โ query(firestore์์ ์ ๊ณตํ๋ api)
โกquerySnapshot
์ด๋ผ๋ ๋ฐฐ์ด์ response๋ก ๋ฐ๋๋ค
โข forEach
= querySnapshot
์ด๋ผ๋ ๊ฐ์ฒด์ method(๋ฐฐ์ด์ for each์ ๋ค๋ฅด๋ค)
-> method: ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ํจ์
โ innerHTML = ""
์ด๊ธฐํ
โก ๋ฐฐ์ด์ foreach
-> ๋ฐฐ์ด์ ๋ถ์ผ ๋(๋๊ธ์ ๋ถ๋ฌ์ ๋ถ์ด๋ ๊ฒ) jquery๋ณด๋ค๋ vanillaJS ์ฐ๋ ๊ฒ์ ์ถ์ฒ
-> ๋จ๊ณ๋ฅผ ํ๋ ๋ ์ค์ผ ์ ์๊ณ ํ์
์์ jquery ์ ์ ์
โข ๋ ์ง: 0๋ฒ์งธ๋ถํฐ 24(25-1)๋ฒ์งธ ๊น์ง ์ถ๋ ฅ
update_comment(event)
๋ฌธ์์ด๋ก ์์ด๋ DOM์ผ๋ก ์ธํด document ์ฒ๋ฆฌ๊ฐ ๋์ด ์ธ์์ด ๋จ โ
-> parentNode.children[0]
= input.newCmtInput(์์ ํ ๋๊ธ ์
๋ ฅ์ฐฝ)
-> parentNode.children[1]
= button.updateBtn(์๋ฃ ๋ฒํผ)
remove
add
๋ ํ๋ฉด์ ํ์ ์ฌ๋ถ์add
๋ก ๋ณด์ด๊ฒ ํ๋ ๊ฒ์ด์ง๋ง update_comment
์์์ ์์ ๋ฒํผ์ ๋๋ ์ ๋๋ฅผ ์ง์ ํด์ค์ผ ํจd-flex
)์ด ๊ธฐ์กด ๋๊ธ์ ๊ฐ๋ฆฌ๊ฒ ๋์ด ์์ผ๋ remove*
/*