Firebase๋ ์ธ์ฆยท๋ฐ์ดํฐ๋ฒ ์ด์คยทํธ์คํ ๊ฐ์ ์ฑ์ ํ์ ๋ฐฑ์๋ ๊ธฐ๋ฅ์ ์๋ฒ ์์ด ๋ฐ๋ก ์ฐ๊ฒ ํด์ฃผ๋ Google์ ์ฌ์ธ์ ๊ฐ๋ฐ ํ๋ซํผ
React Router DOM์ SPA ํ๊ฒฝ์์ History API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก URL๊ณผ ์ปดํฌ๋ํธ๋ฅผ ์ฐ๊ฒฐํด, ์๋ก๊ณ ์นจ ์์ด ํ์ด์ง ์ ํยท์ค์ฒฉ ๋ ์ด์์ยท๋์ ๋ผ์ฐํ ๊น์ง ์ผ๊ด๋๊ฒ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ React ๊ณต์ ๋ผ์ฐํ ์๋ฃจ์
๋ฆฌ์กํธ์์๋ ์ํ(state)๊ฐ UI๋ฅผ ๊ฒฐ์ ํ๊ณ , ์ด๋ฒคํธ๋ ์ํ๋ง ๋ณ๊ฒฝํ๋ฉฐ, UI ๋ณํ๋ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ํตํด ์๋์ผ๋ก ๋ฐ๋ผ์จ๋ค
React์์ ๋ ๋๋ง ๋ฌธ์ ๋ ๋๋ถ๋ถ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ ์ฐธ์กฐ๋ฅผ ์๋ชป ๋ค๋ฃฌ ๋ฌธ์ ๋ค
ํด๋ฆญ ์ด๋ฒคํธ๋ props๋ก ์๋๋ก ์ ๋ฌ๋๊ณ , key๋ก ๋ฆฌ์คํธ๋ฅผ ๊ตฌ๋ถํ๋ฉฐ, stepNumber๋ก ํ์ฌ ์์น๋ฅผ ๋ฐ๊ฟ history๋ฅผ ์๋ผ ์ ์ํ๋ฅผ ๋ง๋ค์ด React ์๊ฐ์ฌํ์ ๊ตฌํํ๋ค
React 16.8์ Hooks(useState, useEffect ๋ฑ)๋ ํด๋์คํ ์ปดํฌ๋ํธ์ ๋ณต์กํ ์๋ช ์ฃผ๊ธฐ์ ์ํ ๊ด๋ฆฌ๋ฅผ ํจ์ํ์ผ๋ก ํตํฉํ์ฌ, ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ๋ก์ง์ ์ฌ์ฌ์ฉ์ฑ์ ๊ทน๋ํํ๊ณ ๋ ์ง๊ด์ ์ธ ์ค๊ณ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค
์๋ฒ๊ฐ React๋ก HTML์ ๋จผ์ ๋ง๋ค๊ณ , ๋ธ๋ผ์ฐ์ ๋ ๊ทธ HTML์ ๋ฐ์์ hydrate๋ก React ์ฑ์ผ๋ก ๋์ด๋ฆฐ๋ค
์๋ฒ๊ฐ React๋ก HTML์ ๋จผ์ ๋ง๋ค๊ณ , ๋ธ๋ผ์ฐ์ ๋ ๊ทธ HTML์ ๋ฐ์์ hydrate๋ก React ์ฑ์ผ๋ก ๋์ด๋ฆฐ๋ค
์๋ฒ๊ฐ React๋ก HTML์ ๋จผ์ ๋ง๋ค๊ณ , ๋ธ๋ผ์ฐ์ ๋ ๊ทธ HTML์ ๋ฐ์์ hydrate๋ก React ์ฑ์ผ๋ก ๋์ด๋ฆฐ๋ค
๋ฆฌ์กํธ ํ ์ โAPI ์ฌ์ฉ๋ฒโ์ด ์๋๋ผ, ํด๋ก์ ยท์ฐธ์กฐ ๋น๊ตยทํจ์ ์ฌ์คํ์ด๋ผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์๋ฆฌ ์์์ ๋ ๋๋ง๊ณผ ๋ถ์ํจ๊ณผ๋ฅผ ์๋์ ์ผ๋ก ์ ์ดํ๊ธฐ ์ํ ์ค๊ณ ๋๊ตฌ
ํ์ ์คํฌ๋ฆฝํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ ์ฐํจ์ ์ ์งํ๋ฉด์, ํ์ ์ ํตํด ๋ฐํ์ ์๋ฌ๋ฅผ ์์ฑ ๋จ๊ณ์์ ๋ฏธ๋ฆฌ ์ฐจ๋จํด ๋๊ท๋ชจยท์ค๋ฌด ๊ฐ๋ฐ์ ์์ ํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ์ธ์ด
๋ฆฌ์กํธ๋ JSX๋ฅผ ๊ฐ์ฒดํํ๊ณ ํ์ด๋ฒ(Fiber) ์ํคํ ์ฒ ๊ธฐ๋ฐ์ ๊ฐ์ DOM ์ฌ์กฐ์ ์ ํตํด, UI ์ ๋ฐ์ดํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์ค์ผ์ค๋งํ๊ณ ๋ ๋๋ง ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ฆฌ์กํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋๋ฑ ๋น๊ต(Object.is ๊ธฐ๋ฐ ์์ ๋น๊ต)๋ก ๊ฐ์ด ์๋ ์ฐธ์กฐ์ ๋ณ๊ฒฝ ์ฌ๋ถ๋ฅผ ๊ฐ์งํด ๋ ๋๋ง์ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์, ๊ฐ์ฒดยทํจ์์ ์ฐธ์กฐ ์์ ์ฑ์ด ๊ณง ๋ ๋๋ง ์ฑ๋ฅ์ ์ข์ฐํจ
๋ชจ๋์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ๊ฐ๋ณ์ ์์๋ก์, ๊ธฐ๋ฅ์ ๊ธฐ์ค์ผ๋ก ํ์ผ ๋จ์๋ก ๋ถ๋ฆฌ๋์ด ๋ ์์ ์ธ ์ค์ฝํ๋ฅผ ๊ฐ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ์กฐ๊ฐ
์๋ฐ์คํฌ๋ฆฝํธ์ ์๋ฌ ์ฒ๋ฆฌ๋ ์๋ฌ๋ฅผ ์์ ๋ ๊ฒ์ด ์๋๋ผ, try...catch, throw, ๊ทธ๋ฆฌ๊ณ ์ ํ ๊ท์น์ ์ดํดํด ๋๊ธฐยท๋น๋๊ธฐ ์ํฉ์์๋ ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ ํต์ ํ๋ ๊ฒ
์ ๋๋ ์ดํฐ์ async/await๋ ์คํ์ ์ค๋จยท์ฌ๊ฐํ๋ฉฐ ๋น๋๊ธฐ ํ๋ฆ๊ณผ ์ดํฐ๋ ์ด์ ์ ์ ์ดํ๊ธฐ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ ์ด ์ถ์ํ ๊ฐ๋
Promise๋ฅผ ํตํ ๋น๋๊ธฐ ํ๋ฆ์ ๊ตฌ์กฐํ, async/await์ ์ํ ๊ฐ๋ ์ฑ ๊ฐ์ , ๊ทธ๋ฆฌ๊ณ fetch๋ฅผ ํตํ HTTP ํต์ ๊ณผ ์๋ฌ ํ๋จ์ ๋ช ํํ ์ฑ ์ ๋ถ๋ฆฌ
REST API๋ HTTP ํ๋กํ ์ฝ์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ์ฌ ์์(URI), ํ์(Method), ํํ(JSON)์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์น ์ค๊ณ ์ํคํ ์ฒ
Ajax๋ ์๋ฒ์ ๋น๋๊ธฐ ํต์ ์ ํตํด ์น ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ์ง ์๊ณ ํ์ํ ๋ฐ์ดํฐ๋ง ๊ฐฑ์ ํ๋ ๊ธฐ์
๋น๋๊ธฐ๋ ๋์์ ์คํํ๋ ๊ธฐ์ ์ด ์๋๋ผ ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ก ์ค๊ณ๋ ์คํ ๊ตฌ์กฐ
ํ์ด๋จธ ๊ธฐ๋ฐ ์ ์ด๋ ์กฐ๊ฑด๋ฌธ์ด ์๋๋ผ ์๊ฐ๊ณผ ์ํ์ ๋์ ๊ฒฐ๊ณผ๋ก ๋์ํ๋ค.
์ด๋ฒคํธ๋ ์ฌ์ฉ์๋ ์์คํ ์ ๋ณํ๊ฐ ๋ฐ์ํ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์งํ๊ณ , ๋ฏธ๋ฆฌ ๋ฑ๋ก๋ ํธ๋ค๋ฌ๋ฅผ ํธ์ถํด ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ๊ฒฐ์ ํ๋ ๋ฉ์ปค๋์ฆ
DOM์ HTML ๋ฌธ์๋ฅผ ๊ฐ์ฒด ํธ๋ฆฌ๋ก ํํํ ๊ตฌ์กฐ๋ก, ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์น ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์กฐ์
๋ธ๋ผ์ฐ์ ๋ ๋ฆฌ์์ค ์์ , ๋ ๋ ํธ๋ฆฌ ์์ฑ, ํ๋ฉด ์ถ๋ ฅ ๊ณผ์ ์ ๊ฑฐ์ณ ๋ ๋๋ง ์ํ
๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ณตํต๋ ๋ฐ๋ณต ๋ฐฉ์์ผ๋ก ์ํํ ์ ์๋๋ก ํด์ฃผ๋ ํ๋กํ ์ฝ
๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ณตํต๋ ๋ฐ๋ณต ๋ฐฉ์์ผ๋ก ์ํํ ์ ์๋๋ก ํด์ฃผ๋ ํ๋กํ ์ฝ
๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ณตํต๋ ๋ฐ๋ณต ๋ฐฉ์์ผ๋ก ์ํํ ์ ์๋๋ก ํด์ฃผ๋ ํ๋กํ ์ฝ
๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ณตํต๋ ๋ฐ๋ณต ๋ฐฉ์์ผ๋ก ์ํํ ์ ์๋๋ก ํด์ฃผ๋ ํ๋กํ ์ฝ
๊ณ ์ ํ๊ณ ์ถฉ๋์ด ์๋ ์๋ณ์
ํด์๋งต์ ์ฌ์ฉํด ID์ ๋๋ค์์ ์ ์ฅํ๊ณ , ๊ธฐ๋ก์ ๋ ๋ฒ ์ํํ๋ ๋ฐฉ์์ผ๋ก ์ต์ ํ๋ ์ถ๋ ฅ์ ์์ฑ
ํ์ค ๋นํธ์ธ ๊ฐ์ฒด String
ํจ์จ์ ์ธ ํจํด ๋งค์นญ๊ณผ ๋ฌธ์์ด ์ฒ๋ฆฌ, ์ ๊ทํํ์
์ซ์ํ์ด์ง๋ง ์ํ์ ์ผ๋ก ์ ํจํ ์ซ์๊ฐ ์๋ ๊ฐ, NaN
ํด์ ํ ์ด๋ธ์ ํ์ฉํ ๋ฐ์ดํฐ ์นด์ดํ
๋ฐฐ์ด์ ๋ํด์ ์์๋ณด์
ํด์ ํ ์ด๋ธ์ ํ์ฉํ ๋ฐ์ดํฐ ์นด์ดํ
ES6์ ์ถ๊ฐ๊ธฐ๋ฅ
๋ฌธ์์ด์ ํด์๊ฐ์ ์ด์ฉํด ํจ์จ์ ์ผ๋ก ๋ฌธ์์ด ํฌํจ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ํ์ต
๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ์ ํํ์ด์ ํ๋กํ ํ์ ๊ธฐ๋ฐ ์์์ ์ถ์ํํ์ฌ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP), ํด๋์ค
ํจ์์ ๊ทธ ํจ์๊ฐ ์ ์ธํ ๋ ์์ปฌ ํ๊ฒฝ์ ์กฐํฉ, ํด๋ก์
ํจ์จ์ ์ธ ํด์ ๊ธฐ๋ฐ ์ ๊ทผ์ ํตํด ๋ ์ซ์์ ํฉ์ด ํน์ ๊ฐ(target)์ด ๋๋์ง๋ฅผ ๋น ๋ฅด๊ฒ ํ๋จ
ํ๋ฅผ ํ์ฉํ ๊ท์น๊ณผ ์์๋ฅผ ์ ํํ ์ดํดํ๊ณ , ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ๊ตฌํ
ํจ์์ ํธ์ถ ๋ฐฉ์์ ๋ฐ๋ผ this๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ด ๊ฒฐ์ ๋๋ this ๋ฐ์ธ๋ฉ
ํจ์์ ํธ์ถ ๋ฐฉ์์ ๋ฐ๋ผ this๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ด ๊ฒฐ์ ๋๋ this ๋ฐ์ธ๋ฉ
๊ฐ์ฒด๊ฐ ์์์ ํตํด ๋ค๋ฅธ ๊ฐ์ฒด์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๊ณต์ ํ ์ ์๋๋ก ์ฐ๊ฒฐํ๋ ๋ฉ์ปค๋์ฆ, ํ๋กํ ํ์
์๋ฐ์คํฌ๋ฆฝํธ ํจ์์ ์ผ๊ธ๊ฐ์ฒด๋ก์์ ์๋ฏธ๋ ๋ฌด์์ผ๊น
ํ๋ฅผ ํ์ฉํ ์์ ์๋ฃ ์์ ์ ๋ฐ๋ผ ์์ ๋ค์ ๋ฐฐํฌ ๋ฌถ์์ผ๋ก ๋๋๋ ๋ก์ง์ ์ค๊ณ
๊ฐ์ฒด๋ฆฌํฐ๋ด ์ธ์ ์์ฑ์ ํจ์์ ์ํ ๊ฐ์ฒด ์์ฑ๋ฐฉ์๋ฅผ ์ดํดํด๋ณด์
๊ฐ์ฒด๋ฆฌํฐ๋ด ์ธ์ ์์ฑ์ ํจ์์ ์ํ ๊ฐ์ฒด ์์ฑ๋ฐฉ์๋ฅผ ์ดํดํด๋ณด์
๊ฐ์ฒด๋ฆฌํฐ๋ด ์ธ์ ์์ฑ์ ํจ์์ ์ํ ๊ฐ์ฒด ์์ฑ๋ฐฉ์๋ฅผ ์ดํดํด๋ณด์
๊ฐ์ฒด๋ฆฌํฐ๋ด ์ธ์ ์์ฑ์ ํจ์์ ์ํ ๊ฐ์ฒด ์์ฑ๋ฐฉ์๋ฅผ ์ดํดํด๋ณด์
๊ฐ์ฒด๋ฆฌํฐ๋ด ์ธ์ ์์ฑ์ ํจ์์ ์ํ ๊ฐ์ฒด ์์ฑ๋ฐฉ์๋ฅผ ์ดํดํด๋ณด์
๊ฐ์ฒด๋ฆฌํฐ๋ด ์ธ์ ์์ฑ์ ํจ์์ ์ํ ๊ฐ์ฒด ์์ฑ๋ฐฉ์๋ฅผ ์ดํดํด๋ณด์
๋งํฌ๋ ๋ฆฌ์คํธ์ ์คํ์ ํ์ฉํด ๋๋ ๋ฐ์ดํฐ์ ์ญ์ , ๋ณต์, ์ด๋ ์์ ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ์ค๊ณ ์ดํด
๋งํฌ๋ ๋ฆฌ์คํธ์ ์คํ์ ํ์ฉํด ๋๋ ๋ฐ์ดํฐ์ ์ญ์ , ๋ณต์, ์ด๋ ์์ ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ์ค๊ณ ์ดํด
๋ด๋ถ ์ฌ๋กฏ๊ณผ ๋ด๋ถ ๋ฉ์๋๋ฅผ ํตํด ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ดํดํด๋ณด์
๋ณ์ ์ ์ธ์ const, let์ ์ฌ์ฉํด์ผ ํ๋ ์ด์
์คํ์ LIFO ๊ตฌ์กฐ์ ์ดํด๋ฅผ ๋ฐํ์ผ๋ก ๋ฐ์ดํฐ์ ์ํ ๋ณํ์ ํจ์จ์ ์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
์ ์ญ๋ณ์์ ๋ฌธ์ ์ ๊ณผ ๋์ ๋ฐฉ์ ํ๊ตฌ
ํจ์จ์ ์ธ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ ๋ฌธ์ ํด๊ฒฐ๋ฐฉ๋ฒ(feat. ์คํ)
์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ํจ์จ์ ์ธ ํจํด ์ฒ๋ฆฌ์ ์ต์ข ์ํ๋ฅผ ํ์ธ
์คํ์ LIFO(ํ์ ์ ์ถ)๋ฅผ ์ดํดํด๋ณด์
์คํ์ ํ์ฉํ์ฌ ๊ดํธ์ ์ง์ ๋ง์ถ๋ ๋ฐฉ๋ฒ
์ค์ฝํ, ์ ํจ๋ฒ์์ ๋ํด์ ํ๊ตฌํด๋ณด์
์คํ์ ์ดํดํ๊ณ ์คํ์ ์ด์ฉํ์ฌ ๊ดํธ์ง ๋ง์ถ๊ธฐ
๋ฐฉ๋ฌธํ ๊ณ ์ ํ ๊ฒฝ๋ก์ ์๋ฅผ ๊ณ์ฐ
์์๊ฐ๊ณผ ๊ฐ์ฒด ๋น๊ต, ์์ ํ์ ๊ณผ ๊ฐ์ฒด ํ์ ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ป๊ฒ ๋ค๋ฅผ๊น?
๋๋ฌํ ์ฌ์ฉ์ ์์ ์คํจ์จ์ ์ ํํ๊ฒ ๊ณ์ฐํ๊ณ , ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ์ ๋ ฌํ์ฌ ์ฌ๋ฐ๋ฅธ ์์๋ก ์คํ ์ด์ง๋ฅผ ๋ฐํ
์์๊ฐ๊ณผ ๊ฐ์ฒด ๋น๊ต, ์์ ํ์ ๊ณผ ๊ฐ์ฒด ํ์ ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ด๋ป๊ฒ ๋ค๋ฅผ๊น?
๊ฐ์ฒด ๋ฆฌํฐ๋ด, ๊ฐ์ฒด๋ ๋ฌด์์ธ์ง ์ฐฌ์ฐฌํ ์๋ฏธํด๋ณด๊ณ ์ ํ๋ค.
ํ๋ ฌ์ ๊ณฑ์ ์ ํตํด ํ๋ ฌ์ ๊ตฌ์กฐ๋ฅผ ์ดํด
ํ์ ๋ณํ๊ณผ ๋จ์ถํ๊ฐ, ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ ๋ณํ๊ณผ ๋จ์ถํ๊ฐ์ ๋ํด์ ์์๋ณด์
ํจํด๊ณผ ์ผ์น ๋ถ์ผ์น ํ์ธ
์ซ์๋ฐฐ์ด์์ ์๋ก ๋ค๋ฅธ ๋ ์๋ฅผ ๋ํด์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๊ธฐ
์ฐ์ฐ์, ๋ค์ํ ์ฐ์ฐ์์ ๋ํด ์ดํด๋ณด์
๋ฐฐ์ด ์ค๋ณต๊ฐ์ ์ ๊ฑฐํ๊ณ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด๋ณด์
๋ฐ์ดํฐ ํ์ , ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ ๊ณตํ๋ ๋ฐ์ดํฐ ํ์ ์ ํน์ง์ ์ดํด๋ณด์
๋ฐฐ์ด ์ ๋ ฌํ๊ธฐ, ์ ์ฝ์กฐ๊ฑด์ ์ค์์ฑ๊ณผ sort ๋ฉ์๋ ์ดํดํ๊ธฐ
ํํ์, ๊ฐ์ด๋ผ๋ ์ฉ์ด๋ฅผ ๋ช ํํ๊ฒ ์ดํดํด๋ณด์.
๋ณ์, ๋ณ์๋ ๋ฌด์์ด๋ฉฐ, ์ ์กด์ฌํ๋์ง, ์์ง์ ๋ณ์๋ฅผ ์ด๋ป๊ฒ ์ ์ธํ๋์ง๋ฅผ ํตํด ๋ณ์๋ฅผ ์ดํดํด๋ณด์.