๋๋์ด ๋ง์ง๋ง ์ฅ์ ๋๋ค. ์ด ์ฑ ์ ์ฝ๋ ๋ชจ๋ ๋ถ๋ค์ด ์ฝ๋ ๋ด๋ด ์ฆ๊ฑฐ์ ๊ธธ ๋ฐ๋ผ๋ฉฐ ๋ฆฌ์กํธ๋ฅผ ์์๊ฐ๋๋ฐ ํฐ ๋์์ด ๋์๊ธธ ๋ฐ๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฆฌ์กํธ๋ฅผ ๋ฐฐ์ฐ๊ณ ์ถ์ ์น๊ตฌ, ๊ฐ๋ฐ์, ์ปค๋ฎค๋ํฐ์ ์๊ฐํด์ฃผ๊ธธ ๋ฐ๋๋๋ค. ๋ฌผ๋ก ๋ฌด๋ฃ๋ก ์๋ ค์ค์ผ ํฉ๋๋ค. 5๋ถ์ ํฌ์ํด ์๋ง์กด ๋๋ ๊ตฟ๋ฆฌ๋์ ์ํ์ ๋จ๊ฒจ์ฃผ์๋ฉด ์ ์์๊ฒ ํฐ ํ์ด ๋ ๊ฒ์ ๋๋ค.
์ด ์ฑ ์ ๋๋ธ ๋ง์น ํ ์ด๋ป๊ฒ ๋ฌด์์ ๊ณต๋ถํ๋ฉด ๋ ์ง ๊ถ๊ธํ์ จ์ฃ ? ์ด ์ฑ ์์ ์ค์ตํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ ์ํค๊ฑฐ๋ ๋๋ง์ ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ง๋ค์ด ๋ณด๋ฉฐ ๋ฆฌ์กํธ ์ฌํ ํ์ต์ ์์ํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ด์ฉ์ ๋ฐฐ์ฐ๊ธฐ ์ ์ ๊ฐ๋จํ ์๊ท๋ชจ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด์ ๋ฐฐ์ด ๋ด์ฉ์ ์ถฉ๋ถํ ํ์ตํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ผ์ฃผ์ผ ๋์ ๊ฐ๋ฐํด๋ณด๊ณ ๋ฐฐํฌํ ๊ฒฐ๊ณผ๋ฌผ์ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๋ณด์ฌ์ฃผ์ธ์. ๊ทธ๋ฆฌ๊ณ ์ ์๊ฒ๋ ํธ์ํฐ๋ก ์๋ ค์ฃผ๊ธธ ๋ฐ๋๋๋ค. ์ด ์ฑ ์ ๋ง์น ์ฌ๋ฌ๋ถ๋ค์ด ์ด๋ค ๊ฒ์ ๋ง๋ค์๋์ง ๋ฌด์ฒ ๊ถ๊ธํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ธ ๋ฆฌ์กํธ ๊ฐ๋ฐ์ ์ต์ํด์ก๋ค๋ฉด, ์๋ ์ฃผ์ ๋ก ์ฌํ ํ์ต์ ์งํํ ์ ์์ต๋๋ค.
-
์ํ ๊ด๋ฆฌ ์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋
this.setState()
์this.state
๋ฅผ ์ฌ์ฉํด ๋ก์ปฌ ์ปดํฌ๋ํธ ์ํ๋ฅผ ๊ด๋ฆฌํ์ต๋๋ค. ์ฒ์์๋ ๊ด์ฐฎ์ง๋ง, ๊ท๋ชจ๊ฐ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๋ด๋ถ ์ํ๋ง์ผ๋ก ํ๊ณ๊ฐ ์์ต๋๋ค. ๋๋ฌธ์ Redux ๋๋ MobX์ ๊ฐ์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ ์์ ์จ๋ผ์ธ ๊ฐ์ข ์ฌ์ดํธ React to React์์ "๋ฆฌ์กํธ ์ํ ๋ค๋ฃจ๊ธฐ(Taming the State in React)"๊ฐ์ข ์๊ฐ์ ๊ถ์ฅํฉ๋๋ค. ์ด ๊ฐ์ข์์ ๋ฆฌ์กํธ state, Redux, Mobx๋ฅผ ๋ค๋ฃจ๋ฉฐ ์ ์์ฑ ์ด ์ ๊ณต๋ฉ๋๋ค. ๊ทธ ์ธ ์ค์ต๊ณผ ํ์ ์ฑํ ๋ ๋ง๋ จ๋์ด ์์ต๋๋ค. -
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์ธ์ฆ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ๊ฒฐ๊ตญ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ณต๊ฐ์ด ํ์ํฉ๋๋ค. ๋ฐ์ดํฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋์ด ๋ธ๋ผ์ฐ์ ์ธ์ ํ์๋ ์ ์ง๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ด ์ฌ์ฉ์ ๊ฐ ๊ณต์ ๋ ์ ์์ด์ผ ํฉ๋๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ํ์ด์ด๋ฒ ์ด์ค(Firebase)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ํ์ด์ด๋ฒ ์ด์ค ์ธ์ฆ ์๋ฒฝ ํํ ๋ฆฌ์ผ์์ ๋ฆฌ์กํธ์ ํ์ด์ด๋ฒ ์ด์ค
ํ์๊ฐ์ -๋ก๊ทธ์ธ-๋ก๊ทธ์์
๊ธฐ๋ฅ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ์ต๋๋ค. ๊ทธ ์ธ์๋ ํ์ด์ด๋ฒ ์ด์ค๋ก ์ค์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํด ์ฌ์ฉ์ ๊ธฐ๋ก์ ์ ์ฅํ ์ ์์ต๋๋ค. ์ดํ ๋ ๋ง์ ์ฉ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํ์ํ ์ ์๊ฒ ์ต๋๋ค๋ง ๊ฐ์์ ํ๋จ์ ๋งก๊ธฐ๋๋ก ํ๊ฒ ์ต๋๋ค. -
์นํฉ(Webpack)๊ณผ ๋ฐ๋ฒจ(Babel) ์ฌ์ฉ ์ด ์ฑ ์์๋ create-react-app๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ถํธ์คํธ๋ํํ์ต๋๋ค. ์ด๋ ์ ๋ ๋ฆฌ์กํธ์ ์ต์ํด์ง๋ฉด ๋ค๋ฅธ ํด๋ค์ ๋ฐฐ์ฐ๊ณ ์ถ์ ๊ฒ์ ๋๋ค. ์ด๊ธฐ ์ค์ ์ create-react-app ๋์ ์นํฉ๊ณผ ๋ฐ๋ฒจ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด์ธ ESLint๋ก ์ฝ๋ ํ์ง ๊ด๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค.
-
๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๋ฌธ๋ฒ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๊ตฌํ ๋ฐ ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ ์ง์์ ์ผ๋ก ์์ ๋๋ฉฐ ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ํนํ ๋ฆฌ์กํธ ํด๋์ค ์ปดํฌ๋ํธ๋ฅผ ์์ฑ ๋ฐฉ๋ฒ๊ณผ ๊ด๋ จ๋ ๋ค์ํ ๋ฆฌ์์ค๋ฅผ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค. ๊นํ๋ธ ๋ฆฌํผ์งํ ๋ฆฌ์ ๋ฆฌ์กํธ ํด๋์ค ์ปดํฌ๋ํธ ์์ฑ ๋ฐฉ๋ฒ์ ๊ธฐ์ ํ์ต๋๋ค. ํด๋์ค ํ๋ ์ ์ธ์ ์ฌ์ฉํ๋ฉด, ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
-
๊ฐ์ธ ํ๋ก์ ํธ ๋ฆฌ์กํธ ๊ธฐ์ด๋ฅผ ํ์ตํ ํ, ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ฐฐ์ด ๋ด์ฉ์ ์ ์ฉํด๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฆฌ์กํธ๋ก ํฑ-ํ-ํ (tic-tac-toe) ๊ฒ์์ด๋ ๊ฐ๋จํ ๊ณ์ฐ๊ธฐ๋ฅผ ๋ง๋ค์ด ๋ณด์ธ์. ์จ๋ผ์ธ์์ ๋ฌด๋ฃ๋ก ์ ๊ณต๋๋ ๋ฆฌ์กํธ ์ค์ต ํํ ๋ฆฌ์ผ์ด ๋ง์ด ์์ต๋๋ค. ์ ์๊ฐ ๋ง๋ ํ์ด์ง ๋งค๊น ๋ฐ ๋ฌดํ ์คํฌ๋กค ๋ชฉ๋ก, ํธ์ํฐ ๋ชฉ๋ก ํ์, ๋ฆฌ์กํธ์ Stripe ๊ฒฐ์ ์ฐ๋ ํ๋ก์ ํธ๋ฅผ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋๋ค. ์์ ๊ท๋ชจ์ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด ๋ณด๋ฉด์ ๋ฆฌ์กํธ์ ์ต์ํด์ง๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
-
UI ์ปดํฌ๋ํธ ์ฒ์๋ถํฐ ํ๋ก์ ํธ์ UI ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ ํ์ง ๋ง์ธ์. ์์ํ ํ์ค HTML ์์์ ๋ฆฌ์กํธ๋ง์ผ๋ก ๋ค์ด์ผ๋ก๊ทธ, ๋๋กญ๋ค์ด ๋ฉ๋ด ๋ฑ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ต์ํด์ง๋ ๊ฒ์ด ์ ์ผ ์ค์ํฉ๋๋ค. ์ด๋ค ์ปดํฌ๋ํธ์ ๋๋ถ๋ถ์ ์์ฒด์ ์ผ๋ก ๋ก์ปฌ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฒดํฌ ๋ฐ์ค๋ ์ฒดํฌ ์ฌ๋ถ๋ฅผ ๋ก์ปฌ ์ํ๋ฅผ ํตํด ํ์ธํ๊ธฐ ๋๋ฌธ์ ์ ์ด๋ ์ปดํฌ๋ํธ๋ก ๊ตฌํํด์ผ ํฉ๋๋ค. ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ค์, UI ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ ํด ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฒดํฌ๋ฐ์ค๋ ๋ค์ด์ผ๋ก๊ทธ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋๋ก ํฉ๋๋ค.
-
์ฝ๋ ๊ตฌ์ฑ 4์ฅ์์ ์ฝ๋ ๋ชจ๋ ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ ๋ค๋ค์ต๋๋ค. ์์ง ํด๋ณด์ง ์์๋ค๋ฉด ์ง๊ธ ํด๋ณด๊ธธ ๋ฐ๋๋๋ค. ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์กฐํ๋ ํ์ผ ๋ฐ ํด๋(๋ชจ๋)๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ฝ๋ ๋ถํ , ์ฌ์ฌ์ฉ ๊ฐ๋ฅ์ฑ, ์ ์ง ๋ณด์์ฑ ๋ฐ ๋ชจ๋ ๊ตฌ์ฑ์ ํตํด API ์ค๊ณ ์์น์ ์ดํดํ ์ ์์ต๋๋ค.
-
ํ ์คํธ ์ด ์ฑ ์์ ํ ์คํธ ๋ง๋ง ๋ณด์ฌ์คฌ์ต๋๋ค. ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝํ ์คํธ์์ ๋จ์ ํ ์คํธ ๋ฐ ํตํฉ ํ ์คํธ ๊ฐ๋ ์ ์ฌ๋ ์๊ฒ ํ๊ณ ๋ค์ด์ผ ํฉ๋๋ค. ์ง๊ธ ๋จ๊ณ์์๋ Enzyme์ Jest๋ก ๋จ์ ํ ์คํธ์ ์ค๋ ์ท ํ ์คํธ๋ฅผ ์ง์์ ์ผ๋ก ์งํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
-
๋ผ์ฐํ ๋ฆฌ์กํธ ๋ผ์ฐํฐ(react-router)๋ฅผ ์ฌ์ฉํด ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ผ์ฐํ ์ ๊ตฌํํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ๋ง ๋ง๋ค์์ต๋๋ค. ๋ฆฌ์กํธ ๋ผ์ฐํฐ๋ก ๊ฐ URL๋ง๋ค ํ์ด์ง๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ผ์ฐํ ์ ๋์ ํ๋ฉด ์น ์๋ฒ์ ๋ค์ ํ์ด์ง๋ฅผ ์์ฒญํ์ง ์์๋ ๋ฉ๋๋ค. ๋ผ์ฐํฐ๋ ํด๋ผ์ด์ธํธ์์ ๋ชจ๋ ๊ฒ์ ์ฒ๋ฆฌํฉ๋๋ค.
-
ํ์ ๊ฒ์ฌ ์ด ์ฑ ์์๋ PropType์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ์ต๋๋ค. PropType๋ฅผ ์ฌ์ฉํด ๋ฒ๊ทธ๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ PropTypes๋ ๋ฐํ์์์๋ง ์ฒดํฌํฉ๋๋ค. ํ ๋จ๊ณ ๋ ๋์๊ฐ ์ปดํ์ผ ํ์์ ์ ์ ํ์ ๊ฒ์ฌ๋ฅผ ๋์ ํ ์ ์์ต๋๋ค. ๊ทธ์ค ํ์ ์คํฌ๋ฆฝํธ(TypeScript)๊ฐ ์ ์ผ ์ ๋ช ํฉ๋๋ค. ์ด์ธ์ ํ๋ก์ฐ(Flow)๋ ์์ต๋๋ค. ํ๋ก์ฐ๋ก ๊ฐ๋ ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ถ์ฒํฉ๋๋ค.
-
๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ(React Native)์ ํฌ๋ก์ค ํ๋ซํผ ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ ๋๊ตฌ์ ๋๋ค. ๋ฆฌ์กํธ์์ ํ์ตํ ๋ด์ฉ์ ํ ๋๋ก iOS์ ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค์ด ๋ณผ ์ ์์ต๋๋ค. ๋ฆฌ์กํธ์ ๋ํด ์ด๋ฏธ ์ ์๊ณ ์๋ค๋ฉด ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ ์ฝ๊ฒ ์์ํ ์ ์์ต๋๋ค. ๋ฆฌ์กํธ์ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ์ ๊ฐ๊ณ , UI๋ง ๋ค๋ฅผ ๋ฟ์ ๋๋ค. ์ต์ํ๋ ์น UI๊ฐ ์๋ ๋ชจ๋ฐ์ผ UI๋ฅผ ์๋ก ์ ํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ ์ ์น ์ฌ์ดํธ์์ ์น ๊ฐ๋ฐ ๋ฐ ์ํํธ์จ์ด ์์ง๋์ด๋ง์ ๊ด๋ จ ๊ธ์ ์ฝ์ ์ ์์ต๋๋ค. ๋ด์ค๋ ํฐ ๊ตฌ๋ ์ ์ฒญ์ ํ๋ฉด ๋งค๋ฌ ์ฑ ๊ณผ ๊ธ ๊ฐ์ข์ ๊ดํ ์์์ ๋ฐ์ ์ ์์ต๋๋ค. ์ด์ธ์ The React to React ์จ๋ผ์ธ ๊ฐ์ข ์ฌ์ดํธ์์ ๋ฆฌ์กํธ ์ฌํ ๊ฐ์ข๋ฅผ ์๊ฐํ ์ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ ์์ ์ฝํ ์ธ ์ ์ ์ง์์ ๋์์ฃผ์ค ํ์์๋ฅผ ์ฐพ๊ณ ์์ต๋๋ค. ์์ง๋ ์ ์ธ๊ณ์ ๋ง์ ํ์๋ค์ ๊ฒฝ์ ์ ์ธ ์ด๋ ค์์ผ๋ก ์ ๋ฃ ๊ต์ก ์ปจํ ์ธ ๋ฅผ ๊ตฌ์ ํ ์ ์์ต๋๋ค. ์ ๋ ์ด๋ค์ ๋๊ณ ์ ์ปจํ ์ธ ๋ฅผ ๋ฌด๋ฃ๋ก ๋ฐฐํฌํ๊ณ ์์ต๋๋ค. ํ์์๋ก ํจ๊ป ํด์ฃผ์ ๋ค๋ฉด, ํฅํ ์ ์๋๋ ์ปจํ ์ธ ๋ํ ๋ฌด๋ฃ๋ก ๋ฐฐํฌํ ์ ์์ ๊ฒ์ ๋๋ค.
์ด ์ฑ ์ ๋ง์ณค๋ค๋ฉด, ์ฃผ์์ ๋ฆฌ์กํธ๋ฅผ ์๊ฐํด์ฃผ๊ณ ์ถ์ ์ฌ๋์ด ๋๊ตฌ์ธ์ง ํ ๋ฒ์ฏค ์๊ฐํด๋ณด๋ ์๊ฐ์ ๊ฐ์ก์ผ๋ฉด ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ฌ๋์๊ฒ ์ด ์ฑ ์ ์๊ฐํ๋ฉฐ, ์์ ์ ๋ฆฌ์กํธ ๊ฐ๋ฐ ๊ฒฝํ๊ณผ ์ง์์ ๋๋๊ธธ ๋ฐ๋๋๋ค. ์์ผ๋ก๋ ๋ ์ ์ฌ๋ฌ๋ถ๋ค์ด ๋ณด๋ด์ฃผ์ ๋จ๊ฑฐ์ด ์ฑ์๊ณผ ๊ด์ฌ์ ํ์ ์ด "๋ฆฌ์กํธ ๋์๋ซ๊ธฐ"๋ ๊พธ์คํ ์ฑ์ฅํ๊ณ ๋ฐ์ ํด ๋๊ฐ ๊ฒ์ ๋๋ค.
๋๊น์ง ์ฝ์ด์ฃผ์ ์ฌ๋ฌ๋ถ๋ค์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋ก๋น ์ฌ๋ฆผ