๐น React ๋?
- Facebook์์ ๋ง๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ์ปดํฌ๋ํธ๋ก ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ฌ์ฉ
- ๋จ์ํ ์น์ฌ์ดํธ๋ถํฐ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ๊น์ง ๋ค์ํ๊ฒ ํ์ฉ ๊ฐ๋ฅ
๐น React์ ํต์ฌ ๊ฐ์น
1. ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ
- ์ปดํฌ๋ํธ๋ผ๋ ๋ ๋ฆฝ์ ์ธ UI ๋จ์๋ก ์น ์ดํ๋ฆฌ์ผ์ด์ ๊ตฌ์ฑ
- ํ๋์ ํ์ด์ง๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ์ปดํฌ๋ํธ๋ก ๋๋๋ฉด ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง
2. ๊ฐ์ DOM(Virtual DOM)
- ์ค์ DOM์ ์ง์ ์กฐ์ํ๋ ๋์ , ๊ฐ์ DOM์ ์ฌ์ฉํด ์ฑ๋ฅ์ ์ต์ ํํจ
- ๋ณ๊ฒฝ ์ฌํญ์ ๋ฉ๋ชจ๋ฆฌ ์์์ ๋น๊ต(diffing)ํ ํ, ์ต์ํ์ ์ ๋ฐ์ดํธ๋ง ์ค์ DOM์ ๋ฐ์ํด์ ๋ ๋๋ง ์ฑ๋ฅ์ ํฅ์์ํด(๋ฐ๋ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธ)
- ์๋ฅผ ๋ค์ด, ์ผํ๋ชฐ์์ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐํ ๋ ์ ์ฒด ํ๋ฆฌ์ง๊ฐ ์๋ก๊ณ ์นจ๋์ง ์๋ ์ด์ ์
3. ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ(One-way Data Flow)
- ๋ถ๋ชจ → ์์ ๋ฐฉํฅ์ผ๋ก๋ง ๋ฐ์ดํฐ๊ฐ ํ๋ฆ
- Props๋ฅผ ์ฌ์ฉํด ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ ์ ๋ฌํจ
4. ์ํ ๊ด๋ฆฌ(State Management)
- ์ปดํฌ๋ํธ๋ state๋ผ๋ ๋ด๋ถ ์ํ๋ฅผ ๊ฐ์ง ์ ์์
- useState ํ ์ ์ฌ์ฉํ๋ฉด ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์์
5. ์ ๋ฆฌ
- react๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ผ๋ก UI๋ฅผ ๊ตฌ์ฑํด ์ ์ง๋ณด์์ ํ์ฅ์ฑ์ด ๋ฐ์ด๋จ
- ๊ฐ์ DOM, ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ, ์ํ๊ด๋ฆฌ(useState, Redux)๋ฅผ ํตํด ์ฑ๋ฅ ์ต์ ํ
๐ ์ค์ DOM vs ๊ฐ์ DOM
- DOM ์ด๋?
- DOM(Document Object Model)์ ์น์ฌ์ดํธ์ ํ๋ฉด์ ๊ตฌ์ฑํ๋ ์์๋ค(HTML ํ๊ทธ๋ค)์ ํธ๋ฆฌ(Tree) ๊ตฌ์กฐ๋ก ํํํ ๊ฒ
- ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค ๋ HTML ์ฝ๋๊ฐ ๋ธ๋ผ์ฐ์ ์์ ํด์๋๋ฉด์ DOM ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง
- ์ฝ๊ฒ ๋งํ๋ฉด, HTML์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋๋ก ๋ณํํ ๊ตฌ์กฐ
- ์ค์ DOM ์ด๋?
- ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ HTML ํ๊ทธ๋ค๋ก ๋ง๋ค์ด์ง ํ๋ฉด ๊ตฌ์กฐ, HTML ์ฝ๋๊ฐ ๋ธ๋ผ์ฐ์ ์์ ํด์๋๋ฉด ์ค์ ๋ก DOM์ด ๋ง๋ค์ด์ง
- ์ค์ DOM ํน์ง: ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ํ๋ฉด์ ๊ทธ๋ ค์ค, ๋ณ๊ฒฝ์ด ์์ ๋๋ง๋ค ์ ์ฒด DOM์ ๋ค์ ๊ทธ๋ ค์ผ ํจ → ๋๋ฆผ!, ์์ ๋ณ๊ฒฝ์ด ์๊ฒจ๋ ์ ์ฒด ํ์ด์ง๊ฐ ์ ๋ฐ์ดํธ๋ ์ ์์
- ๊ฐ์ DOM์ด๋?
- ์ค์ DOM์ ์ง์ ์กฐ์ํ์ง ์๊ณ , ๊ฐ์ง DOM(๊ฐ์ DOM)์ ๋จผ์ ๋ณ๊ฒฝํ ํ, ํ์ํ ๋ถ๋ถ๋ง ์ค์ DOM์ ๋ฐ์ํ๋ ๋ฐฉ์
- ๋์ ๋ฐฉ์: ๋จผ์ ๊ฐ์ DOM์ ๋ณ๊ฒฝ → ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ๋น๊ต(diffing)ํ ํ, ํ์ํ ๋ถ๋ถ๋ง ์ค์ DOM์ ๋ฐ์ → ๋ธ๋ผ์ฐ์ ๋ ์ต์ํ์ ์ ๋ฐ์ดํธ๋ง ์งํํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฆ
- ๊ฐ์ DOM ํน์ง: ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ฐพ์์ ์ ๋ฐ์ดํธ → ๋น ๋ฆ, ์ค์ DOM์ ์ง์ ์กฐ์ํ์ง ์์ → ์ฑ๋ฅ ์ต์ ํ ๊ฐ๋ฅ, ํ๋ฉด์ด ์์ฃผ ๋ณ๊ฒฝ๋๋ ์ผํ๋ชฐ, SNS, ๋์๋ณด๋ ๊ฐ์ ๊ณณ์์ ์ ์ฉ
- ๋น๊ตํ๊ธฐ → ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๊ธ์๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ
- ์ค์ DOM ๋ฐฉ์(๋๋ฆผ): ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ ์ฒด ํ๋ฉด์ด ๋ค์ ๊ทธ๋ ค์ง → ๋ณ๊ฒฝํ ํ์ ์๋ ์์๋ ๋ค์ ์ ๋ฐ์ดํธ๋จ → ๋นํจ์จ์
- ๊ฐ์ DOM ๋ฐฉ์(๋น ๋ฆ): ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๊ฐ์ DOM์์ ๋จผ์ ๋ณ๊ฒฝํจ → ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ฐพ์์ ์ค์ DOM์ ๋ฐ์ → ๋ถํ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ค์ฌ์ ๋ ๋น ๋ฅด๊ฒ ๋์
- ๊ฐ์ DOM์ด ์ค์ํ ์ด์
- ์ค์ DOM์ ์ง์ ์กฐ์ํ๋ฉด ๋๋ฆผ → React๋ ๊ฐ์ DOM์ ์ฌ์ฉํด์ ๋น ๋ฅด๊ฒ ์ ๋ฐ์ดํธ
๐ ๋ฆฌ์กํธ๋ ๋น๋๊ธฐ์ผ๊น?
- ๋ฆฌ์กํธ์ ๊ธฐ๋ณธ ๋์์ “๋๊ธฐ์ ”
- ๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
- ์ํ(state)๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํ๋ฉด์ด ๋ค์ ๋ ๋๋ง ๋๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์
- ํ์ง๋ง ์ผ๋ฐ์ ์ธ ๋๊ธฐ ์ฝ๋์ฒ๋ผ ํ ์ค์ฉ ์คํ๋จ
- ํ์ง๋ง, ๋ฆฌ์กํธ์ ์ํ ์
๋ฐ์ดํธ๋ "๋น๋๊ธฐ์ " ์ผ๋ก ๋์ํจ!
- react์ setState๋ ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ ์ ์์
- ์ฆ, ๋ฐ๋ก ์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์๊ณ , ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ์ํ ๋ณ๊ฒฝ์ ๋ชจ์์ ์ฒ๋ฆฌํจ (์ฌ๋ฌ ๋ฒ ํธ์ถํด์ ์ต์ข ์ ์ผ๋ก ํ ๋ฒ๋ง ์ํ๋ฅผ ์ ๋ฐ์ดํธ)
- ๊ทธ๋์ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ ๋ ์ด์ ์ํ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ ํจ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํจ
- ๋ฆฌ์กํธ๋ "๋น๋๊ธฐ ์์
" ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊น?
- ๋ฆฌ์กํธ์์๋ ๋น๋๊ธฐ ์์ (์: API ํธ์ถ, ๋ฐ์ดํฐ ์์ฒญ)์ ํ ๋ useEffect์ fetch ๊ฐ์ ๋น๋๊ธฐ ํจ์(async/await)๋ฅผ ์ฌ์ฉํจ
- useEffect ๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ ๋๋ง๋ ๋ API๋ฅผ ํธ์ถํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์จ ํ ์ํ๋ฅผ ์
๋ฐ์ดํธ ํจ
→ ์ด ๊ณผ์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋ผ์ UI๊ฐ ๋ฉ์ถ์ง ์๊ณ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ฌ ์ ์์
- ๊ฒฐ๋ก : ๋ฆฌ์กํธ๋ ๋น๋๊ธฐ์ผ๊น !?
- ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฆฌ์กํธ ์์ฒด๋ ๋๊ธฐ์ ์ผ๋ก ๋์ํจ
- ํ์ง๋ง setState๋ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์์(์ต์ ํ๋ฅผ ์ํด ํ ๋ฒ์ ์ฒ๋ฆฌ)
- ๋น๋๊ธฐ ์์
(API ํธ์ถ ๋ฑ)์ useEffect + async/await ๋ฅผ ํ์ฉํด์ ์ฒ๋ฆฌํจ
→ ์ฆ! ๋ฆฌ์กํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐ์ ์ด์ง๋ง, ์ผ๋ถ ๋์(setState, API ํธ์ถ ๋ฑ)์ ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋จ