React ๋์์ฑ ๋ชจ๋์ ์ค๋จ ๊ฐ๋ฅํ ๋ ๋๋ง ๊ธฐ๋ฅ์ ๋ํด ์์๋ณด์ธ์. ๋ณต์กํ React ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ, ๋ฐ์์ฑ, ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ธ ์ ์์ต๋๋ค.
React ๋์์ฑ ๋ชจ๋: ์ค๋จ ๊ฐ๋ฅํ ๋ ๋๋ง์ผ๋ก ๋ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ ๊ตฌํํ๊ธฐ
React๋ ๋์ ์ด๊ณ ์ํธ์์ฉ์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ๊ฐ์ฅ ์ ํธ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณต์กํด์ง์ ๋ฐ๋ผ ๋ฐ์์ฑ์ ์ ์งํ๊ณ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ ์ ์ ๋ ์ด๋ ค์์ง๊ณ ์์ต๋๋ค. React ๋์์ฑ ๋ชจ๋๋ ์ค๋จ ๊ฐ๋ฅํ ๋ ๋๋ง์ ํ์ฑํํ์ฌ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋๋ ์๋ก์ด ๊ธฐ๋ฅ๋ค์ ์งํฉ์ผ๋ก, React๊ฐ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๊ณ ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ค๋๋ค.
๋์์ฑ ๋ชจ๋๋ ๋ฌด์์ธ๊ฐ?
๋์์ฑ ๋ชจ๋๋ ๋จ์ํ ์ผ๊ณ ๋๋ ์ค์์น๊ฐ ์๋๋๋ค. ์ด๋ React๊ฐ ์ ๋ฐ์ดํธ์ ๋ ๋๋ง์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๊ทผ๋ณธ์ ์ธ ๋ณํ์ ๋๋ค. ์ด ๋ชจ๋๋ UI์ ๋ฐ์์ฑ์ ์ ์งํ๊ธฐ ์ํด ์์ ์ ์ฐ์ ์์๋ฅผ ์ ํ๊ณ ์ค๋ ์คํ๋๋ ๋ ๋๋ง์ ์ค๋จํ๋ ๊ฐ๋ ์ ๋์ ํฉ๋๋ค. ๋ง์น ์๋ จ๋ ์งํ์๊ฐ ์ค์ผ์คํธ๋ผ๋ฅผ ์ด๋๋ฉฐ ๋ค์ํ ์ ๊ธฐ(์์ )๋ฅผ ๊ด๋ฆฌํ๊ณ ์กฐํ๋ก์ด ์ฐ์ฃผ(์ฌ์ฉ์ ๊ฒฝํ)๋ฅผ ๋ณด์ฅํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
์ ํต์ ์ผ๋ก React๋ ๋๊ธฐ์ ๋ ๋๋ง ๋ชจ๋ธ์ ์ฌ์ฉํ์ต๋๋ค. ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ๋ฉด React๋ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๊ณ DOM ๋ณ๊ฒฝ ์ฌํญ์ ๊ณ์ฐํ ๋ค์ UI๋ฅผ ์ ๋ฐ์ดํธํ์ต๋๋ค. ์ด๋ ํนํ ๋ณต์กํ ์ปดํฌ๋ํธ๋ ๋น๋ฒํ ์ ๋ฐ์ดํธ๊ฐ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋์ ๋๋ ์ง์ฐ์ ์ ๋ฐํ ์ ์์์ต๋๋ค. ๋ฐ๋ฉด, ๋์์ฑ ๋ชจ๋๋ React๊ฐ ์ฐ์ ์์์ ๋ฐ๋ผ ๋ ๋๋ง ์์ ์ ์ผ์ ์ค์ง, ์ฌ๊ฐ ๋๋ ํฌ๊ธฐํ ์ ์๊ฒ ํ์ฌ, ํค๋ณด๋ ์ ๋ ฅ์ด๋ ๋ฒํผ ํด๋ฆญ๊ณผ ๊ฐ์ด ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์น๋ ์์ ์ ๋ ๋์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํฉ๋๋ค.
๋์์ฑ ๋ชจ๋์ ํต์ฌ ๊ฐ๋
๋์์ฑ ๋ชจ๋๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๋ ค๋ฉด ๋ค์ ํต์ฌ ๊ฐ๋ ์ ์ต์ํด์ง๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
1. ๋ฆฌ์กํธ ํ์ด๋ฒ(React Fiber)
ํ์ด๋ฒ๋ ๋์์ฑ ๋ชจ๋๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ React์ ๋ด๋ถ ์ํคํ ์ฒ์ ๋๋ค. ์ด๋ React์ ํต์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๊ตฌํํ ๊ฒ์ ๋๋ค. ๋๊ธฐ์ ์ผ๋ก ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ํํ๊ณ DOM์ ์ ๋ฐ์ดํธํ๋ ๋์ , ํ์ด๋ฒ๋ ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ์ผ์ ์ค์ง, ์ฌ๊ฐ ๋๋ ํฌ๊ธฐํ ์ ์๋ ๋ ์์ ์์ ๋จ์๋ก ๋๋๋๋ค. ๊ฐ ์์ ๋จ์๋ ํ์ด๋ฒ ๋ ธ๋๋ก ํํ๋๋ฉฐ, ์ด ๋ ธ๋์๋ ์ปดํฌ๋ํธ, props, ์ํ์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค.
ํ์ด๋ฒ๋ฅผ React์ ๋ด๋ถ ํ๋ก์ ํธ ๊ด๋ฆฌ ์์คํ ์ด๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ๊ฐ ๋ ๋๋ง ์์ ์ ์งํ ์ํฉ์ ์ถ์ ํ๊ณ React๊ฐ ์ฐ์ ์์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค์ ๋ฐ๋ผ ์์ ๊ฐ์ ์ ํํ ์ ์๋๋ก ํฉ๋๋ค.
2. ์ค์ผ์ค๋ง ๋ฐ ์ฐ์ ์์ ์ง์
๋์์ฑ ๋ชจ๋๋ React๊ฐ ๋ค์ํ ์ ํ์ ์ ๋ฐ์ดํธ์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ ์ ์๋ ์ ๊ตํ ์ค์ผ์ค๋ง ๋ฉ์ปค๋์ฆ์ ๋์ ํฉ๋๋ค. ์ ๋ฐ์ดํธ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฅ๋ ์ ์์ต๋๋ค:
- ๊ธด๊ธ ์ ๋ฐ์ดํธ: ์ฌ์ฉ์ ์ ๋ ฅ์ด๋ ์ ๋๋ฉ์ด์ ๊ณผ ๊ฐ์ด ์ฆ๊ฐ์ ์ธ ์ฃผ์๊ฐ ํ์ํ ์ ๋ฐ์ดํธ์ ๋๋ค. React๋ ๋ฐ์์ฑ ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ด๋ฌํ ์ ๋ฐ์ดํธ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- ์ผ๋ฐ ์ ๋ฐ์ดํธ: ๋ ์ค์ํ๋ฉฐ ์ฌ์ฉ์ ๊ฒฝํ์ ํฐ ์ํฅ์ ๋ฏธ์น์ง ์๊ณ ์ง์ฐ๋ ์ ์๋ ์ ๋ฐ์ดํธ์ ๋๋ค. ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ๋ฐ์ดํธ๊ฐ ๊ทธ ์์ ๋๋ค.
- ๋ฎ์ ์ฐ์ ์์ ์ ๋ฐ์ดํธ: ๊ฐ์ฅ ์ค์๋๊ฐ ๋ฎ์ผ๋ฉฐ ๋ ์ค๋ ๊ธฐ๊ฐ ์ง์ฐ๋ ์ ์๋ ์ ๋ฐ์ดํธ์ ๋๋ค. ํ์ฌ ํ๋ฉด์ ๋ณด์ด์ง ์๋ ๊ทธ๋ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ฐ ๋ ์ ์์ต๋๋ค.
React๋ ์ด ์ฐ์ ์์ ์ง์ ์ ์ฌ์ฉํ์ฌ ๋ฉ์ธ ์ค๋ ๋ ์ฐจ๋จ์ ์ต์ํํ๋ ๋ฐฉ์์ผ๋ก ์ ๋ฐ์ดํธ๋ฅผ ์ค์ผ์ค๋งํฉ๋๋ค. ๋์ ์ฐ์ ์์์ ์ ๋ฐ์ดํธ์ ๋ฎ์ ์ฐ์ ์์์ ์ ๋ฐ์ดํธ๋ฅผ ๊ต์ฐจ ์คํํ์ฌ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ ์๋ UI์ ์ธ์์ ์ค๋๋ค.
3. ์ค๋จ ๊ฐ๋ฅํ ๋ ๋๋ง
์ด๊ฒ์ด ๋์์ฑ ๋ชจ๋์ ํต์ฌ์ ๋๋ค. ์ค๋จ ๊ฐ๋ฅํ ๋ ๋๋ง์ ๋ ๋์ ์ฐ์ ์์์ ์ ๋ฐ์ดํธ๊ฐ ๋ค์ด์ฌ ๊ฒฝ์ฐ React๊ฐ ๋ ๋๋ง ์์ ์ ์ผ์ ์ค์งํ ์ ์๊ฒ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด React๋ ๋ ๋์ ์ฐ์ ์์์ ์์ ์ผ๋ก ์ ํํ์ฌ ์๋ฃํ ํ ์๋์ ๋ ๋๋ง ์์ ์ ์ฌ๊ฐํ ์ ์์ต๋๋ค. ์ด๋ ์ค๋ ์คํ๋๋ ๋ ๋๋ง์ด ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ฌ UI๊ฐ ๋ฐ์ํ์ง ์๊ฒ ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
ํฐ ๋ฌธ์๋ฅผ ํธ์งํ๊ณ ์๋ค๊ณ ์์ํด ๋ณด์ธ์. ๋์์ฑ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์๊ธฐ ํ์ด์ง๋ฅผ ์คํฌ๋กคํ๊ฑฐ๋ ๋ฒํผ์ ํด๋ฆญํด์ผ ํ ๋, React๋ ๋ฌธ์ ํธ์ง ๊ณผ์ ์ ์ผ์ ์ค์งํ๊ณ ์คํฌ๋กค์ด๋ ๋ฒํผ ํด๋ฆญ์ ์ฒ๋ฆฌํ ๋ค์, ๋์ ๋๋ ์ง์ฐ ์์ด ๋ฌธ์ ํธ์ง์ ์ฌ๊ฐํ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์์ ์ํธ์์ฉ์ ์๋ตํ๊ธฐ ์ ์ ํธ์ง ๊ณผ์ ์ด ์๋ฃ๋์ด์ผ ํ๋ ๊ธฐ์กด์ ๋๊ธฐ์ ๋ ๋๋ง ๋ชจ๋ธ์ ๋นํด ์๋นํ ๊ฐ์ ์ ๋๋ค.
4. ํ์ ์ฌ๋ผ์ด์ฑ(Time Slicing)
ํ์ ์ฌ๋ผ์ด์ฑ์ ๋์์ฑ ๋ชจ๋์์ ์ค๋ ์คํ๋๋ ๋ ๋๋ง ์์ ์ ๋ ์์ ์์ ๋ฉ์ด๋ฆฌ๋ก ๋๋๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐ์ ์ ๋๋ค. ๊ฐ ์์ ๋ฉ์ด๋ฆฌ๋ ์งง์ ์๊ฐ ์กฐ๊ฐ(time slice) ๋ด์์ ์คํ๋๋ฏ๋ก React๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฉ์ธ ์ค๋ ๋์ ์ ์ด๊ถ์ ์๋ณดํ ์ ์์ต๋๋ค. ์ด๋ ๋จ์ผ ๋ ๋๋ง ์์ ์ด ๋ฉ์ธ ์ค๋ ๋๋ฅผ ๋๋ฌด ์ค๋ ์ฐจ๋จํ๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ UI๊ฐ ๋ฐ์์ฑ์ ์ ์งํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋ง์ ๊ณ์ฐ์ด ํ์ํ ๋ณต์กํ ๋ฐ์ดํฐ ์๊ฐํ๋ฅผ ์๊ฐํด ๋ณด์ธ์. ํ์ ์ฌ๋ผ์ด์ฑ์ ์ฌ์ฉํ๋ฉด React๋ ์๊ฐํ๋ฅผ ๋ ์์ ๋ฉ์ด๋ฆฌ๋ก ๋๋๊ณ ๊ฐ ๋ฉ์ด๋ฆฌ๋ฅผ ๋ณ๋์ ์๊ฐ ์กฐ๊ฐ์์ ๋ ๋๋งํ ์ ์์ต๋๋ค. ์ด๋ ์๊ฐํ๊ฐ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์๊ฐํ๊ฐ ๋ ๋๋ง๋๋ ๋์ ์ฌ์ฉ์๊ฐ UI์ ์ํธ์์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
5. ์์คํ์ค(Suspense)
์์คํ์ค๋ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ์ ๊ฐ์ ๋น๋๊ธฐ ์์
์ ์ ์ธ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฉ์ปค๋์ฆ์
๋๋ค. ์ด๋ฅผ ํตํด ๋น๋๊ธฐ ์ปดํฌ๋ํธ๋ฅผ <Suspense>
๊ฒฝ๊ณ๋ก ๊ฐ์ธ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ํ์๋ ๋์ฒด UI๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ค๋น๋๋ฉด React๋ ์๋์ผ๋ก ํด๋น ๋ฐ์ดํฐ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํฉ๋๋ค. ์์คํ์ค๋ ๋์์ฑ ๋ชจ๋์ ์ํํ๊ฒ ํตํฉ๋์ด, ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ React๊ฐ ๋์ฒด UI ๋ ๋๋ง์ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ๋ก๋ฉ ์คํผ๋๋ฅผ ํ์ํ๊ธฐ ์ํด ์์คํ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ฉด React๋ ์๋์ผ๋ก ๋ก๋ฉ ์คํผ๋๋ฅผ ์ค์ ๋ฐ์ดํฐ๋ก ๊ต์ฒดํ์ฌ ๋ถ๋๋ฝ๊ณ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
๋์์ฑ ๋ชจ๋์ ์ด์
๋์์ฑ ๋ชจ๋๋ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ค์ํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ํฅ์๋ ๋ฐ์์ฑ: React๊ฐ ์ค๋ ์คํ๋๋ ๋ ๋๋ง์ ์ค๋จํ๊ณ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ํจ์ผ๋ก์จ, ๋์์ฑ ๋ชจ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ ๋ฐ์์ ์ด๊ณ ์ํธ์์ฉ์ ์ผ๋ก ๋๊ปด์ง๊ฒ ํฉ๋๋ค.
- ๊ฐ์ ๋ ์ฌ์ฉ์ ๊ฒฝํ: ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ๋์ฒด UI๋ฅผ ํ์ํ๊ณ ์ค์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ๋ ๋ถ๋๋ฝ๊ณ ์ํํ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง๋๋ค.
- ๋ ๋์ ์ฑ๋ฅ: ๋์์ฑ ๋ชจ๋๊ฐ ๋ฐ๋์ ์ ์ฒด ๋ ๋๋ง ์๋๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ฒ์ ์๋์ง๋ง, ์์ ์ ๋ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ์์ผ ๊ธด ์ฐจ๋จ ๊ธฐ๊ฐ์ ๋ฐฉ์งํ๊ณ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ๋จ์ํ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ: ์์คํ์ค๋ ๋น๋๊ธฐ ์์ ์ฒ๋ฆฌ ๊ณผ์ ์ ๋จ์ํํ์ฌ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ์ ์์กดํ๋ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์๊ฒ ํฉ๋๋ค.
๋์์ฑ ๋ชจ๋์ ์ฌ์ฉ ์ฌ๋ก
๋์์ฑ ๋ชจ๋๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ ์ ์ฉํฉ๋๋ค:
- ๋ณต์กํ UI: ๋ง์ ์์ ์ปดํฌ๋ํธ๋ ๋ณต์กํ ๋ ๋๋ง ๋ก์ง์ ๊ฐ์ง ์ ํ๋ฆฌ์ผ์ด์ .
- ๋น๋ฒํ ์ ๋ฐ์ดํธ: ์ค์๊ฐ ๋์๋ณด๋๋ ๋ฐ์ดํฐ ์ง์ฝ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ด UI์ ๋น๋ฒํ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ .
- ๋น๋๊ธฐ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ: API๋ ๋ค๋ฅธ ๋น๋๊ธฐ ์์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ์์กดํ๋ ์ ํ๋ฆฌ์ผ์ด์ .
- ์ ๋๋ฉ์ด์ : ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ธฐ ์ํด ์ ๋๋ฉ์ด์ ์ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ .
๋ค์์ ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋์์ฑ ๋ชจ๋๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์๋์ง์ ๋ํ ๋ช ๊ฐ์ง ๊ตฌ์ฒด์ ์ธ ์์ ๋๋ค:
- ์ ์์๊ฑฐ๋ ์น์ฌ์ดํธ: ์ํ ๋ชฉ๋ก ๋ฐ ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ฐ์์ฑ์ ๊ฐ์ ํฉ๋๋ค. ์ํ ์ด๋ฏธ์ง์ ์ค๋ช ์ ๊ฐ์ ธ์ค๋ ๋์ ๋ก๋ฉ ํ์๊ธฐ๋ฅผ ํ์ํ๊ธฐ ์ํด ์์คํ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์์ ๋ฏธ๋์ด ํ๋ซํผ: ์ฌ์ฉ์์ ํผ๋ ๋ฐ ์๋ฆผ ์ ๋ฐ์ดํธ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํต๋๋ค. ์ ๋๋ฉ์ด์ ๊ณผ ์ ํ์ ๋ถ๋๋ฝ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋์์ฑ ๋ชจ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ ์๊ฐํ ๋์๋ณด๋: ๋ณต์กํ ๋ฐ์ดํฐ ์๊ฐํ๋ฅผ ๋ ์์ ๋ฉ์ด๋ฆฌ๋ก ๋๋๊ณ ๋ณ๋์ ์๊ฐ ์กฐ๊ฐ์์ ๋ ๋๋งํ์ฌ ์ฑ๋ฅ์ ๊ฐ์ ํฉ๋๋ค.
- ํ์ ๋ฌธ์ ํธ์ง๊ธฐ: ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฐ์ ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ค๋ ์คํ๋๋ ์์ ์ด ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ๋ฐ์์ฑ ์๋ ํธ์ง ๊ฒฝํ์ ๋ณด์ฅํฉ๋๋ค.
๋์์ฑ ๋ชจ๋ ํ์ฑํ ๋ฐฉ๋ฒ
๋์์ฑ ๋ชจ๋๋ฅผ ํ์ฑํํ๋ ค๋ฉด React 18์ ๋์ ๋ ์๋ก์ด ๋ฃจํธ API ์ค ํ๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค:
createRoot
: ์๋ก์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ฑ ๋ชจ๋๋ฅผ ํ์ฑํํ๋ ๊ถ์ฅ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋์์ฑ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ ๋ฃจํธ๋ฅผ ์์ฑํฉ๋๋ค.hydrateRoot
: ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR) ๋ฐ ํ์ด๋๋ ์ด์ ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ง์ ์ผ๋ก ํ์ด๋๋ ์ด์ ํ์ฌ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๋ค์์ createRoot
์ฌ์ฉ ์์์
๋๋ค:
import React from 'react';
import { createRoot } from 'react-dom/client';
import App from './App';
const container = document.getElementById('root');
const root = createRoot(container); // ๋ฃจํธ๋ฅผ ์์ฑํฉ๋๋ค.
root.render(<App />);
์ฐธ๊ณ : ๋์์ฑ ๋ชจ๋๋ฅผ ์ฌ์ฉํ ๋ React 18์์๋ ReactDOM.render
๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋์ createRoot
๋๋ hydrateRoot
๋ฅผ ์ฌ์ฉํ์ธ์.
๋์์ฑ ๋ชจ๋ ๋์ : ์ ์ง์ ์ ๊ทผ
๊ธฐ์กด React ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ฑ ๋ชจ๋๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ํญ์ ๊ฐ๋จํ ๊ณผ์ ์ ์๋๋๋ค. ์ข ์ข ์ ์คํ ๊ณํ๊ณผ ์ ์ง์ ์ธ ์ ๊ทผ์ด ํ์ํฉ๋๋ค. ๋ค์์ ๊ถ์ฅ ์ ๋ต์ ๋๋ค:
- React 18๋ก ์ ๋ฐ์ดํธ: ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ React 18๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ๋๋ค.
- ๋์์ฑ ๋ชจ๋ ํ์ฑํ:
createRoot
๋๋hydrateRoot
๋ฅผ ์ฌ์ฉํ์ฌ ๋์์ฑ ๋ชจ๋๋ฅผ ํ์ฑํํฉ๋๋ค. - ์ ์ฌ์ ๋ฌธ์ ์๋ณ: React ๊ฐ๋ฐ์ ๋๊ตฌ ํ๋กํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ด๋ ์๊ธฐ์น ์์ ๋์์ ์ผ์ผํค๋ ์ปดํฌ๋ํธ๋ฅผ ์๋ณํฉ๋๋ค.
- ํธํ์ฑ ๋ฌธ์ ํด๊ฒฐ: ์ผ๋ถ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค๋๋ React ํจํด์ ๋์์ฑ ๋ชจ๋์ ์์ ํ ํธํ๋์ง ์์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํด์ผ ํ ์ ์์ต๋๋ค.
- ์์คํ์ค ๊ตฌํ: ์์คํ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํฉ๋๋ค.
- ์ฒ ์ ํ ํ ์คํธ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํ์ฌ ๋์์ฑ ๋ชจ๋๊ฐ ์์๋๋ก ์๋ํ๊ณ ๊ธฐ๋ฅ์ด๋ ์ฑ๋ฅ์ ํ๊ท๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
์ ์ฌ์ ์ธ ๋์ ๊ณผ์ ๋ฐ ๊ณ ๋ ค ์ฌํญ
๋์์ฑ ๋ชจ๋๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๋ช ๊ฐ์ง ์ ์ฌ์ ์ธ ๋์ ๊ณผ์ ์ ๊ณ ๋ ค ์ฌํญ์ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- ํธํ์ฑ ๋ฌธ์ : ์์ ์ธ๊ธํ๋ฏ์ด, ์ผ๋ถ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค๋๋ React ํจํด์ ๋์์ฑ ๋ชจ๋์ ์์ ํ ํธํ๋์ง ์์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํด์ผ ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ํน์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์์ฑํ๊ฑฐ๋ React 18์์ ์ ๊ณตํ๋ ์๋ก์ด API๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
- ์ฝ๋ ๋ณต์ก์ฑ: ๋์์ฑ ๋ชจ๋๋ ํนํ ๋น๋๊ธฐ ์์ ๊ณผ ์์คํ์ค๋ฅผ ๋ค๋ฃฐ ๋ ์ฝ๋๋ฒ ์ด์ค์ ๋ณต์ก์ฑ์ ๋ํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ๊ณ ๋์์ฑ ๋ชจ๋์ ํธํ๋๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ๋๋ฒ๊น : ๋์์ฑ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ํ๋ ๊ฒ์ ๊ธฐ์กด React ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฒ๊น ํ๋ ๊ฒ๋ณด๋ค ๋ ์ด๋ ค์ธ ์ ์์ต๋๋ค. React ๊ฐ๋ฐ์ ๋๊ตฌ ํ๋กํ์ผ๋ฌ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ๋์์ฑ ๋ชจ๋์ ๋์์ ์ดํดํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์ ๋๋ค.
- ํ์ต ๊ณก์ : ๋์์ฑ ๋ชจ๋์ ๊ด๋ จ๋ ํ์ต ๊ณก์ ์ด ์์ต๋๋ค. ๊ฐ๋ฐ์๋ ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ์๋ก์ด ๊ฐ๋ ๊ณผ API๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค. ๋์์ฑ ๋ชจ๋์ ๊ทธ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํด ๋ฐฐ์ฐ๋ ๋ฐ ์๊ฐ์ ํฌ์ํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
- ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR): SSR ์ค์ ์ด ๋์์ฑ ๋ชจ๋์ ํธํ๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์๋ฒ ๋ ๋๋ง ํ ํด๋ผ์ด์ธํธ ์ธก์์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ด๋๋ ์ด์
ํ๊ธฐ ์ํด
hydrateRoot
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋์์ฑ ๋ชจ๋๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๋์์ฑ ๋ชจ๋๋ฅผ ์ต๋ํ ํ์ฉํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ธ์:
- ์ปดํฌ๋ํธ๋ฅผ ์๊ณ ์ง์ค์ ์ผ๋ก ์ ์ง: ์์ ์ปดํฌ๋ํธ๋ ๋ ๋๋งํ๊ณ ์ ๋ฐ์ดํธํ๊ธฐ๊ฐ ๋ ์ฌ์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ํฐ ์ปดํฌ๋ํธ๋ฅผ ๋ ์๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ๋จ์๋ก ๋๋์ธ์.
- ๋ ๋๋ง ๋ฉ์๋์์ ๋ถ์ ํจ๊ณผ(Side Effects) ํผํ๊ธฐ: ๋ ๋๋ง ๋ฉ์๋์์ ์ง์ ๋ถ์ ํจ๊ณผ(์: ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, DOM ์กฐ์)๋ฅผ ์ํํ์ง ๋ง์ธ์. ๋ถ์ ํจ๊ณผ์๋
useEffect
ํ ์ ์ฌ์ฉํ์ธ์. - ๋ ๋๋ง ์ฑ๋ฅ ์ต์ ํ: ๋ถํ์ํ ์ฌ๋ ๋๋ง์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฉ๋ชจ์ด์ ์ด์
(
React.memo
), shouldComponentUpdate, PureComponent์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ธ์. - ๋น๋๊ธฐ ์์
์ ์์คํ์ค ์ฌ์ฉ: ๋น๋๊ธฐ ์ปดํฌ๋ํธ๋ฅผ
<Suspense>
๊ฒฝ๊ณ๋ก ๊ฐ์ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ๋์ฒด UI๋ฅผ ์ ๊ณตํ์ธ์. - ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ์ผ๋ง: React ๊ฐ๋ฐ์ ๋๊ตฌ ํ๋กํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์ฝ๋๋ฅผ ์ต์ ํํ์ธ์.
- ์ฒ ์ ํ ํ ์คํธ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ ์ ํ ํ ์คํธํ์ฌ ๋์์ฑ ๋ชจ๋๊ฐ ์์๋๋ก ์๋ํ๊ณ ๊ธฐ๋ฅ์ด๋ ์ฑ๋ฅ์ ํ๊ท๊ฐ ์๋์ง ํ์ธํ์ธ์.
React์ ๋์์ฑ ๋ชจ๋์ ๋ฏธ๋
๋์์ฑ ๋ชจ๋๋ React ์งํ์ ์ค์ํ ํ ๊ฑธ์์ ๋ํ๋ ๋๋ค. ์ด๋ ๋ฐ์์ ์ด๊ณ ์ํธ์์ฉ์ ์ธ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ ์ ์๋ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด์ด์ค๋๋ค. React๊ฐ ๊ณ์ํด์ ๋ฐ์ ํจ์ ๋ฐ๋ผ, ๋์์ฑ ๋ชจ๋ ์์ ๊ตฌ์ถ๋ ๋์ฑ ๋ฐ์ ๋ ๊ธฐ๋ฅ๊ณผ ์ต์ ํ๋ฅผ ๊ธฐ๋ํ ์ ์์ต๋๋ค. React๋ ๋ผํด ์๋ฉ๋ฆฌ์นด์์ ๋๋จ์์์์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํ ๊ธ๋ก๋ฒ ํ๊ฒฝ์์ ์ ์ ๋ ๋ง์ด ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ํนํ ์ธ๊ณ ์ฌ๋ฌ ์ง์ญ์์ ํํ ๋ณผ ์ ์๋ ์ ์ฌ์ ๊ธฐ๊ธฐ์ ๋๋ฆฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ์์๋ React ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์๋ํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
React์ ์ฑ๋ฅ์ ๋ํ ์ฝ์๊ณผ ๋์์ฑ ๋ชจ๋์ ํ์ด ๊ฒฐํฉ๋์ด, ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ํ๋ฅญํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ํ๋์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค๋ ฅ์ ์ธ ์ ํ์ด ๋ฉ๋๋ค. ๋ ๋ง์ ๊ฐ๋ฐ์๊ฐ ๋์์ฑ ๋ชจ๋๋ฅผ ์ฑํํจ์ ๋ฐ๋ผ, ๋ ๋ฐ์์ ์ด๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฉฐ ์ฌ์ฉ์ ์นํ์ ์ธ ์ฐจ์ธ๋ React ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด๊ฒ ๋ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค.
๊ฒฐ๋ก
React ๋์์ฑ ๋ชจ๋๋ ์ค๋จ ๊ฐ๋ฅํ ๋ ๋๋ง, ์ ๋ฐ์ดํธ ์ฐ์ ์์ ์ง์ , ๋น๋๊ธฐ ์์ ์ฒ๋ฆฌ ๊ฐ์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ์งํฉ์ ๋๋ค. ๋์์ฑ ๋ชจ๋์ ํต์ฌ ๊ฐ๋ ์ ์ดํดํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด React์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ๋ฐํํ๊ณ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ ์๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ๋์์ฑ ๋ชจ๋๋ฅผ ๋ฐ์๋ค์ด๊ณ React์ ํจ๊ป ์น์ ๋ฏธ๋๋ฅผ ๋ง๋ค์ด๊ฐ์ธ์!