๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ (93) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [ ์ฑ ์ถ์ฒ ] Learning React ์๋ ์ ํ๋ JavaScript Deep Dive ์ฑ ์คํฐ๋ ํ๊ณผ ํจ๊ป 2023๋ ์ Frontend ์ฐ์ ์ฑ ์คํฐ๋๋ฅผ ํ๊ฒ ๋์๋ค. 2023๋ 1์ ~ 2์ ๊น์ง๋ Learning React(๋ฌ๋ ๋ฆฌ์กํธ)๋ผ๋ ์ฑ ์ ๊ณต๋ถํ๊ธฐ๋ก ํ๋๋ฐ, ์ด๋ฒ ๊ธฐํ์ ์ฒ์ ์๊ฒ ๋์ด ์ฑ ์ ์ฝ์ด๋ณด๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์๋ก ๊ตฌ๋งคํ์ฌ ์ฝ๋๋ค๋ ๊ฒ์ด ์กฐ๊ธ ๋ณ๋ก๋ผ๊ณ ์๊ฐํ๋ ๋์๊ฒ๋ ๊ด์ฐฎ๊ฒ ๋๊ปด์ง๋ ์ฑ ์ด์๋ค. 2022๋ 3์ 20์ผ์ 2ํ 2์๊ฐ ๋ฐํ๋ ์ฑ ์ธ๋ฐ, ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํต์ฌ ์ค๋ช ๋ฟ๋ง ์๋๋ผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด ์๊ฐํ๋ฉฐ, ๋ฆฌ์กํธ์ ์ต์ ๊ธฐ์ ๋ค๋ ์๊ฐํ๋ค. ์ฑ ์ ๋ชฉ๋ก์ ๊ฐ๋จํ ์๊ฐํด๋ณด๋ฉด 1. ๋ฆฌ์กํธ ์๊ฐ 2. ๋ฆฌ์กํธ๋ฅผ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ 3. ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ 4... [ React / Next ] Web Google Login ๊ธฐ๋ฅ ๊ตฌํ (gsi/client) ํ์ฌ์์ Next๋ฅผ ์ฌ์ฉํ๊ณ ์๋ Web์ Google Login ์ง์์ ์ํด ์น์ฉ Google ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํด์ ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ฉํ๋ react-google-login ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ์ง๋ง ๋ ์ด์ ๊ตฌ๊ธ์์ ์ง์ํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ค๊ฐ ์๋์ ๊ตฌ๊ธ ๊ฐ๋ฐ์ ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์ฌ Google Identity Service(GSI)๋ฅผ ์ด์ฉํ์ฌ ๋ก๊ทธ์ธ์ ๊ตฌํํด๋ณด๊ธฐ๋ก ํ๋ค. ๊ณต์ ๋ฌธ์ ๋งํฌ ๊ตฌ๊ธ ๊ฐ๋ฐ์ ํ์ด์ง Authentication - ์น์ฉ Google ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ Google ๋ก๊ทธ์ธ ํน์ง - Google ๊ณ์ ์ผ๋ก ์น ์๋น์ค์์ ์ฌ์ฉ์ ์ธ์ฆ์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ค. - ์ฌ์ฉ์๋ Google ๊ณ์ ์ ๋ก.. [ AWS ] S3 ๊ฐ์ฒด ์ญ์ ์ ๋ํ ๋์ฒ ๋ฐฉ๋ฒ ํ์ฌ ํ์ฌ์์ ๋ฆฌ์์ค๋ฅผ ์ ์ฅํ๊ธฐ ์ํด AWS S3๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. ํํ๋ก์ด ์์์ผ ์คํ 4์ 16๋ถ. ๊ฐ๋ฐํ์ ์ ์ ๊ฐ๋ฐ์๋ถ์ด AWS CLI๋ฅผ ํตํด S3์ ์ ์ฅ๋ ๊ฐ์ฒด๋ค์ ์ผ๊ด ์ญ์ ํด๋ฒ๋ ธ๋ค. aws s3 sync s3://Repo์ด๋ฆ --delete --no-progress --exclude '.*' ์์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ์ญ์ ํ๋ ค๋ ํด๋๊ฐ ์๋ ์ ์ฒด ์์ญ์ ๋ํ ์ญ์ ๋ช ๋ น์ ๋ ๋ ค๋ฒ๋ ธ๋ค๊ณ ํ๋ค. ๋ณธ์ธ์ด ์ญ์ ํ๋ ค๋ ํด๋๋ฟ๋ง ์๋๋ผ, ๋ค๋ฅธ ํด๋๋ค๊น์ง ์ค์๊ฐ์ผ๋ก ์ญ์ ๋๋ ๊ฒ์ ๋ณด๋ฉด์ ๋ญ๊ฐ ์๋ชป๋์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์ ๊ทธ๋ ๊ธํ๊ฒ ํด๋น ๋ช ๋ น์ ์ ์ง์์ผฐ๊ณ , ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋ฆฌ์์ค๋ค์ด ์ด๋ฆ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ญ์ ๋์๋ค. ์ด 6๊ฐ์ ํด๋๊ฐ ์ญ์ ๋์๊ณ , ๋นํฉํ์ฌ ์ค์ค๋ก ํด๊ฒฐํด ๋ณด๋ ค๊ณ ํ์ง๋ง ํด๊ฒฐํ์ง ๋ชปํ์๊ณ , ๊ฐ๋ฐํ ์ ์ฒด.. [ WEB ] HTTP Header(ํค๋) - 1 HTTP ํค๋๋ ๋ฌด์์ผ๊น? HTTP ํค๋๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์์ฒญ / ์๋ต์ผ๋ก ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ์กํ ์ ์๋๋ก ํด์ฃผ๋ ์ญํ ์ ํ๋ค. ๋.์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ์ด๋ฆ๊ณผ ์ฝ๋ก (:) ๋ค์์ ์ค๋ ๊ฐ(์ค ๋ฐ๊ฟ X)์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ ๊ฐ ์์ ๋ถ์ ๋น ๋ฌธ์์ด์ ๋ฌด์๋๋ฉฐ, ํ์์ ์์์ ํค๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค. HTTP ํค๋ ํ๋ ๋ช ํ์ธํ๊ธฐ HTTP ํค๋์ ๋ถ๋ฅ - General ํค๋: ๋ฉ์์ง ์ ์ฒด์ ์ ์ฉ๋๋ ์ ๋ณด๋ก ์์ฒญ / ์๋ต์์ ๋ชจ๋ ์ฌ์ฉ๋์ง๋ง ์ฝํ ์ธ ์์ฒด์๋ ์ ์ฉ๋์ง ์๋ ํค๋๋ก, Connection, Date, Cache-Control ๋ฑ์ด ์๋ค. - Request ํค๋: ํจ์น๋ ๋ฆฌ์์ค๋ ํด๋ผ์ด์ธํธ์ ๋ํ ์ ๋ณด๋ฅผ ํฌํจํ๋ ์์ฒญ ์ ๋ณด ํค๋๋ก, User-Agent, Cookie, Referer ๋ฑ์ด .. [ JavaScript ] async await ๋ฌธ๋ฒ ES8์์ ๊ฐ๋จํ๊ณ ๊ฐ๋ ์ฑ ์ข๊ฒ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋๊ธฐ์ฒ๋ผ ๋์ํ๋๋ก ๊ตฌํํ ์ ์๋ async/await๊ฐ ๋ฑ์ฅํ๋ค. async/await๋ ํ๋ก๋ฏธ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, async/await๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๋ฏธ์ค์ ํ์ ์ฒ๋ฆฌ ๋ฉ์๋ ์์ด ๋ง์น ๋๊ธฐ ์ฒ๋ฆฌ์ฒ๋ผ ํ๋ก๋ฏธ์ค๊ฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํ ์ ์๋ค. async ํจ์๋ async ํค์๋๋ฅผ ํตํด ์ ์ํ๊ณ , ํ๋ก๋ฏธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. async function asyncCall() { console.log('calling'); const result = await resolveAfter2Seconds(); console.log(result); // expected output: "resolved" } asyncCall(); await ํค์๋๋.. [ WEB ] Cookie์ ๋ํ ์ ๋ฆฌ ๊ธ Cookie ๋? HTTP์ฟ ํค(์น ์ฟ ํค ๋๋ ๋ธ๋ผ์ฐ์ ์ฟ ํค)๋ ์๋ฒ๊ฐ ์ฌ์ฉ์์ ์น ๋ธ๋ผ์ฐ์ ์ ์ ์กํ๋ ์์ ๋ฐ์ดํฐ ์กฐ๊ฐ์ผ๋ก, ๋ธ๋ผ์ฐ์ ๋ ํด๋น ๋ฐ์ดํฐ ์กฐ๊ฐ๋ค์ ์ ์ฅํด ๋์๋ค๊ฐ, ๋์ผํ ์๋ฒ์ ์์ฒญ ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์ ์กํ๋ค. ์ฟ ํค๋ ๋ ์์ฒญ์ด ๋์ผํ ๋ธ๋ผ์ฐ์ ์์ ๋ค์ด์๋์ง ์๋์ง๋ฅผ ํ๋จํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ฉฐ, ์ด๋ฅผ ์ฌ์ฉํ์ฌ stateless์ธ HTTP ํ๋กํ ์ฝ์์ ์ํ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ์ฌ ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์งํ ์ ์๋ค. ์ฟ ํค๋ Key=value ํํ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ํ์ ์ String์ด๊ณ , ๊ณต๊ฐ ์ ์ฝ์ด ์์ด์ 4KB ์ด์ ์ ์ฅ์ด ๋ถ๊ฐ๋ฅํ๋ค. Set-Cookie ๋ ์๋ฒ์์ ํด๋ผ์ด์ธํธ(์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ )๋ก ์ฟ ํค๋ฅผ ์ ์กํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. (์๋ต) Set-Cookie: =โ ์ฟ ํค์ ํน์ง - ์ฟ ํค๋ .. [ JavaScript / Promise ] ์๋ฐ์คํฌ๋ฆฝํธ์ Promise์ ๋ํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์ ๋๊ธฐ ๋ฐฉ์์ผ๋ก ํ์คํฌ๋ฅผ ์ฒ๋ฆฌํ๋ค. ๊ทธ๋์ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ฅผ ํ๋ ค๋ฉด ๊ณผ๊ฑฐ์๋ ์ฃผ๋ก ์ฝ๋ฐฑ ํจํด์ ์ฌ์ฉํ๋๋ฐ, ์ฝ๋ฐฑ ํจํด์ ์ฝ๋ฐฑ ํฌ๋ก ์ธํด ๊ฐ๋ ์ฑ์ด ์ข์ง ์๊ณ ์๋ฌ ์ฒ๋ฆฌ ๋ฐ ์ฌ๋ฌ ๊ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ฒ์ ํ๊ธฐ๋ ํ๋ค๋ค๋ ๋จ์ ์ด ์๊ธฐ ๋๋ฌธ์ ES6์์ ๋์ ๋ Promise๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ฌํ ๋จ์ ๋ค์ ๋ณด์ํ๋ฉฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค. ๋น๋๊ธฐ ํจ์๋? ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ ์ฌ์ ์ผ๋ก ์ค๋ ์คํ๋๋ ์์ ์ ์์ํ์ฌ ํด๋น ์์ ์ด ์คํ๋๋ ๋์์๋ ๋ค๋ฅธ ์ด๋ฒคํธ์ ์๋ตํ ์ ์๊ฒ ํ๋ ๊ธฐ์ ๋ก ์์ ์ด ์๋ฃ๋๋ฉด ํ๋ก๊ทธ๋จ์ด ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ค. ์ด ๋๋ฌธ์ ๋น๋๊ธฐ ํจ์ ๋ด๋ถ์ ๋น๋๊ธฐ๋ก ๋์ํ๋ ์ฝ๋์์ ์ฒ๋ฆฌ ๊ฒฐ๊ดด๋ฅผ ์ธ๋ถ๋ก ๋ฐํํ๊ฑฐ๋ ์์ ์ค์ฝํ์.. [ React / Redux ] Redux ์ํ ๊ด๋ฆฌ ๊ฐ๋ ์ ๋ฆฌ. ๊ธฐ์กด์ ๋ด๊ฐ React ํ๋ก์ ํธ์ ์ฆ๊ฒจ ์ฌ์ฉํ๋ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ recoil ์ด์๋ค. ํ์ง๋ง ์๋ก์ด ํ์ฌ์์๋ Mobx์ Redux๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ค. ๊ทธ๋์ Redux ๊ณต๋ถ๋ฅผ ์ํด ๊ณต์ ํํ์ด์ง๋ฅผ ๋ณด๋ฉฐ ๊ฐ๋ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค. Redux ๊ธฐ๋ณธ ๊ฐ๋ Redux๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ์ ์ํ ์์ธก ๊ฐ๋ฅํ ์ํ ์ปจํ ์ด๋๋ผ๊ณ ํ๋ค. ์ผ๊ด์ ์ผ๋ก ๋์ํ๊ณ ์๋ก ๋ค๋ฅธ ํ๊ฒฝ (์๋ฒ, ํด๋ผ์ด์ธํธ, ๋ค์ดํฐ๋ธ)์์ ์๋ํ๊ณ , ํ ์คํธ ํ๊ธฐ ์ฌ์ด ์ฑ์ ๋ง๋ค๋๋ก ๋์์ฃผ๋ฉฐ Redux๋ React๋ฟ๋ง์๋๋ผ ๋ค๋ฅธ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋งค์ฐ ์์ ์ฉ๋(์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌํจ 2KB)์ผ๋ก ์ฌ๋ฌ ๊ธฐ๋ฅ๋ค์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ค. Redux๋ ์๋ฐ์คํฌ๋ฆฝํธ SPA์์ ๊ฐ์ถ์ด์ผ ํ ์๊ฑด๋ค์ด ์ ์ ๋ณต์กํด์ง์ ๋ฐ๋ผ ๋ง์.. ์ด์ 1 ยทยทยท 3 4 5 6 7 8 9 ยทยทยท 12 ๋ค์