ํ๋์์ ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ ํ๋ ์์ํฌ์ธ React, Vue, ๋ผ์ด๋ธ๋ฌ๋ฆฌ Next.js์ ๋ํด์ ์์๋ณด์์.
์์ฆ ํ์ ์์ ๋ง์ด๋ค ์ฌ์ฉํ๊ณ ์๋ Jest๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ํด๋ณด์!
Jest์ ๋ค์ด๊ฐ๊ธฐ ์ ์.. Jest์ ๋ํด์ ์์๋ณด์!

์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ToDo-List๋ฅผ ํ ์คํธ ์ฝ๋๋ก ๋๋ ค๋ณด์
SSR๊ณผ CSR์ ์น ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐฉ์์ ๋ฐ๋ผ ๋๋ฉ๋๋ค. Vue, React, PHP, JSP์์ ๊ด๊ณ๋ฅผ ์ดํดํ๊ธฐ ์ํด ๊ฐ ๋ฐฉ์์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
React ํ๋ ์์ํฌ๋ก, ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง(SSR)๊ณผ ์ ์ ์ฌ์ดํธ ์์ฑ(SSG)์ ์ง์ํฉ๋๋ค.
๋น๋ ์์ ์ API๋ฅผ ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์๊ณผ ์ฌ์ฉ์๊ฐ ํ์ด์ง์ ์ ๊ทผํ ๋ API๋ฅผ ํธ์ถํ๋ ๋ฐํ์ ์์ ์ ๋ํด ํผ๋ํ ์ ์์ต๋๋ค.
์น ๊ฐ๋ฐ์์ ์ค์ํ ๊ฐ๋ ์ธ SSR, CSR, SSG, SEO๋ ๋ฉด์ ์์ ์์ฃผ ๋ฑ์ฅํ๋ ์ง๋ฌธ์ด๊ธฐ์, ์ด๋ฒ ๊ธ์์๋ ๊ฐ ๊ฐ๋ ์ ํต์ฌ์ ์ฝ๊ฒ ์ค๋ช ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
Firebase Console์ ์ ์ ํ ํ๋ก์ ํธ ์์ฑ.ํ๋ก์ ํธ ๋ด์์ Firebase Firestore๋ฅผ ํ์ฑํ:Build > Firestore Database ์ ํ.๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ ํ ํ ์คํธ ๋ชจ๋๋ก ์ค์ (์ด์ ์ ๊ท์น ์์ ํ์).Firebase SDK ์ค์ :ํ
์ค์ฟจ ํ๋ก๊ทธ๋๋จธ์ค์์ ์งํํ ์ฝ๋ฉํ ์คํธ ์๊ณ ๋ฆฌ์ฆ์ ํ๋ค๊ฐ ๋ฌธ๋ ์๊ฒ๋ ์ฌ์ค! slice()๋ ๋ณดํต ๋ฐฐ์ด์์ ๊ฐ์ ์ ๊ฑฐํ ๋, ์ฌ์ฉํ์๋๋ฐ ๋ฐฐ์ด๋ณต์ฌ๋ ๊ฐ๋ฅํ๋ค๋๊ฒ
์ซ์์ ์ผ๋ถ ์๋ฆฟ์๋ฅผ ์๋จ์ด๋ก ๋ฐ๊พผ ๋ฌธ์์ด์ด ์ฃผ์ด์ก์ ๋, ์๋ ์ซ์๋ฅผ ์ฐพ๋ ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋ณด๋ ์ค๋์ TIL
ํ๋ก์ ํธ๋ฅผ ํ๋ค๋ณด๋ฉด Dateํ์์ ์ง์ ํด์ผ ํ ์ผ์ด ์์ฃผ ๋ง์๋ฐ, ์ข๋ ํจ์จ์ ์ผ๋ก ์งค ์ ์๋ ๋ฐฉ๋ฒ์ ๋ชจ์ํด๋ณด์๋ค.
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋, ๊ธ์น์ด ํํฐ๋ฅผ ๋ฃ์ด๋ณด๊ณ ์ถ์ ์์ฌ์ด ์๊ฒผ๋ค.
ํ๋ก๊ทธ๋๋จธ์ค์ ๋ฌธ์์ด ๋ด ๋ง์๋๋ก ์ ๋ ฌํ๊ธฐ๋ฅผ ํ์ด๋ณด์

