๐ก์น ํ๋ก์ ํธ/(ํ์คํ)YOUTUBE - ํด๋ก ์ฝ๋ฉ (6) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ํ๋ก์ ํธ ์๊ฐ [SHTUBE : YOUTUBE ํด๋ก ์ฝ๋ฉ] SHTUBE : youtube clone site ์์ฐ ๋์์ > www.youtube.com/watch?v=slHIeCxyuPU github ๋ฐ๋ก๊ฐ๊ธฐ > github.com/seunghyun1003/youtube ๋ณธ ํ๋ก์ ํธ๋ YOUTUBEํด๋ก ์ฝ๋ฉ์ ํตํด ์ ๋ฐ์ ์ธ ์น ๊ฐ๋ฐ ๊ณต๋ถ๋ฅผ ํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ ์ํ์์ต๋๋ค. 1. ํ๋ก์ ํธ ํน์ง ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํ์ง ์๊ณ ์์ JavaScript๋ก ๊ตฌํํ์์ต๋๋ค. ์ ์ฒด ์น ๊ฐ๋ฐ์ ๊ฐ์ธ์ผ๋ก ์งํํ์์ต๋๋ค. 2. ๊ตฌํ ๊ธฐ๋ฅ ๋ฐ์ํ ์น ๋คํฌ ๋ชจ๋ ๋์์ ๊ฒ์๋ฌผ CRUD ๊ฒ์๋ฌผ ๊ฒ์ ๋์์ ๋ณ ๋๊ธ, ์ข์์, ๋ณด๊ดํจ ๊ธฐ๋ฅ ๊ณ์ ์ ๋ณด๊ด๋ฆฌ 3. ์ฌ์ฉํ ์ธ์ด&ํ๋ ์์ํฌ ์ธ์ด ํ๋ ์์ํฌ Front-End javascript no framework Back-End python D.. ๋คํฌ ๋ชจ๋ ๊ตฌํ ๋คํฌ ๋ชจ๋, ๋ผ์ดํธ ๋ชจ๋ ํ ๊ธ ๊ธฐ๋ฅ์ ๊ตฌํํ์์ต๋๋ค. ์ฐธ๊ณ ์ฌ์ดํธ > A Complete Guide to Dark Mode on the Web "ํ ๊ธ ํ ๋ง" ์น ์ฌ์ดํธ์ ํ ๋ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒฝ์ฐ๋ ์๋ 3๊ฐ์ง์ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด์์ฒด์ ์์ค์ ๋คํฌ ๋ชจ๋ ์ฌ์ฉ์์ ํ ๋ง ์ค์ ์ ์ฅ ์ ๋๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ๋ผ์ดํธ ๋ชจ๋ ์ฝ๋ ์ค๋ช localStorage์ ๊ฐ์ ๋ถ๋ฌ์ ๊ทธ ๊ฐ์ด "dark"๋ก ์ค์ ๋ ๊ฒฝ์ฐ ์คํ์ผ ์ํธ ์ฐ๊ฒฐ href ์์ฑ๊ฐ์ dark-theme.cssํ์ผ๋ก ๋ณ๊ฒฝํ๋ค. "dark"๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์คํ์ผ ์ํธ ์ฐ๊ฒฐ href ์์ฑ๊ฐ์ light-theme.cssํ์ผ๋ก ๋ณ๊ฒฝํ๋ค. "ํ ๊ธ ๋ฒํผ" ํด๋ฆญ์ ToggleThemeํจ์ ํธ์ถ ToggleTheme() ํจ์ : ์ฌ์ฉ์๊ฐ ์์คํ ์ค์ ์์ ์ ํํ ํ ๋ง์ ๋ฐ๋ผ .. ๋์์ํ์ผ ์์ , ์ญ์ ๊ตฌํ firebase์ cloud-firestore์์ ํ์ผ์ ์ญ์ ํ๋ ๊ธฐ๋ฅ๊ณผ ๋์์ ํ์ผ์ url ๊ณต์ ๋ฅผ ํตํด ๊ณต์ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์์ต๋๋ค. "๋ฐ์ดํฐ ์ญ์ " Cloud Firestore์์ ๋ฐ์ดํฐ ์ญ์ - Firebase๊ณต์ ์ฌ์ดํธ ์ฐธ๊ณ ๊ฒ์๋ฌผ ์ฝ๋ ์ค๋ช โป ์ ๋ฒ ๊ฒ์๋ฌผ์์ ์ ์ฅ๋ ํ์ผ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ฃผ๋ ํจ์ ์๋ renderFileํจ์์์ "์ญ์ ๋ฒํผ"์ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค. ๋ฆฌ์คํธ ๋ด์์ ํ์ผ๋ช ์์ ์์ฑ๋ ์ญ์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด removeChild()๋ฉ์๋๋ฅผ ์ด์ฉํด element๋ฅผ ์ญ์ ํ๊ณ , delete()๋ฉ์๋๋ฅผ ์ด์ฉํด firestore๋ด์์ ๋ฌธ์๋ฅผ ์ญ์ ํ๋ค. ๊ฒฐ๊ณผ Firebase์ Firestore์ Storage๋ฅผ ์ด์ฉํด ํ์ผ ์ ๋ก๋, ํ์ผ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ firebase์ authAuthentication์ ํตํด ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง cloud-firestore์ ํ์ผ์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์์ต๋๋ค. Cloud Firestore ์ดํดํ๊ธฐ > Firebase ๊ณต์ ์ฌ์ดํธ ์ฐธ๊ณ ๊ฒ์๋ฌผ "๋ฐ์ดํฐ ์ถ๊ฐ" Cloud Firestore์ ๋ฐ์ดํฐ ์ถ๊ฐ - Firebase ๊ณต์ ์ฌ์ดํธ ์ฐธ๊ณ ๊ฒ์๋ฌผ ์น์์ Storage๋ก ํ์ผ ์ ๋ก๋ - Firebase ๊ณต์ ์ฌ์ดํธ ์ฐธ๊ณ ๊ฒ์๋ฌผ ์ฝ๋ ์ค๋ช "ํ์ผ ์ ์ฅ ๋ฒํผ"์ ํด๋ฆญํ๋ฉด ์ธ์ฆ ์ ๊ณต์ ์ฒด(google)์ ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค. ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์๋ฉด firestore, storage์ ํ์ผ์ ์ถ๊ฐํ ์ ์๋ addFileํจ์๋ฅผ ํธ์ถํ๊ณ , ๋ก๊ทธ์ธ๋์ง ์์ ์ฌ์ฉ์๋ผ๋ฉด ๋ก๊ทธ์ธ์ ํ ์ ์๋ ํ์ ์ฐฝ์ด ๋จ๋๋ก ํ๋ค. addF.. Firebase์ ์ด์ฉํด Authentication, Hosting ํ๊ธฐ firebase์ ๊ธฐ์กด ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ๋ฅผ ์ถ๊ฐํ๊ณ , ํ๋ก์ ํธ์ ๊ฐ๋จํ ๊ตฌ๊ธ๋ก ๋ก๊ทธ์ธํ๊ฑฐ๋ ๊ตฌ๊ธ๋ก ๋ถํฐ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ๊ณต๋ฐ์ ์ ์๋๋ก ๋์์ฃผ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์๋ค. "์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์ Firebase์ถ๊ฐ" Firebase๊ณต์ ์ฌ์ดํธ ์ฐธ๊ณ ๊ฒ์๋ฌผ ํ์ด์ด๋ฒ ์ด์ค๋ฅผ ์ด์ฉํด ์๋ฒ ์ด์ฉํด ํ๋ก์ ํธ๋ฅผ ์น์ฌ์ดํธ์์ ํ์ธํ๋ ค๋ฉด ํฐ๋ฏธ๋์ firebase serve ์ ๋ ฅ "Firebase์ Authentication๋ก ๊ตฌ๊ธ ๋ก๊ทธ์ธ ๊ตฌํ" Firebase๊ณต์ ์ฌ์ดํธ ์ฐธ๊ณ ๊ฒ์๋ฌผ 1. ๊ตฌ๊ธ๋ก ๋ก๊ทธ์ธ, ๋ก๊ทธ์์ 1) ์ฝ๋ ์ค๋ช firebase.auth().signInWithPopup(provider); // ๊ตฌ๊ธ ๋ก๊ทธ์ธ ํ์ ์ฐฝ ์คํ firebase.auth().signOut(); //๊ตฌ๊ธ ๊ณ์ ๋ก๊ทธ์์ (fireba.. ํ๋ก ํธ ์๋ ๊ฐ๋ฐ ๋ชจ๋ฐ์ผ, ํ๋ธ๋ฆฟ, PC๋ฒ์ ์ ๋ฐ์ํ ์น์ฌ์ดํธ iframeํ๊ทธ๋ฅผ ์ด์ฉํด ์ ํ๋ธ ์์ ๊ฐ์ ธ์ค๊ธฐ - ๋์์๋ ๋ฐ์ํ์ผ๋ก! ๋คํฌ๋ชจ๋,๋ผ์ดํธ๋ชจ๋๋ก ๋ฐ๊ฟ ์ ์๋ ํ ๊ธ๋ฒํผ ์ฌ๋ผ์ด๋ ๋ฉ๋ด 1. ๋ชจ๋ฐ์ผ, ํ๋ธ๋ฆฟ, PC๋ฒ์ ์ ๋ฐ์ํ ์น์ฌ์ดํธ 2. iframeํ๊ทธ๋ฅผ ์ด์ฉํด ์ ํ๋ธ ์์ ๊ฐ์ ธ์ค๊ธฐ 3. ๋คํฌ๋ชจ๋,๋ผ์ดํธ๋ชจ๋๋ก ๋ฐ๊ฟ ์ ์๋ ํ ๊ธ๋ฒํผ 4. ์ฌ๋ผ์ด๋ ๋ฉ๋ด ์ด์ 1 ๋ค์