Facebook์์ ์ฃผ๋ํ์ฌ ๊ฐ๋ฐํ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ UI๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ตฌ์ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ Javascript ๊ธฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
SPA(Single Page Application) ๐ค
์น ์ฌ์ดํธ์ ์ ์ฒด ํ์ด์ง๋ฅผ ํ๋์ ํ์ด์ง์ ๋ด์ ๋์ ์ผ๋ก ํ๋ฉด์ ๋ฐ๊ฟ๊ฐ๋ฉฐ ํํ
DOM์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด UI๋ฅผ ๋ํ๋ด๋ฉฐ ํธ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ํํ๋๋ค. ์ฌ๊ธฐ์๋ Web Document์ ์๋ ๊ฐ UI ์์์ ๋ํ ๋ ธ๋๊ฐ ํฌํจ๋๋ค. ์น ๊ฐ๋ฐ์๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์ฝํ ์ธ ๋ฅผ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ ์ฉํ๋ฉฐ ๊ตฌ์กฐํ๋ ํ์์ ๋์ด ์์ด ํน์ ๋์์ ์ ํํ ์ ์๊ณ , ๋ชจ๋ ์ฝ๋ ์์ ์ด ํจ์ฌ ์ฌ์์ง๊ธฐ ๋๋ฌธ์ ๋ง์ ๋์์ด ๋๋ค.
๋(DOM) ๐ค
์น ํ์ด์ง๋ ์น ์ฑ์ ์๋ HTML ์์๋ค์ ๊ตฌ์กฐ์ ์ผ๋ก ํํํ ๊ฒ
๐จ ๋(DOM)์ ๋ฌธ์ ์
DOM์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋์ด ์์ด์ ์ดํดํ๊ธฐ ์ฝ์ง๋ง, ๋
ธ๋์ ์๊ฐ ๋ง์์ง ์๋ก ์๋๊ฐ ๋๋ ค์ง๊ณ , DOM ์
๋ฐ์ดํธ์ ์ฆ์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.
๊ฐ์ ๋(Virtual DOM)
์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค ๊ฐ์ ๋(Virtual DOM)์ ๋ง๋ค๊ณ , ๋ค์ ๊ทธ๋ฆด ๋๋ง๋ค ์ค์ DOM๊ณผ ๋น๊ตํ๊ณ ์ ํ ์ํ๋ฅผ ๋น๊ตํด, ๋ณ๊ฒฝ์ด ํ์ํ ์ต์ํ์ ๋ณ๊ฒฝ์ฌํญ๋ง ์ค์ DOM์ ๋ฐ์ํด, ์ฑ์ ํจ์จ์ฑ๊ณผ ์๋๋ฅผ ๊ฐ์
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๐ค
๋ ๋ฐ์ดํฐ ํน์ ์ ๋ณด์ ์์ค๋ฅผ ๋ชจ๋ ์ผ์น์ํค๋ ๊ธฐ๋ฒ์ด๋ค. ์ฆ, ํ๋ฉด์ ๋ณด์ด๋ ๋ฐ์ดํฐ์ ๋ธ๋ผ์ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์น์ํค๋ ๊ฒ์ ๋ป ํ๋ค.
์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ(Two-way binding) ๐ค
์ฌ์ฉ์ UI์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๊ฐ์ํ๋ Watcher์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๊ฐ์ํ๋ Watcher๊ฐ UI์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋๊ธฐํ ์์ผ์ฃผ๋ ๋ฐฉ์
์ด๋ฅผ ํตํด ํ๋ก๊ทธ๋๋จธ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ๊ณผ ์ฌ์ฉ์ UI์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๊ดํ ๋๊ธฐํ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์๊ณ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์๋ค.
๐จ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ๋จ์
์ด๋ฌํ ๋จ์ ์ผ๋ก ์ธํด, ๋ฆฌ์กํธ ๋ฑ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋ค.
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
๋จ ํ๋์ Watcher๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐ์ดํฐ ๊ฐฑ์ ์ ๊ฐ์งํ์ฌ ์ฌ์ฉ์์ UI ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋ค. ์ฌ์ฉ์๊ฐ UI๋ฅผ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ ๋๋, ์ด๋ฒคํธ๋ฅผ ํตํด ๊ฐฑ์ ํ๊ฒ ๋๋ค.
๐จ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ์ฅ์
JavaScript์ HTML์ ๋์์ ์ฌ์ฉํ๋ฉฐ, HTML์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์๋ค์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ์ผ์ข ์ ํ ํ๋ฆฟ ์ธ์ด(Template Lanhuage)
JSX ๋ฌธ๋ฒ์ ํน์ง
- ๋๊ฐ ์ด์์ ์๋ฆฌ๋จผํธ๋ ๋ฌด์กฐ๊ฑด ํ๋์ ์๋ฆฌ๋จผํธ๋ก ๊ฐ์ธ์ ธ ์์ด์ผํ๋ค.
- class ๋์ className์ ์ฌ์ฉํ๋ค.
- ๋ชจ๋ ํ๊ทธ๋ ๋ฐ๋์ ๋ซํ ์์ด์ผ ํ๋ค.
- JSX ์์์ JavaScript ๊ฐ์ ์ฌ์ฉํ ๋์ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ๋ค.
- JSX ์ฃผ์์
{/* ํ ์คํธ ๋ด์ฉ */}
๋ด์ฉ์ ๊ฐ์ผ๋ค.
๋ฆฌ์กํธ๋ ์น ์๋น์ค ๊ฐ๋ฐ ์ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋์ด ์์ด ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋ ์์๋ฅผ ์ปดํฌ๋ํธ ๋จ์๋ก ๊ตฌ๋ถํ์ฌ UI๋ฅผ ๊ตฌ์ฑํ๊ฒ ๋๋ค.
์ปดํฌ๋ํธ(Component) ๐ค
์นย ํ์ด์ง์์ย ์ปดํฌ๋ํธ๋ย ํ๋ฉด์ย ์ด๋ฃจ๋ย ์์ย ์์๋ค์ด๋ค.
โ Props
Props(Properties)๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๋ ๋ฐ์ดํฐ (์ปดํฌ๋ํธ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ๋ ๋ฐ์ดํฐ)
โ State
State๋ ํ๋์ ์ปดํฌ๋ํธ ์์์ ์ ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฌ์ฉ (์ปดํฌ๋ํธ ๋ด๋ถ์ ๋์ ๋ฐ์ดํฐ)
https://sungjk.github.io/2015/11/22/AngularJS(2).html
https://dev-yakuza.posstree.com/ko/react/create-react-app/react/
https://doqtqu.tistory.com/316