์ด๋ฒ ํฌ์คํ ์์๋ React๊ฐ ๋ฌด์์ธ์ง, ํ์ ๋ฐฐ๊ฒฝ๊ณผ ํน์ง ๊ทธ๋ฆฌ๊ณ ์ ์๋ฅผ ๊ตฌ๋ถ์ง์ด ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
๋ฆฌ์กํธ(react.js)๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋๋ก์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
ํ์ด์ค๋ถ๊ณผ ๊ฐ๋ณ ๊ฐ๋ฐ์ ๋ฐ ๊ธฐ์ ๋ค ๊ณต๋์ฒด์ ์ํด ์ ์ง๋ณด์๋๋ค. ๋๊ท๋ชจ ๋๋ ๋ณต์กํ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ ๋ณดํต ๋ผ์ฐํ , APIํต์ ๋ฑ์ ๊ธฐ๋ฅ์ด ์๊ตฌ๋๋๋ฐ ๋ฆฌ์กํธ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋์ง ์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
์๊ฐ์ ๋ฐ๋ผ ์์ฐ์ค๋ฝ๊ฒ ๊ธฐ์ ์ด ๋ฐ์ ํ๋ ๊ฒ์ด ์๋๋ผ ํด๊ฒฐํด์ผ ํ๋ ๋ฌธ์ ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํจ์ผ๋ก ์ธํด ๊ธฐ์ ์ด ๋ฐ์ ํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์น์์ ๋ฌธ์ ์ ๋ณต์ก์ฑ์ ๋ฌด์์ ์๋ฏธํ๋ ๊ฑธ๊น? ์ฌ์ฉ์๋ค์ด ์ํ๋ ๊ธฐ๋ฅ๋ค์ด ์ ์ ๋ง์์ง๊ณ ๊ฐ๋ฐ์๋ค์ด ์ฒ๋ฆฌํด์ผ ํ๋ ์ ์ ์ interaction ๋ํ ์ ์ ๋์ด๋๊ฒ ๋๋ค. ์ด๋ฐ ์ํฉ์์ ํ๋ก ํธ ์๋ ๊ฐ๋ฐ์๋ค์ ๊ธฐ์กด์ ๊ธฐ์ ์ ํ๊ณ๋ฅผ ๋๋ผ๊ฒ ๋๊ณ ์๋ก์ด ๊ธฐ์ ์ ๊ฐ๋ฐํ๊ฒ ๋๋ค. ๊ทธ ๊ธฐ์ ๋ค์ด Front-end Framework๋ผ๊ณ ํต์นญ๋๊ณ ์๋ ๊ธฐ์ ๋ค์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์น์ด ๋ฐ์ ํจ์ ๋ฐ๋ผ ํ๋ก ํธ์๋ ๊ธฐ์ ๋ค์ ์ด๋ค ๋ณํ๋ค์ ๊ฑฐ์ณ ํ์ฌ์ ํ๋ ์ ์ํฌ๊ฐ ๋์จ ๊ฒ์ผ๊น?
๊ฐ๋ฐ ๋ฐฉ์์ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋๋ฉด ์ ์ธ์ ๋ฐฉ์, ์ ์ฐจ์ ๋ฐฉ์์ผ๋ก ๋๋ ์ ์๋ค. ์๋ ์ฒญ์๋ฅผ ์์๋ก ๊ฐ๊ฐ์ ํน์ง์ ์ดํด๋ณด์
virtual-DOM์ ๊ฐ์์ DOM(Document Object Model)์ ๋งํ๋ค. DOM์ HTML ๋ฌธ์๋ฅผ ์ ์ดํ ์ ์๋ API ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ค. react์์ ์ฌ์ฉํ๋ ๊ฐ์ DOM ๋ํ ์ค์ DOM์ ๊ธฐ๋ฐํ์ฌ ๋ง๋ค์ด์ง๋ค.
react๊ฐ ๊ฐ์ DOM์ ์ฌ์ฉํ๋ ์ด์ ๋ ๊ฐ์ DOM์ ๋ง๋ค์ด ์ด๋ฒคํธ๊ฐ ์๋ก ๋ฐ์ํ ๋๋ง๋ค ์ค์ DOM๊ณผ ๋น๊ตํ์ฌ ์ต์ํ์ ๋ณ๊ฒฝ์ฌํญ๋ง ๋ฐ์ํ๊ธฐ ์ํจ์ด๋ค. ๋ํ ์ค์ DOM์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ ํํํ๋๋ฐ ํ์ํ ์ ๋ณด๊ฐ ๋ชจ๋ ๋ค์ด์์ด ์ค์ DOM์ ์ด์ฉํ์ฌ ์์ ์ ํ๊ธฐ์ ๋ฌด๊ฑฐ์ฐ๋ฉฐ ์๋๊ฐ ๋๋ฆฌ๋ค. ๊ทธ๋์ ๊ฐ์ DOM์ ์ด์ฉํด ํจ์จ์ฑ๊ณผ ์๋๋ฅผ ๊ฐ์ ํ ์ ์๋ค.
virtual-DOM์ ๋ฆฌ์กํธ๊ฐ ํ๋ฉด์ ์
๋ฐ์ดํธ ํ๋ ๊ณผ์ ์ ์กฐ๊ธ ๋ ํจ์จ์ ์ผ๋ก ์ํํ๊ธฐ ์ํ ๊ตฌ์กฐ์ด๋ค.
๋ ธ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ํ๊ฒฝ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จ์ํ ํ ์คํธ์ ๋ด์ด์ด๋ค. ์ด๋ฌํ ํ ์คํธ๋ค์ด ์ค์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ค๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ด ์ค์ ๋ก ์คํ์ํค๋ ๋๊ตฌ๋ค์ด ํ์ํ๋ค. ์ด๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์คํํ๊ฒฝ์ด๋ผ ๋ถ๋ฅธ๋ค. ๊ฐ์ฅ ์ ๋ช ํ ์คํํ๊ฒฝ์ ๋ธ๋ผ์ฐ์ ์ด๋ค.
์น๊ฐ๋ฐ ์์ฅ์ด ์ ์ ์ปค์ง์ผ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ๋ค๋ฅธ ํ๊ฒฝ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ ๊ฐ๋ฐ์ ํ๋ ค๋ ๋์ฆ๊ฐ ์๊ฒจ๋ฌ๊ณ ์ด๋ฐ ๋์ฆ์์์ ํ์ํ๊ฒ์ด ๋ ธ๋์ด๋ค. ๋ ธํธ๋ ๋ธ๋ผ์ฐ์ ๋ฐ๊นฅ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์์๋๋ก ๋ง๋ค์ด์ฃผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์คํํ๊ฒฝ์ด๋ค.
์ฐ๋ฆฌ๋ ์ ๋ ธ๋๋ฅผ ์์์ผ ํ๊ณ ํ์๋ก ํ ๊น?
NPM์ Node Package Manager์ ์ฝ์ด์ด๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ํจํค์ง๋ ๋ฌด์จ ์๋ฏธ์ผ๊น?
ํจํค์ง๋ ๋ ธ๋๋ก ์คํํ ์ ์๋ ํ๋ํ๋์ ํ๋ก๊ทธ๋จ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ฐ๋ ๋ฆฌ์กํธ, ์์์ ์ธ๊ธํ Babel, WebPack ํจํค์ง์ด๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ธ๋๋ฅผ ์คํํ ์ ์๋ ์ฌ๋ฌ ํจํค์ง๋ค์ ๋ค์ด๋ก๋ ๋ฐ๊ณ , ์ ๋ฐ์ดํธ ํ๊ณ ์ญ์ ํ ์ ์๋ ๋งค๋์ ์ ์ญํ ์ ํ๋ ๋๊ตฌ๊ฐ ๋ฐ๋ก NPM์ด๋ค.
Create React App์ ์ฝ์ด์ด๋ค. CRA๋ ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์์ํ๋๋ฐ ํ์ํ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธํ ํด์ฃผ๋ ๋๊ตฌ์ด๋ค.(toolchain) ๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ CRA๋ฅผ ํ์๋ก ํ ๊น?
nax create-react-app
Component๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ UI ๊ตฌ์ฑ ๋จ์์ด๋ค. Component๋ฅผ ์ฌ์ฉํ์ ๋ ์ฌ๋ฌ ์ฅ์ ์ด ๋ฐ์ํ๋๋ฐ ์๋๋ฅผ ์ดํด๋ณด์
- ์ฝ๋ ์ฌํ์ฉ์ฑ ์ฆ๊ฐ -> ์ฐ๋ฆฌ๊ฐ ์ปดํฌ๋ํธ ํ๋๋ฅผ ๋ง๋ค์ด ๊ณ์ํด์ ์ฌ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค
- ์ฝ๋ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋ค. ๋ง์ฝ ๋ฐฑ๊ฐ์ ํํ๋ฅผ ๋ณ๊ฒฝํด์ผํ๋ค๋ ๊ฐ์ ํ์, ํ๋์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์๋ณธ์ด ๋๋ ์ปดํฌ๋ํธ ๊ตฌ์ฑ๋ง ๋ฐ๊พธ๋ฉด ๋ชจ๋๊ฐ ๋ฐ๋๋ค.
- ํด๋น ํ์ด์ง๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์๋์ง ํ์ ํ๊ธฐ ์ฝ๋ค.
- ์ปดํฌ๋ํธ๋ ๋จ์ผ ๊ฐ๋ ์ด ์๋๋. ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ๋ค(๋ถ๋ชจ ์ปดํฌ๋ํธ - ์์ ์ปดํฌ๋ํธ)
JavaScript Syntax Extension์ ์ฝ์ด์ด๋ค. ๋ง ๊ทธ๋๋ก ์๋ฐ์คํฌ๋ฆฝํธ ํ์ฅ ๋ฌธ๋ฒ์ด๋ค. ํํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ html์ ํฉ์ณ๋์ ๋ฏํ ๋ฌธ๋ฒ์ด๋ค. ๋ํ ๋งํฌ์ ์ ํธ๋ฆฌํ๊ฒ ์์ฑํ๊ธฐ ์ํ ๋ฌธ๋ฒ์ด๋ฉฐ JSX๋ก ์์ฑํ ์ฝ๋๋ ์ค์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ธ์ํ ์ ์๋ ๋ฌธ๋ฒ์ด๊ธฐ์ Babel์ด๋ผ๋ ํจํค์ง๋ฅผ ์ด์ฉํด์ ๋ณํํด์ค์ผ ํ๋ค. ์๋ ํน์ง๊ณผ ์ฅ์ ์ ํจ๊ป ์ดํด๋ณด์.
ํน์ง
- ๋ชจ๋ ํ๊ทธ๋ค์ ํ๋์ ๋ถ๋ชจํ๊ทธ๋ก ๊ฐ์ธ์ ธ ์์ด์ผ ํ๋ค.
- ๋ชจ๋ ํ๊ทธ๊ฐ ์ ํ ํด๋ก์ง์ด ๊ฐ๋ฅํ๋ค.
- ๋ชจ๋ property๋ค์ camelCase๋ก ์ฌ์ฉํด์ผ ํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ๋์์ด ๊ฐ๋ฅํ๋ค.
์ฅ์
- HTML ํ๊ทธ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ๊ฐ์ด ์ต์ํ๋ค.
- HTML ๋งํฌ์ ๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ ๋ก์ง์ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์ด์ฉํด์ HTML์ ์์ฑํ ์ ์๋ค. ๋ณ๋์ HTML ํ์ผ์ด ํ์ํ์ง ์๋ค.
ํ๋ฒ์ ์ดํด๊ฐ๋ค์