๋ฐฐ์ด array์์ ์ฃผ์ด์ง ๊ตฌ๊ฐ์ ์๋ฅด๊ณ , ์ ๋ ฌํ ๋ค, K๋ฒ์งธ ์ซ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์
๐ ์คํ ์ปจํ ์คํธ๋ถํฐ ์ค์ฝํ ์ฒด์ธ๊น์ง, JavaScript์ ๋์ ์๋ฆฌ๋ฅผ ํํค์ณ๋ด ๋๋ค. ์ฝ ์คํ, ํธ์ด์คํ , this ๋ฐ์ธ๋ฉ ๋ฑ ํต์ฌ ๊ฐ๋ ์ ์ค์ ์ฝ๋ ์์ ์ ํจ๊ป ์์๋ณด์ธ์!
this์ ๋ํด์ ๊ณต๋ถ๋ฅผ ํ๋ค๊ฐ this bindingํ๋ ๋ถ๋ถ์ ๋ํด์ ์ง์ ์์ ๋ฅผ ๋ง๋ค์ด ์ดํด๋ฅผ ํด๋ณด๊ณ ์, Array.prototype.map ๋ฉ์๋๋ฅผ ์ง์ ๊ตฌํํด๋ณด์๊ณ , ๊ทธ ๊ณผ์ ์์ this ๋ฐ์ธ๋ฉ์ ์ค์์ฑ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
ํด๋์ค์์ getter/setter๋ฅผ ์ฌ์ฉํ ๋, ์ธ๋์ค์ฝ์ด(\_)๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ฐ์ํ๋ ์ฌ๋ฏธ์๋(?) ๋ฌธ์ ๋ฅผ ๋ง์ฃผ์ณค์ต๋๋ค.
์ฐธ์กฐํ ๋ฐ์ดํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ๋ ธ๋ ๋ฐฉ๋ฒ ๐ฎ ๊ฐ์ฒด์ ๋ฐฐ์ด์ด ๋ฉ๋ชจ๋ฆฌ์์ ์ด๋ป๊ฒ ์ ์ฅ๋๊ณ ๋ณต์ฌ๋๋์ง, ๊ทธ๋ฆฌ๊ณ 2022๋ ์ ์๋ก ์ถ๊ฐ๋ structuredClone()๊น์ง! โจ
arguments ๊ฐ์ฒด์ ํด๋ก์ ๋ฅผ ํ์ฉํ ์ค์ ์ฝ๋์ ๋์ ์๋ฆฌ ๋ถ์ ๋ ์์ปฌ ํ๊ฒฝ(LE)์์์ ๋ณ์ ๊ด๋ฆฌ๊น์ง ํ๋ฒ์ ์ ๋ฆฌ
new Promise()์ ๋์ ์๋ฆฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ณผ์ ์ ํํค์ณ๋ด ๋๋ค โก๏ธ Promise์ ์ํ ๋ณํ์ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ํตํ ์คํ ์์๋ฅผ ์ดํดํ๊ณ , ์ค์ ์ฝ๋๋ก ํ์ธํ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๋ชจ๋ ๊ฒ
๋ณ์์ ์์๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ด๋ป๊ฒ ์ด๊ณ ์์๊น? ๐ค ๊ธฐ๋ณธํ๊ณผ ์ฐธ์กฐํ์ ์ด์ค์ํ, ๊ทธ๋ฆฌ๊ณ ๋ถ๋ณ์ฑ์ ์ง์ค ๋ฉ๋ชจ๋ฆฌ ๊ด์ ์ผ๋ก ์ดํดํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ์ดํฐ์ ์ธ๊ณ!
๋ฐฑํธ๋ํน์ ๋ง๋ฒ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ ์ต์ ํํ๊ธฐ โจ ์์ ํ๋ณ๊ณผ ์กฐํฉ์ ํจ์จ์ ์ธ ๊ตฌํ ๋ฐฉ๋ฒ์ ์์๋ณด๊ณ , 3์ค for๋ฌธ์ ์ฌ๊ท๋ก ๋ฆฌํฉํ ๋ง ํ๋ ๊ณผ์ ์ ์ ๋ฆฌํ์ต๋๋ค!
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ์์ ๋ฐ์ํ๋ ์๋์น ์์ ํฐ ์ , ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊น๋ํ๊ฒ ํด๊ฒฐํ๊ธฐ โจ ํ๋์จ์ด ๊ฐ์๊น์ง ํ์ฉํ ์๋ฒฝํ CSS ํธ๋ฌ๋ธ์ํ !
์์์ ์ฒ๋ฆฌ๋ถํฐ DOM ์ต์ ํ, ํด๋์ค ์ค๊ณ๊น์ง! ์ค๋ฌด์์ ๋ง์ฃผ์น๋ JavaScript ๋ฌธ์ ๋ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ์ต๋๋ค โจ
ํ ํ์ผ์ ๋ชจ๋ ์ฝ๋๊ฐ ์๋ค๊ณ ์? ๊น๋ํ ๋ชจ๋ ๊ตฌ์กฐ๋ก ๋ฆฌํฉํ ๋ง ํ๋ ๋ฐฉ๋ฒ์ ์์๋ด ๋๋ค ๐งน ์ปดํฌ๋ํธ ๋ถ๋ฆฌ๋ถํฐ ํด๋ ๊ตฌ์กฐ ์ค๊ณ๊น์ง, ํด๋ฆฐ ์ฝ๋๋ฅผ ์ํ ์ฌ์ !
์ฌ์ฉ์ ํ๋์ ๊ธฐ๋กํ๊ณ ์ถ์ ํ๋ ์์คํ ์ ๋ง๋ค๋ค๊ฐ ๋ฐ๊ฒฌํ JavaScript์ ์จ์ ๋ณด์๋ค์ ๊ธฐ๋กํฉ๋๋ค โจ
์ค์ฝํ ์ฒด์ด๋๋ถํฐ ํ์ดํ ํจ์์ this, ๋น๋๊ธฐ ์คํ ์์๊น์ง! ์ค๋๋ ์๋ก ๋ฐ๊ฒฌํ JavaScript์ ์ฌ๋ฏธ์๋ ํน์ฑ๋ค์ ๊ธฐ๋กํฉ๋๋ค โจ

