์น ๊ฐ๋ฐ์ ์ธ๊ณ๋ ๋์์์ด ์งํํ๊ณ ์์ผ๋ฉฐ, ์ด๋ฌํ ๋ณํ ์์์ ๋ฆฌ์กํธ(React)๋ ํ๋ ์น ๊ฐ๋ฐ์ ํต์ฌ ์์๋ก ์๋ฆฌ ์ก์๋ค. ๋ฐ๋ผ์, ๋ง์ ์ฌ๋๋ค์ด ๋ฆฌ์กํธ๋ฅผ ๊ณต๋ถํ๊ณ , ๋ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ๋ฆฌ์กํธ๋ฅผ ์ดํดํ๊ณ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์๋ JSX์ ๋ํ ๊น์ ์ดํด๊ฐ ํ
์น ๊ฐ๋ฐ์ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ์ ์ปดํฌ๋ํธ๋ผ๋ ๋ ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ๋ฐ๋์ ์ดํดํด์ผ ํ๋ค. ์๋ฆฌ๋จผํธ๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฅ ์์ ๋จ์๋ก, ํ๋ฉด์ ํ์๋๋ ๋ด์ฉ์ ๊ธฐ์ ํ๋ค. ๋ฐ๋ฉด, ์ปดํฌ๋ํธ๋ ์ด๋ฌํ ์๋ฆฌ๋จผํธ๋ค์ ์กฐํฉํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ๋ธ๋ก์
๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ ์น ๊ฐ๋ฐ์ ํฐ ์ฅ์ ์ค ํ๋๋ ๋ฐ๋ก '์ ์ฐ์ฑ'์ด๋ค. ๊ทธ ์ค, ์ปดํฌ๋ํธ์ ์ ์ฐ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๋ ํต์ฌ ์์๋ ๋ฐ๋ก 'Props'์ 'Children'์ด๋ค.์ด๋ฒ ๊ธ์ ํตํด ์ด ๋ ๊ฐ์ง๋ฅผ ํตํด ์ด๋ป๊ฒ ๋ค์ํ๊ณ ์ ์ฐํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์๋์ง ์์๋ณด์.
๋ฆฌ์กํธ ๊ฐ๋ฐ์์ State์ ๊ด๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ ์ธ ๋ถ๋ถ์ ๋ค๋ฃจ๋ ๋ฐ ์์ด ํต์ฌ์ ์ธ ์ญํ ์ ํ๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ State์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ํ์ฉ ๋ฐฉ๋ฒ, ํนํ ์ฐธ์กฐํ State๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ์ฃผ์ํด์ผ ํ ์ ๋ค์ ๋ํด ์์ธํ ์ดํด๋ณด์.State๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ '
๋ฆฌ์กํธ ๊ฐ๋ฐ์์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋ ์ค ํ๋๋ ๋ฐ๋ก VirtualDOM์ด๋ค. ์ด๋ฒ ๊ธ์ ํตํด ๋ฆฌ์กํธ๊ฐ State ๋ณ๊ฒฝ์ ์ด๋ป๊ฒ ๋ฐ์ํ๊ณ , VirtualDOM์ด ์ค์ DOM๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง, ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ์ ์ค์ํ์ง ์์๋ณด์.state๊ฐ ๋ฐ๋์์ ๋ ๋ฆฌ์กํธ๊ฐ ๋ ๋๋งํ๋
React๋ ๋์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ๋ ๋งค์ฐ ์ ์ฉํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ๋ ๋๋งํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค. ์ด๋ฌํ ๊ณผ์ ์์์, ๋ฐฐ์ด ๋ฉ์๋์ ํ์ฉ์ ๋งค์ฐ ์ค์ํ ๋ถ๋ถ์ ์ฐจ์งํ๋ค. ํนํ, map, sort, filt
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์๊ฒ ๋์์ธ์ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋ชป์ง์๊ฒ ์ค์ํ๋ค. ํนํ CSS ์คํ์ผ๋ง๊ณผ ์ด๋ฏธ์ง ์ฒ๋ฆฌ๋ ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ์ง์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ํ์์ ์ด๋ผ ์๊ฐํ๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ฆฌ์กํธ์์๋ ์ด๋ป๊ฒ ๋์์ธ์ ์ ์ฉํ ์ ์์๊น?๋ฆฌ์กํธ์์๋
์น ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด, ํ๋ก ํธ์๋์์ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ ์ํฉ์ด ์์ฃผ ๋ฐ์ํ๋ค. ์ด๋ฐ ์ํฉ์์๋ ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ๊ฐ์ ํจ๊ณผ์ ์ธ ๋ฐ์ดํฐ ์ํต์ด ์ค์ํด์ง๋๋ฐ, ์ด๋ฅผ ์ํด์ React์ useEffect ํ ๊ณผ fetch API์ ์ฌ์ฉ๋ฒ์ ์ ํํ ์ดํดํด์ผ ํ๋ค
์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์ ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๋ ๊ฒ์ ํ์์ ์ธ ๋ถ๋ถ์ด๋ค. ํนํ, ์ ๋ ฅ ํผ์ ํตํด ์ฌ์ฉ์๋ก๋ถํฐ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ค์ํ ๊ณผ์ ์ค ํ๋์ผ ๊ฒ์ด๋ค.ํน๋ณํ๊ฒ, React๋ ๋์ ์ธ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ๊ฐ๋ ฅํ ๋๊ตฌ์ธ State๋ฅผ ์ ๊ณต
React ๊ฐ๋ฐ์์ useRef์ useEffect๋ ๋งค์ฐ ๊ฐ๋ ฅํ ํ (hook)๋ค๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ ํจ์จ์ฑ๊ณผ ๋ฐ์์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ค. ์ด ๋ ํ ์ ์ฌ์ฉํจ์ผ๋ก์จ, DOM ์์์ ์ง์ ์ ์ผ๋ก ์ ๊ทผํ๊ณ , ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ์ ๋ง์ถฐ ์ฌ์ด๋ ์ดํํธ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์
UseEffect๋ฅผ ์์ ํ๋ ๋์ค ์๋์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค. ์ด์ ๋ํด ํด๊ฒฐ์ ์ํด ๊ณต์๋ฌธ์์ ๊ตฌ๊ธ๋ง์ ํ๋ ์ค exhaustive-deps-warning์ด ๋ ๋ฟ๋ง์ด ์๋๋ผ ๋ค๋ฅธ ๋ถ๋ค๋ ๋งค์ฐ ์์ฃผ ๊ฒช๋ warning error์ด๋ฉฐ, ๋ค๋ฅธ ๋ง๋ก ๋ ๋ฟ๋ง ์๋๋ผ ๋ง
์์ ๊ธ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ผ๋ก Props๋ State์ ๋ํด ์์๋ดค์๋ค. ํ์ง๋ง, ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ฒ ๋๋ฉด Props๋ State๋ง์ผ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ค๋ฃจ๊ธฐ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๋ฆฌ์กํธ์์๋ ์ด๋ด ๋ Context๋ผ๋ ๊ฒ์ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฌ๋ค. ์ด๋ฒ
๋ณดํต ์น์ฌ์ดํธ์์๋ ์ฃผ์๋ฅผ ์ง์ ์ ๋ ฅํ๊ฑฐ๋, ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์๋ก์ด ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค๋ค. ๋ฆฌ์กํธ์์๋ ์ด๋ฅผ ๋ง๋ค๊ธฐ ์ํด์ ๋ฐ๋ก ์ถ๊ฐ์ ์ธ ๊ฐ๋ฐ์ด ํ์ํ๋ค. ์ด ๋, 'React Router'๋ผ๋ ๊ฑธ ์ฌ์ฉํ๋ฉด ์ด๋ฅผ ํธ๋ฆฌํ๊ฒ ํ ์ ์๋๋ฐ, React Router๋ ๋ฆฌ์กํธ ์ปด
์์ ๊ธ์ ํตํด React Router์ ํ์ฉ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ดค์๋ค. ์ด๋ฒ ๊ธ์ ํตํด์๋, ์ด์ ๋ ๋์๊ฐ React Router๋ฅผ ํตํด ํ์ด์ง๋ฅผ ์ด๋ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ณ ์ ํ๋ค.๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์ด์ง ์ด๋์ ๋งค์ฐ ์ค์ํ ๊ธฐ๋ฅ์ด๋ค. ์ด๋ฒ ๊ธ์ ํตํด ๋ฆฌ์กํธ