1. Firebase ํ์๊ฐ์ / ๋ก๊ทธ์ธ ๊ตฌํ
submit์ผ๋ก ์๋ฒ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์๊ฐ ์๋ก๊ณ ์นจ์ด ๋๊ธฐ ๋๋ฌธ์ preventDefault()ํจ์๋ก ์๋ก๊ณ ์นจ ๋ฐฉ์ง
๊ฐ๋ฐ์ ๋ฌธ์ -> ๋น๋ -> ์ธ์ฆ์์ ์ฝ๋ ์ฐธ์กฐํ๊ธฐ
SignUpButton / SignInutton ๋ฑ id๊ฐ ๊ตฌ๋ถํ๊ธฐ
document 2๊ฐ(ํ์๊ฐ์
, ๋ก๊ทธ์ธ)์ ๊ณตํต ์ฝ๋์ธ
const auth = getAuth();๋ document์๋ก ๋นผ์ ์ ์ญ๋ณ์๋ก ๋ง๋ค์ด ์ฃผ๊ธฐ
2. Youtube ํ์ด์ง ๋ง๋ค๊ธฐ_2
headcontainclass์๋ง 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*/*