์น ๊ฐ๋ฐ์๋ผ๋ฉด ๊ผญ ์์์ผ ํ JavaScript ์คํฌ๋ฆฝํธ ๋ก๋ฉ ์ต์ ํ ๋ฐฉ๋ฒ! ๐ "์, defer์ ๋์ ์ถ๊ฐํด์ฃผ์ จ๊ตฐ์!"
JavaScript๋ก ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ํ ๋ฒ์ฏค ๋ง์ฃผ์น๊ฒ ๋๋ 'a.key๋ ์ ๋๋๋ฐ a[key]๋ ๋๋ค...?' ์๊ฐ! ๊ฐ์ฒด ์์ฑ ์ ๊ทผ๊ณผ Map ๋ฉ์๋ ์ฌ์ฉ์ ํต์ฌ์ ํํค์ณ๋ด ๋๋ค. ํท๊ฐ๋ฆฌ๋ ๋ฌธ๋ฒ์ ์ฅ์ฅ ์๋ผ ๋ช ์พํ๊ฒ ์ ๋ฆฌํ์ด์! ๐ช
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ผ๋ฉด ๊ผญ ์์์ผ ํ React์ ํต์ฌ ๊ฐ๋ ๋ค์ ์ด์ ๋ฆฌํ์ต๋๋ค. Optional Chaining๋ถํฐ Virtual DOM๊น์ง, React ๊ฐ๋ฐ์ A to Z๋ฅผ ํํค์ณ๋ด ์๋ค!
React ๊ฐ๋ฐ ์ ์์ฃผ ๋ง์ฃผ์น๋ ์ฃผ์ ๊ฐ๋ ๋ค๊ณผ ์ด๋ฒคํธ ํธ๋ค๋ง ๋ฐฉ์, ์ฝ๋ ์ค๋ํซ์ ๋ํด ์ ๋ฆฌํ์ต๋๋ค.
์ค๋์ React์ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ค์ ๊น์ด ์๊ฒ ํ์ตํ์ต๋๋ค. ํนํ ํด๋ก์ ์ ํ์ฉ, ์ปดํฌ๋ํธ ์ค์ฒฉ, ํผ ์ ์ถ ์ต์ ํ, ๊ทธ๋ฆฌ๊ณ ํด๋์ค๋ค์ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ๋ํด ์ง์ค์ ์ผ๋ก ๊ณต๋ถํ์ต๋๋ค.
์ฝ๋ฉํ ์คํธ, ์ด๊ฒ๋ง์ ๊ผญ ์๊ณ ๊ฐ์! ์ค์ ํ ์คํธ ์งํ ๋ฐฉ์๋ถํฐ ์๊ฐ๋ณต์ก๋ ์ฒดํฌ๊น์ง, ํ์ ๊ฐ๋ฐ์ ํํฐ๋์ ์์ํ ๊ฟํ ์ด์ ๋ฆฌ โจ
ํจ์ํ ์ปดํฌ๋ํธ์ Hook์ ์ค์ ๋์ ์๋ฆฌ, ํนํ useEffect์ ์์กด์ฑ ๋ฐฐ์ด์ ๋น๋ฐ์ ๋ํด ๋ฐฐ์ ์ต๋๋ค! ์ด์ ์ปค์คํ ํ ๋ ์์ ์๊ฒ ๋ง๋ค ์ ์๊ฒ ์ด์ โจ
async๋ ๋น๋๊ธฐ ์์ ์ ํ ํจ์๋ฅผ, await๋ ๋น๋๊ธฐ ๋ถ๋ถ์! Promise.all๊ณผ map์ ์กฐํฉ์ผ๋ก ๋น๋๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๋ฉ์ง๊ฒ ๋ค๋ค๋ณด์์ต๋๋ค. ์ด์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์กฐ๊ธ์ ๋ ๋ฌด์์์ก๋ค์! โจ
Hook์ ๋ฐฐ์ด๋ก ๊ด๋ฆฌํ๋ ์ด์ ๋ถํฐ ์ค์ ํ์ฉ ํ๊น์ง, React์ ๊น์ ๊ณ ๋ฏผ๊ณผ ํด๊ฒฐ์ฑ ์ ํํค์ณ๋ด ๋๋ค. ์ด์ Hook์ ๋ชจ๋ ์ ์ฝ์ฌํญ์ด ์ดํด๋๊ธฐ ์์ํ๋ค์! โจ
"์ผ๋ง๋ ์ด๋ ต๊ฒ ์ด~" ํ๊ณ ์์ํ React ํ๊ฒฝ ๊ตฌ์ถ, JSX ์๋ฌ๋ถํฐ ์นํฉ ์ค์ ๊น์ง... ์ฉ์ด ์ฐพ๊ณ .. ์ดํดํ๊ณ ์ง์ ํด๋ณด๊ณ .....์ฝ์ง ๊ธฐ๋ก. ์ด์ ์ผ CRA์ ๊ณ ๋ง์์ ๊นจ๋ซ๋ค! ๐
๊ฐ์ฒด์ ํค๋ฅผ ํ์ธํ๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ํํค์ณ๋ณด๋, hasOwnProperty์ in ์ฐ์ฐ์์ ์ด๋ฐ ์ฐจ์ด๊ฐ ์์๋ค! ๐ฒ
Redux๋ฅผ ํตํ ์ ์ญ ์ํ ๊ด๋ฆฌ์ ํ์์ฑ, ๊ธฐ๋ณธ ๊ฐ๋ , ๊ทธ๋ฆฌ๊ณ ์ค์ ๊ตฌํ ๋ฐฉ๋ฒ๊น์ง ํ์ตํ์ต๋๋ค.
ํ๋ก๊ทธ๋๋จธ์ค "๊ตฌ์ฌ์ ๋๋๋ ๊ฒฝ์ฐ์ ์" ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋ฐ๊ฒฌํ ํฅ๋ฏธ๋ก์ด ์ด์๋ค...
์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ์ ๋ณต์ก์ฑ์ ํด๊ฒฐํ๋ Redux์ RTK(Redux Toolkit)์ ํต์ฌ ๊ฐ๋ ๊ณผ ์ฌ์ฉ๋ฒ์ ์์๋ด ๋๋ค.
useEffect, useEffect๋ฅผ ์ง์ ๊ตฌํ๋ณด์์ต๋๋ค
๋ฐฑ์๋ ์๋ฒ ๊ตฌ์ถ ์์ด๋ ํ์คํ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ BaaS(Backend as a Service)์ ๊ฐ๋ ๊ณผ Supabase๋ฅผ ํ์ฉํ React ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์์ต๋๋ค!
ํ๋ ์น ๊ฐ๋ฐ์์ ๊ฐ์ฅ ์ค์ํ ๊ณผ์ ์ค ํ๋์ธ ์ํ ๊ด๋ฆฌ. Flux ์ํคํ ์ฒ๋ฅผ ์์์ผ๋ก Redux์ ํ์ ๋ฐฐ๊ฒฝ๊ณผ ๋ฐ์ ๊ณผ์ , Context API์์ ์ฐจ์ด์ ์ ์์๋ด ๋๋ค.
React์ ์ํ ์ ๋ฐ์ดํธ ์ ์ง์ ์ฐธ์กฐ ๋์ prev๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ด์ ๋ฅผ ์์๋ด ๋๋ค.
Context API์ Redux Toolkit ๊ตฌํ ๋ก์ง์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค!

