๐ Do it! ๋ฆฌ์กํธ ํ๋ก๊ทธ๋๋ฐ ์ ์: ์ด๋ณด ๊ฐ๋ฐ์๋ ๋ฐ๋ผํ ์ ์๋ ์๋ฒฝ ๊ฐ์ด๋
A. ๋ฆฌ์กํธ๋ ๋ฌด์์ผ๊น์?
๋ฆฌ์กํธ๋ Facebook์์ ๊ฐ๋ฐํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ์ DOM(Document Object Model)์ ํ์ฉํ์ฌ ํจ์จ์ ์ธ ๋ ๋๋ง์ ์ ๊ณตํ๋ฉฐ, ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ํตํด ์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ ๋๋ค. ๋ณธ ๊ฐ์ด๋์์๋ ๋ฆฌ์กํธ์ ํต์ฌ ๊ฐ๋ ๊ณผ ์ค๋ฌด ํ์ฉ ๋ฐฉ๋ฒ์ ์์ธํ ์์๋ด ๋๋ค.
B. ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ํ๊ธฐ
๋ฆฌ์กํธ ๊ฐ๋ฐ์ ์ํ ํ๊ฒฝ ์ค์ ์ Node.js์ npm(๋๋ yarn) ์ค์น๋ถํฐ ์์ํฉ๋๋ค. ๋ณธ ์ ์์๋ ๋จ๊ณ๋ณ๋ก ์์ธํ ์ค์น ๊ณผ์ ๊ณผ create-react-app์ ์ด์ฉํ ํ๋ก์ ํธ ์์ฑ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ๊ฐ ๋จ๊ณ๋ง๋ค ๋ฐ์ํ ์ ์๋ ์ค๋ฅ์ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ ํจ๊ป ์ ๊ณตํ์ฌ ์ด๋ณด ๊ฐ๋ฐ์๋ ์ฝ๊ฒ ๋ฐ๋ผํ ์ ์๋๋ก ํฉ๋๋ค. (์์ ๋ช ๋ น์ด ๋ฐ ์คํฌ๋ฆฐ์ท ํฌํจ)
C. JSX์ ์ปดํฌ๋ํธ ์ดํดํ๊ธฐ
๋ฆฌ์กํธ์ ํต์ฌ ๊ฐ๋ ์ธ JSX(JavaScript XML)์ ์ปดํฌ๋ํธ์ ๋ํด ์์๋ด ๋๋ค. JSX๋ฅผ ์ฌ์ฉํ์ฌ HTML๊ณผ JavaScript ์ฝ๋๋ฅผ ํจ๊ป ์์ฑํ๋ ๋ฐฉ๋ฒ๊ณผ ํจ์ํ ์ปดํฌ๋ํธ, ํด๋์คํ ์ปดํฌ๋ํธ์ ์ฐจ์ด์ ์ ๋น๊ตํ๋ฉฐ ์์ ์ฝ๋๋ฅผ ํตํด ์ค์ตํด๋ด ๋๋ค. props์ state์ ๊ฐ๋ ์ ์ดํดํ๊ณ , ๊ฐ๋จํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด๋ณด๋ ์ค์ต์ ํตํด ์ค๋ ฅ์ ํฅ์์ํต๋๋ค.
D. ์ํ ๊ด๋ฆฌ์ ์ด๋ฒคํธ ํธ๋ค๋ง
์ปดํฌ๋ํธ์ ์ํ(state)๋ฅผ ๊ด๋ฆฌํ๊ณ ์ฌ์ฉ์์ ์ด๋ฒคํธ(event)์ ๋ฐ์ํ๋ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค. useState์ useEffect hook์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ด๋ฒคํธ ํธ๋ค๋ง์ ํตํด ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์์ ๋ฅผ ํตํด ์์ธํ ์ค๋ช ํฉ๋๋ค. ์ํ ๋ณํ์ ๋ฐ๋ฅธ ์ปดํฌ๋ํธ์ ๋ ๋๋ง ๊ณผ์ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
E. ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋
ํด๋์คํ ์ปดํฌ๋ํธ์ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋(componentDidMount, componentDidUpdate, componentWillUnmount ๋ฑ)์ ๋ํด ์์๋ด ๋๋ค. ๊ฐ ๋ฉ์๋๊ฐ ์คํ๋๋ ์์ ๊ณผ ์ญํ ์ ์ดํดํ๊ณ , ์ค์ ์ฝ๋๋ฅผ ํตํด ์ ์ฉ ๋ฐฉ๋ฒ์ ์ตํ๋๋ค. ํจ์ํ ์ปดํฌ๋ํธ์์์ useEffect hook์ ์ด์ฉํ ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ ๋ฐฉ๋ฒ ๋ํ ๋ค๋ฃน๋๋ค.
F. ๋ฆฌ์กํธ Router์ ๋ผ์ฐํ
React Router๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ค ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค. BrowserRouter, Route, Link ์ปดํฌ๋ํธ๋ฅผ ํ์ฉํ์ฌ ํ์ด์ง ๊ฐ ์ด๋์ ๊ตฌํํ๊ณ , URL์ ๋ฐ๋ผ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ ๋ฐฉ๋ฒ์ ์ค์ตํฉ๋๋ค. Nested Routes์ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ ๋ค๋ฃน๋๋ค.
G. ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ(API ํธ์ถ)
fetch API๋ axios ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ์ธ๋ถ API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ด๋ฅผ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๊ฒ ๋ฉ๋๋ค. ๋น๋๊ธฐ ์ฒ๋ฆฌ, ์๋ฌ ํธ๋ค๋ง, ๋ก๋ฉ ์ํ ํ์ ๋ฑ ์ค์ ๊ฐ๋ฐ์์ ํ์ํ ์ค์ํ ๊ธฐ์ ๋ค์ ๋ค๋ฃน๋๋ค.
H. ๊ณ ๊ธ ๋ฆฌ์กํธ ๊ธฐ๋ฒ
Context API๋ฅผ ์ฌ์ฉํ ์ํ ๊ด๋ฆฌ, Custom Hooks๋ฅผ ์ด์ฉํ ์ฝ๋ ์ฌ์ฌ์ฉ, Redux์ ๊ฐ์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ฐ ํ์ฉ๋ฒ ๋ฑ ๊ณ ๊ธ ๋ฆฌ์กํธ ๊ธฐ๋ฒ์ ๋ํด ์๊ฐํฉ๋๋ค. ์ค์ ํ๋ก์ ํธ์์ ํ์ฉํ ์ ์๋ ํจ์จ์ ์ธ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ค์ ๋ค๋ฃน๋๋ค.
I. ์ค์ ํ๋ก์ ํธ
ํ์ตํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๊ฐ๋จํ ์ค์ ํ๋ก์ ํธ๋ฅผ ์งํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ๋จํ TODO ๋ฆฌ์คํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ๋ธ๋ก๊ทธ ๊ฒ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด๋ณด๋ฉฐ ์ค๋ ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. (ํ๋ก์ ํธ ๊ตฌํ ๊ณผ์ ๋ฐ ์์ค์ฝ๋ ์ ๊ณต)
J. ๋ง๋ฌด๋ฆฌ
๋ณธ ๊ฐ์ด๋๋ฅผ ํตํด ๋ฆฌ์กํธ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ ๊ฐ๋ ๋ถํฐ ์ค์ ํ์ฉ๊น์ง ๋ฐฐ์ฐ์ จ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์์ผ๋ก ๋์ฑ ์ฌ๋์๋ ํ์ต์ ํตํด ๋ฆฌ์กํธ ์ ๋ฌธ๊ฐ๋ก ์ฑ์ฅํ์๊ธธ ์์ํฉ๋๋ค. ์ฐธ๊ณ ์๋ฃ ๋ฐ ์ถ๊ฐ ํ์ต ๋งํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
“`
..