๐ฅ [React] Frontend ๊ธฐ์ ๋ฉด์ (React)
ํด๋น ํฌ์คํธ๋ ํ๋ก ํธ์ค๋์ ๊ธฐ์ ๋ฉด์ ์ค ๋ฆฌ์กํธ์ ๋ํด ์ค์ ์ ์ผ๋ก ๋ค๋ฃจ๋ ํ์ด์ง ์ ๋๋ค.
React
React ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Q.
React๋ Facebook์์ ๊ฐ๋ฐํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
React๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉ,
์ด๋ฅผ ํตํด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ ํฅ์
React์ ์๋ฆฌ, ํน์ง, ์ฅ๋จ์ ์ด ๋ฌด์์ธ๊ฐ์?
Q.
React ์ ํต์ฌ ๊ธฐ๋ฅ
1) Virtual-DOM
ํ์ด์ง๋ฅผ ๋๋๋ง ํ ๋ ์ค์ DOM tree ์ ๋ณ๋์ด ์ผ์ด๋ ์ ๋ชจ๋ ๋ถ๋ถ์ ๋ณ๊ฒฝํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๋ค.
ํ์ง๋ง React ๋ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๊ฐ์ DOM ํ๊ฒฝ์ ๊ตฌ์ถํ์ฌ
๋ณ๊ฒฝ ๋ ๋ถ๋ถ๋ง ์ค์ DOM ์ ์ ์ฉ์์ผ ๋ถํ์ํ Rerendering ์ ๋ฐฉ์งํ๋ค.
2) JSX ๋ฌธ๋ฒ
JavaScript ์์ HTML ๊ณผ ์ ์ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ๊ตฌ๋ฌธ์ ์์ฑ ํ ์ ์์ด
์ฝ๋์ ๊ฐ๋ ์ฑ์ด ํฅ์๋๊ณ ์ฌ์์ฐ์ฑ์ด ์ฆ๊ฐํจ
๋ผ์ดํ์ฌ์ดํด์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Q.
๋ฆฌ์กํธ์์์ ์๋ช ์ฃผ๊ธฐ๋ ์ฃผ๋ก ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๋งํฉ๋๋ค.
ํฌ๊ฒ ์ธ๊ฐ์ง๋ฅผ ๋ค ์ ์์ต๋๋ค.
1) ๋ง์ดํ (Mounting) : ์ปดํฌ๋ํธ๊ฐ DOM ์ ์ฝ์ ๋ ๋ ๋ฐ์ํ๋ ๋จ๊ณ
ex) constructor(), render(), componentDidMount()
2) ์ ๋ฐ์ดํ (Updating) : ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ ๋๊ณ DOM ์ Re-rendering ๋ ๋ ๋ฐ์ํ๋ ๋จ๊ณ
ex) render(), componentDidMount()
3) ์ธ๋ง์ดํ (Unmounting) : ์ปดํฌ๋ํธ๊ฐ DOM ์์ ์ ๊ฑฐ ๋ ๋ ๋ฐ์ํ๋ ๋จ๊ณ
ex) componentWillUnmount()
ํจ์ํ ์ปดํฌ๋ํธ์ ์ฅ์ ์ ์ค๋ช ํด์ฃผ์ธ์.
Q.
1) ๊ฐ๊ฒฐ์ฑ ํจ์ํ ์ปดํฌ๋ํธ๋ ํด๋์ค ๊ธฐ๋ฐ ์ปดํฌ๋ํธ๋ณด๋ค ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ ์ฝ๊ธฐ ์ฝ์ต๋๋ค. ํด๋์ค ๊ธฐ๋ฐ ์ปดํฌ๋ํธ์์ ํ์ํ boilerplate ์ฝ๋๊ฐ ์ค์ด๋ค์ด์ ๊ฐ๋ฐ์๊ฐ ์์ฑํด์ผ ํ ์ฝ๋ ์์ด ๊ฐ์ํฉ๋๋ค.
2) ์ฌ์ฌ์ฉ์ฑ
ํจ์ํ ์ปดํฌ๋ํธ๋ ์ผ๋ฐ JavaScript ํจ์์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ์ฌ์ฉ์ด ์ฝ์ต๋๋ค. ์ด๋ฌํ ํน์ฑ์ผ๋ก ์ธํด ์ปดํฌ๋ํธ์ ๋ก์ง์ ๋ถ๋ฆฌํ๊ณ , ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์์ ๋จ์๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋์ฑ ์ฌ์์ง๋๋ค.
3) ํ ์คํธ ์ฉ์ด์ฑ ํจ์ํ ์ปดํฌ๋ํธ๋ ์ ๋ ฅ๊ฐ(props)์ ๋ฐ์ ์ถ๋ ฅ๊ฐ์ ๋ฐํํ๋ ์์ ํจ์ ์ด๋ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ํ ์คํธํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๋ฉฐ ์ ๋ ฅ๊ฐ์ ์ฃผ๊ณ ์์ ์ถ๋ ฅ๊ฐ์ ํ์ธํ๋ ๊ฒ์ด ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ ๋๋ค.
React-Hook ์ ๋ํด ์ค๋ช ํ์ธ์.
Q.
ํจ์ํ ์ปดํฌ๋ํธ์์ ์ํ(state) ๊ด๋ฆฌ์ React์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
๋ํ ์ํ๊ด๋ฆฌ๋ฅผ ๊ฐ์ํ ์์ผ์ค๋๋ค.
1) useState : ํจ์ํ ์ปดํฌ๋ํธ์์ ์ํ๊ด๋ฆฌ๋ฅผ ํ ์ ์๊ฒ ๋จ
2) useEffect : ๋๋๋ง ์ ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ DOM ์กฐ์, ์๋ช ์ฃผ๊ธฐํจ์์ ๋น์ทํ๊ฒ ๋์ํจ
3) useCallback : ํจ์๋ฅผ ์บ์ฑํ์ฌ ๋๋๋ง ์ ๊ธฐ์กด ํจ์๋ฅผ ๋ค์ ์์ฑํ์ง ์์
4) useMemo : ๊ณ์ฐ๋น์ฉ์ด ํฐ ๊ฐ์ ์บ์ฑํ์ฌ ๋๋๋ง ์ ๋ค์ ๊ณ์ฐํ์ง ์๋๋ก ํจ
5) useRef : DOM ์์์ ์ง์ ์ ๊ทผํ๊ฑฐ๋ ํจ์ ์ปดํฌ๋ํธ ๋ด์์ ๊ฐ์ ๋ณ๊ฒฝ์ ์ถ์ ํ ๋ ์ฌ์ฉ
ํด๋์คํ ์ปดํฌ๋ํธ์์ ํจ์ํ ์ปดํฌ๋ํธ๋ก ๋ณ๊ฒฝํ ๋ ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์?
Q.
1) componentDidMount
1 2 3 4 5 6 7 8 9 10 11 12 // ํด๋์คํ ์ปดํฌ๋ํธ class ExampleComponent extends React.Component { componentDidMount() { // ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ํ์ ์คํ๋๋ ์์ } } // ํจ์ํ ์ปดํฌ๋ํธ function ExampleComponent() { useEffect(() => { // ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ํ์ ์คํ๋๋ ์์ }, []); }2) componentDidUpdate
1 2 3 4 5 6 7 8 9 10 11 12 13 // ํด๋์คํ ์ปดํฌ๋ํธ class ExampleComponent extends React.Component { componentDidUpdate(prevProps, prevState) { // ์ปดํฌ๋ํธ์ props ๋๋ state๊ฐ ์ ๋ฐ์ดํธ๋ ๋ ์คํ๋๋ ์์ } } // ํจ์ํ ์ปดํฌ๋ํธ function ExampleComponent({ prop }) { useEffect(() => { // ์ปดํฌ๋ํธ์ props๊ฐ ์ ๋ฐ์ดํธ๋ ๋ ์คํ๋๋ ์์ }, [prop]); }3) componentWillUnmount
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // ํด๋์คํ ์ปดํฌ๋ํธ class ExampleComponent extends React.Component { componentWillUnmount() { // ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋ ์คํ๋๋ ์์ } } // ํจ์ํ ์ปดํฌ๋ํธ function ExampleComponent() { useEffect(() => { return () => { // ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋ ์คํ๋๋ ์์ }; }, []); }
Props Drilling ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Q. Props Drilling ์ ์์ ์ปดํฌ๋ํธ์์ ํ์ ์ปดํฌ๋ํธ๋ก props ๋ฅผ ์ ๋ฌํ๋ ๊ณผ์ ์ ๋งํจ
์ผ๋ฐ์ ์ผ๋ก ์ปดํฌ๋ํธ ๊ฐ์ ํต์ ์ ์ํด ์ฌ์ฉ
์ฅ์
๋ฐ์ดํฐ ํ๋ฆ์ด ๋ช ํํ๊ณ ์์ธก ๊ฐ๋ฅํฉ๋๋ค.
์ปดํฌ๋ํธ ๊ฐ์ ์์กด์ฑ์ด ๋ฎ์์ง๋ฏ๋ก ์ฝ๋ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํฉ๋๋ค.
๋จ์
์ค๊ฐ์ ์๋ ์ปดํฌ๋ํธ๋ค์ด ๋ฐ์ดํฐ์ ๊ด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ๊ฐ
๊ณ์ํด์ ์ ๋ฌ๋์ด์ผ ํ๋ฏ๋ก ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ปดํฌ๋ํธ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง์๋ก Props Drilling์ด ๋ ๊น์ด์ง ์ ์๊ณ , ์ด๋ ์ฝ๋๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
React ์์ Key Props ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ฅผ ์ค๋ช ํด์ฃผ์ธ์.
Q.
ํด๋น ์ด์ ๋ React ์ Virtual DOM ์ ๊ทธ ์ด์ ๊ฐ ์กด์ฌํฉ๋๋ค.
์ค์ DOM ์ ๋ฐ์ํ๊ธฐ ์ ์ ์ด์ Virtual DOM ๊ณผ ๋น๊ต๋ฅผ ํ๋๋ฐ,
key ๊ฐ์ list ์ ์ ๊ณตํ๋ฉด ํจ์จ์ ์ผ๋ก ๋น๊ตํ์ฌ ๊ด๋ฆฌ ๋ฐ ๋๋๋ง์ ์งํํ๊ธฐ ๋๋ฌธ์ ๋๋ค.