์ฒซ ์ปค์คํ ํ ์ผ๋ก ์ ํํ ๋ธ๋ผ์ฐ์ ์ ์ฅ์ Hook. ๊ทผ๋ฐ ์ด๊ฒ Hook์ผ๋ก ๋นผ๋๊ฒ ๋ง์๊น? ์๋๋ฉด ์ด๋ฏธ ์์ฑํด๋ ๋ฆฌ๋์ ์์์ ๊ตฌํํ๋๊ฒ์ด ๋ง์๊น? ๊ณผ์ฐ?
Button ์ปดํฌ๋ํธ ๋ฆฌํฉํ ๋ง์ ํตํด type/variant ๋ค์ด๋ฐ ๊ณ ๋ฏผ๋ถํฐ ์คํ์ผ ๊ด๋ฆฌ ๊ตฌ์กฐํ๊น์ง...
์ฝ๋์ ๊ฐ๋ ์ฑ, ์์ธก ๊ฐ๋ฅ์ฑ, ์์ง๋, ๊ฒฐํฉ๋๋ฅผ ์ค์ฌ์ผ๋ก ์ง์ ํ '์ข์ ์ฝ๋'๋ ๋ฌด์์ธ์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ค๋ฌด์์ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์๋์ง ํ ์ค์ ํ๋ก ํธ์๋ ๊ฐ์ด๋๋ฅผ ๋ฐํ์ผ๋ก ์์๋ด ๋๋ค.
toss์ Frontend Fundamentals๊ธ์ ์ฝ๋ค๊ฐ .. ๋ฌธ๋ ์ปดํฌ๋ํธ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ์ค๊ณํด์ผ ํ ๊น์ ๋ํด์ ๊ณ ๋ฏผํ๊ฒ ๋์๋ค.
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ฆฌํฉํ ๋ง ๊ด์ ์์ styled-components์ ๊ตฌ์กฐ์ ๋ํด ๊ณ ๋ฏผํ๊ฒ ๋์์ต๋๋ค. ์ฌ์ฌ์ฉ์ฑ์ธ์ ๋จ์ํ ์ฝ๋๊ฐ ๊ธธ์ด์ก๋ค๊ณ ํ์ผ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ต์ ์ผ๊น? ์ด๋ค ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํด์ผ ํ ๊น? ์ด๋ฐ ๊ณ ๋ฏผ๋ค์ ํํฐ๋๊ณผ์ ๋ฉด๋ด์ ํตํด ํด๊ฒฐํด๋ณด์์ต๋๋ค.
Todo ์ฑ์์ ์์ดํ ์์ ์ reducer๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ฐ์ํ ์๋ฌธ:"๋จ์ํ ๊ฐ๋ง ์ ๋ฌํ๋๋ฐ ์ ๊ธฐ์กด ์ํ๋ฅผ ์ ์งํด์ผ ํ์ง?" ๋ผ๋ ์๋ฌธ์ด ๋ค์์ต๋๋ค.

ํํ๋ก์ ํธ์ ์ ์ฑํ๊ฒ ๋ ์ฒซ๋ .. ๊ธฐํ๊ณผ ์์ด์ด ํ๋ ์์ ์ก๋๊ฒ. ์ฌ์ค์ FE์ ์ ๋ฌด๋ผ๊ณ ๋ ๋ณผ ์ ์์ ์ง ๋ชจ๋ฅด๋.. ์ด๊ฒ ์ญ์๋ ์ค์ํ ์ญ๋์ด๋ผ๊ณ ์๊ฐํ๋ค..!!
ํ ํ๋ก์ ํธ์ 2์ผ์ฐจ... ๊น ํ์ , ์๊ฐ๋ณด๋ค ๊ณ ๋ คํด์ผํ ๊ฒ๋ค์ด ๋ง์๋ค. PRํ์,Git ์ปจ๋ฒค์ ๋ฑ๋ฑ.. ์ฒซ ํ์ ์ PR๊ณผ ํ์๋ถ๋ค์ ์ฝ๋๋ฆฌ๋ทฐ๊น์ง..
์ฒ์์๋ ๋น์ฐํ(?) Context API์์ ๋ชจ๋ ์ํ๊ฐ์ ๊ด๋ฆฌํ๋ ค๊ณ ํ๋๋ฐ, ํํฐ๋๊ป์ "๊ตณ์ด...?"๋ผ๊ณ ํ์๋ ๋ฐ๋์ ํ์๋ค๊ณผ ๊ณ ๋ฏผํ๊ฒ ๋๋ค...๋ํ, ํ์๋ค๊ณผ ์์ ํ๋ค๊ฐ ์์์น ๋ชปํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค
Supabase์์ ์ฌ์ฉํ๋ ์ฉ์ด ๊ธฐ๋ฅ๋ค์ ์ ๋ฆฌํด๋ณด์๋ค..
ํ๋ก์ ํธ ์งํ์ค ๋ฌธ๋.. useState๋ก onChange ๊ฐ์ ๋ฐ์์ ์ฌ์ฉํ๋๊ฒ์ด ๋ฐ์ดํฐ ์ธก๋ฉด์์ ํ๋ํ๋ ๋ฐ์์ค๋ฏ๋ก ์ด๊ฒ์ด ๋นํจ์จ์ ์ด์ง ์์๊น ํ๋ ์๊ฐ์ด ๋ค์๋ค.
์ค๋์ ํ๋ก์ ํธ์ 5์ผ์ฐจ, ์ฌ์ค์ ๋ง์ง๋ง๋ .. ํ์ ๊ณผ์ ์์ ๊ฒช์ ์ฌ์ํ ์ค๋ฅ๋ค๊ณผ ์ฝ๋์ ์ธ ์ค์..! ๋ค์๊ธ ๋ฆฌ๋ง์ธ๋ ์ํค์
์ค๋ ๋๋์ด axios์ fetch์ ์ฐจ์ด๋ฅผ ์ ๋๋ก ์๊ฒ ๋๋ค. ๋ํ tanstack query์ ๋ํด์ ์ฒ์ ์ ํด๋ณด๋ฉด์ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ๋ฅผ ์ค์ด๋ ๊ณผ์ ์ด ๋๋ฌด ์ ๊ธฐํ๋ค
๋ผ์ฐํฐ์ testPage๋ testResultPage๋ฅผ ์ด๋ป๊ฒ ์ค์ผํ ๊น ์ฐพ์๋ณด๊ฒ ๋์๋ค.์์ฒ๋ผ ์นด๋ฉ์ผ์ด์ค๋ก ์์ฑํด์ผํ๋๊ฑด๊ฐ? ์๋๋ฉด ์ผ๋ฐฅ์ผ์ด์ค? ์๋๋ฉด ์๋ฌธ์๋ก ์ญ?
ํ ํฐ ๋ง๋ฃ ๊ด๋ฆฌ ๋ถ๊ฐ๋ฐ์ดํฐ ์บ์ฑ ๊ธฐ๋ฅ ๋ถ์ฌ์๋ฌ ์ฒ๋ฆฌ๊ฐ ๋ถ์์ ํ๋กํ ์ ๋ฐ์ดํธ ์๋์ ๋ฐ์ํ ๋ฌธ์ ..message: "ํ ํฐ ๊ฒ์ฆ์ ์คํจํ์ต๋๋ค."
React 18 ์ดํ๋ก ์๊ธด ๊ธฐ๋ฅ๋ค์ ์ค์ํ์ ์์๋ฅผ ๋ค์ด ์ ๋ฆฌํด๋ณด์๋ค.. ๋์ค์ ์ฌ์ฉํด์ผํ ๊ฒฝ์ฐ ์ฐธ๊ณ ํด๋ณด๋ฉด ์ข์๋ฏ ํ์ฌ ๊ธฐ๋ก์ ๋จ๊ฒจ๋ณธ๋ค.
tanstack-query์์ useQuery๋ฅผ ์ฌ์ฉํ๋ ๋์ค ์ผ๋ถ ๋ฐ์ดํฐ๋ง ํ์ํ ์ํฉ์ด ๋ฐ์ํ์๋ค. ๊ทธ๋ ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ํํฐ๋ง ํ๋ ์ฌ๋ฌ๊ฐ์ง์ ๋ฐฉ๋ฒ๋ค์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
ํด๋ผ์ด์ธํธ ์ํ์ ์๋ฒ ์ํ์ ์ฐจ์ด์ ๋ํด์ ์์๋ณด์, Access Token์ ์ด๋์ ๋ฃ์ด์ผ ์์ ํ ๊น? ๋ก์ปฌ? ์ธ์ ? ์ฟ ํค?... RTK์ Tanstack Query ์ด๋ป๊ฒ ๋ค๋ฅผ๊น?

Supabase์์ ์ด๋ฏธ์ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ๊ตฌํํ ๋ storage์ ๋จผ์ ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ ค์ผ ํ๋ ์ ์ด ๋ง์์ ๋ค์ง ์์๋ค. ์๋ฒ์ ์ฌ๋ฆฌ์ง ์๊ณ ์ด๋ฏธ์ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ํด์ค์ ์๋ ๋ฐฉ๋ฒ์ด ์์๊น?
์ค๋ React ํ๋ก์ ํธ์์ ์นด์นด์ค๋งต API๋ฅผ ์ฌ์ฉํด ์ง๋ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํ๋ค. ํนํ ์ขํ์ ์ฃผ์๋ฅผ ์๋ก ๋ณํํ๋ ์ง์ค์ฝ๋ฉ ๊ธฐ๋ฅ์ด ํ์ํ๋๋ฐ, ์ฒ์ ์จ๋ณด๋ ๊ฑฐ๋ผ ์ด๊ฒ์ ๊ฒ ์ฝ์ง์ ๋ง์ด ํ๋ค.
์ค๋์ ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์์ ํ๋ฉด์ ๋ช ๊ฐ์ง ์๋ก์ด ๊ธฐ์ ๋ค์ ๋ํด์ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค...!
๋ ํ์ ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ React์์ ํ์ฉํ๋ ๋ฐฉ๋ฒ๊น์ง ๊ณต๋ถํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ง ์ฌ์ฉํ๋ค๊ฐ ํ์ ์คํฌ๋ฆฝํธ๋ก ๋์ด์ค๋ ์๋ก์ด ๊ฐ๋ ๋ค์ด ๋ง์๊ณ , ํนํ ํ์ ์์คํ ๊ณผ ์ ๋ค๋ฆญ, ์ ํธ๋ฆฌํฐ ํ์ ๋ฑ์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค...

์ค๋ ํฌ๋๋ฆฌ์คํธ ๋ง๋ค๋ค๊ฐ ๊ฐ์๊ธฐ ์๋ ์ค๋ฅ๋ฅผ ๋ง๋ฌ๋ค.ํ๋ก์ ํธ๋ฅผ ์ค์นํ๊ณ ํ๋ก์ ํธ๋ฅผ ์ด์๋๋ฐ.. ์จํต ๋นจ๊ฐ์ค ์ฒ์ง์๋ค..์๊ณ ๋ณด๋ yarn ๋ช ๋ น์ด๋ฅผ ์๋ชป ์ ๋ ฅํด์ Yarn ๋ฒ์ ์ด ์ ๊ทธ๋ ์ด๋๋๋ฉฐ PnP(Plug'n'Play) ๋ชจ๋๊ฐ ํ์ฑํ๋ ๊ฒ์ด ์์ธ์ด์๋ค.
์ค๋์ Next.js์์ ์ฌ์ฉํ ์ ์๋ 4๊ฐ์ง ๋ ๋๋ง ๋ฐฉ์์ ๋ํด ์์๋ดค๋ค. ๊ฐ ๋ฐฉ์์ด ์ด๋ป๊ฒ ๋ค๋ฅธ์ง, ์ด๋จ ๋ ์ฐ๋ฉด ์ข์์ง, ๊ทธ๋ฆฌ๊ณ ์ ๋๋ก ๋์ํ๋์ง ์ด๋ป๊ฒ ํ ์คํธํ๋์ง ์ ๋ฆฌํ๋ค.
ํ์คํ ์ฟผ๋ฆฌ์์ ๋๊ด์ ์ ๋ฐ์ดํธ์ ๋ํด์ ์ ๋ฆฌํด๋ณด์๋ค..
ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐจ์ด๋ถํฐ ๋ ๋๋ง ๋ฉ์๋ ๋ฐฉ์๊น์ง ๋ค๋ฃจ์ด ๋ณด์๋ค.
Next js๋ผ์ฐํ ๊ณผ ๋ ๋๋ง ๋ฐฉ์์ ๋ํด์ ์ ๋ฆฌํด ๋ณด์๋ค.
Next.js์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ํต์ฌ ๊ธฐ๋ฅ๋ค์ ์ ๋ฆฌํด๋ณด์๋ค.
๋ฉด์ ์์๋ ๋์ฌ ์ ์๋ Next.js์์์ Image์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ Next.js๊ฐ TailwindCSS๋ฅผ ๊ถ์ฅํ๋ ์ด์ ์ ๋ํด์ ์ ๋ฆฌํด ๋ณด์๋ค.
๋ฆฌํ๋ก์ฐ/๋ฆฌํ์ธํธ, ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ง ๊ตฌ์กฐ, ํฌ๋ฆฌํฐ์ปฌ ๋ ๋๋ง ํจ์ค ์ด๋ ๊ฒ 3๊ฐ์ง ๊ธฐ์ ๋ฉด์ ๋๋น ์ ๋ฆฌํ๊ณ ์ง์์๋ตํ ๋ด์ฉ๋ค์ ์ ๋ฆฌํด๋ณด์๋ค
์ค๋์ ๋ฉด์ ์ฃผ์ ๋์๋ฐ ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ํ๋ฆ (์ฝ๋ฐฑ, ํ๋ก๋ฏธ์ค, async/await)๋ธ๋ผ์ฐ์ ์ ์ฅ์ ๋น๊ต (localStorage/sessionStorage/Cookie)React ์ํ ๊ด๋ฆฌ์ ํ๋ฆ (useState, useReducer, ์ํ ํ๋ฆ ์ค๋ช )
์ด์ ๋ JavaScript Promise์ React๊ด๋ จํ์ฌ ๊ธฐ์ ๋ฉด์ ์ ์ฃผ์ ๋ฅผ ์ก๊ณ ์ง์์๋ต์ ์งํํ์๋ค..
์ค๋์ ์ฃผ์ ๋ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง๊ณผ ์บก์ฒ๋ง๋จ๊ณจ ๋ฉด์ ์ง๋ฌธ์ธ๋งํผ ์ฝ๋์ ์ค์ ์ฝ๋์์ ๋ค๋ฃจ์ด๋ณธ ๊ฒฝํ์ ๋น๋์ด ์ด์ผ๊ธฐ ํด๋ณด๋ฉด ์ข์๋ฏํ๋ค
์ค๋์ ์ด๋ฒคํธ ์์๊ณผ ๊ด๋ จ๋ ๊ธฐ์ ๋ฉด์ ๋๋น๋ฅผ ์ค๋นํด๋ณด์๋ค.
์ค๋์ TypeScript๋ฅผ ๋ค์ ํ๋ฒ ์ดํด๋ณด์๋ค. ์ฃผ๋ก ์ฌ์ฉํ๋๊ฒ๋ง ์ฌ์ฉํด์จ์ง๋ผ ํท๊ฐ๋ฆด ์ ์๋ ํค์๋๋ฅผ ๊ฐ๊ณ ๊ณต๋ถํด๋ณด์๋ค.
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก ์ทจ์ ์ ์ค๋นํ๋ฉด์ TypeScript์ ๋ํ ์ดํด๋ฅผ ์ ๋ฆฌํ๊ณ ์, ์ค์ ๋ฉด์ ์์ ์์ฃผ ๋์ค๋ TypeScript ํต์ฌ ๊ฐ๋ ๋ค์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
์ค๋์ ๋ฆฌ์กํธ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋ค์ ์ฌ์ ๋ฆฝํ๋ฉด์ ์ตํ๋ ๋ถ๋ถ๋ค์ ๋ค์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค..!!
์ทจ์ ์ค๋น์ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ค์ ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ & ๋ต๋ณ ์ด์ ๋ฆฌReact, JavaScript, ์ต์ ํ, ๋น๋๊ธฐ๊น์ง ํ ๋ฒ์! ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ์ 10๊ฐ์ง์ ๋ ์ ๋ฆฌํด๋ณด์๋ค.
๊ธฐ์ ๋ฉด์ ์ ๋๋นํ์ฌ 5์ ์ผ๋ก ์ง๋ฌธ์ง๋ฅผ ์ถ๋ ค๋ณด์์ต๋๋ค.
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ํ ์คํธ ์ฝ๋ ์์ฑ ์ ํ์ํ ๋ค์ํ ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ค๊ณผ ๊ฐ๋ ์ ์ ํํ ์ดํดํ๊ณ ํ์ฉํด๋ณด์.

Next๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ๋ค์ํ ์บ์ฑ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํฉ๋๋ค. ์ค๋์ ์บ์ฑ ๊ธฐ๋ฅ๋ค์ ๋ํด์ ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
ํ๋ก ํธ์๋ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ์ธ์ ๊ฐ๋ ๋ง์ฃผ์น๊ฒ ๋๋ '์ํธํ'... ๐คฏ "RSA๋ ์์ ํ๋ฐ ๋๋ฆฌ๊ณ , AES๋ ๋น ๋ฅธ๋ฐ ํค ์ ๋ฌ์ด ์ํํ๋ค๊ณ ?" ๊ทธ๋ผ ๋ ๋ค ์ฐ๋ฉด ๋๋ ๊ฑฐ ์๋๊ฐ? ๐ค ํ๋ฐฐ ๋ณด๋ด๋ ๊ฒ์ฒ๋ผ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ํ์ด๋ธ๋ฆฌ๋ ์ํธํ!