<aside> ๐ก This template provides context/instructions for the languages you use.
</aside>
๊ฐ๋ฐ ์ํคํ ์ฒ(MVC, MVVM, MVW, etc.) ๋ชจ๋ธ ์ค, View๋ง ๋ค๋ฃจ๋ Javascript ๋ผ์ด๋ธ๋ฌ๋ฆฌ. ํต์ฌ์ ์ธ ํน์ง์ ์ด๋ค ๋ฐ์ดํฐ(์ํ)๊ฐ ๋ณํ ๋๋ง๋ค ์ด๋ค ๋ณํ๋ฅผ ์ค์ง ๊ณ ๋ฏผํ๋ ๊ฒ์ด ์๋๋ผ, ๊ทธ๋ฅ ๊ธฐ์กด View๋ฅผ ์ง์ฐ๊ณ ์ฒ์๋ถํฐ ์๋ก ๋ ๋๋ง ํ๋ค๋ ๊ฒ.
<aside> ๐ก **๋ฆฌ์กํธ์ ์ฒ ํ "**์ง์์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ณํํ๋ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถํ๊ธฐ"
</aside>
๋ฆฌ์กํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ ๋ฐ ์ฌ์ฉํ๋ฉฐ, ์ค์ง View(๋ทฐ) ๋ง ์ ๊ฒฝ์ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ๊ธฐ์กด๊ณผ ๋ค๋ฅด๊ฒ, ์ด๋ค ๋ฐ์ดํฐ๊ฐ ๋ณํ ๋๋ง๋ค ์ด๋ค ๋ณํ๋ฅผ ์ค์ง ๊ณ ๋ฏผํ๋ ๊ฒ์ด ์๋๋ผ, ๊ทธ๋ฅ ๊ธฐ์กด ๋ทฐ๋ฅผ ๋ ๋ ค๋ฒ๋ฆฌ๊ณ ์ฒ์๋ถํฐ ์๋ก ๋ ๋๋ง(ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฒ)ํ๋ ๋ฐฉ์์ ๊ฐ์ง๊ณ ์๋ค.
๋ฆฌ์กํธ ํ๋ก์ ํธ์์ ํน์ ๋ถ๋ถ์ด ์ด๋ป๊ฒ ์๊ธธ์ง ์ ํ๋ ์ ์ธ์ฒด๊ฐ ์๋๋ฐ, ์ด๋ฅผ **์ปดํฌ๋ํธ(Componet)**๋ผ๊ณ ํ๋ค. ๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ๋ ๋ค๋ฅธ ํ๋ ์ ์ํฌ๊ฐ ๋ค๋ฅด๋ฉฐ, ์ข ๋ ๋ณตํฉ์ ์ธ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ์๋ค.
[ํน์ง#1] ์ปดํฌ๋ํธ๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ API๋ก ์๋ง์ ๊ธฐ๋ฅ๋ค์ ๋ด์ฅํ๊ณ ์์ผ๋ฉฐ, ์ปดํฌ๋ํธ ํ๋์์ ํด๋น ์ปดํฌ๋ํธ์ ์๊น์์ ์๋ ๋ฐฉ์์ ์ ์ํ๋ค.
์ฌ์ฉ์ ํ๋ฉด(์น ๋ธ๋ผ์ฐ์ )์ View(์น ํ์ด์ง)๋ฅผ ๋ณด์ฌ ์ฃผ๋ ๊ฒ์ **๋ ๋๋ง(Rendering)**์ด๋ผ๊ณ ํ๋ค. ๋ฆฌ์กํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ์ด๊ธฐ ๋ ๋๋ง๊ณผ ์ปดํฌ๋ํธ์ ์ํ ๊ฐ(๋ฐ์ดํฐ, Status) ๋ณ๊ฒฝ์ผ๋ก ๋ค์ ๋ ๋๋ง์ด ์คํ๋๋ ๋ฆฌ ๋ ๋๋ง(Re Rendering) ๊ฐ๋ ์ด ์กด์ฌํ๋ค.
๋ฆฌ์กํธ์์ ์ด๊ธฐ ๋ ๋๋ง์ render(){...}
ํจ์๊ฐ ๊ฒฐ์ ํ๋ค. ์ด ํจ์๋ ์ปดํฌ๋ํธ๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ์ ์ํ๋ ์ญํ ์ ํ๋ค. ์ด ํจ์๋ html ํ์์ ๋ฌธ์์ด์ ๋ฐํํ์ง ์๊ณ , View(๋ทฐ)๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๊ณ ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ง๋ ๊ฐ์ฒด(View์ ๋ํ Meta์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด)๋ฅผ ๋ฐํํ๋ค. ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค์ด ๋ค์ด ๊ฐ ์ ์๋ค. ์ด ๋ renderํจ์๋ฅผ ์คํํ๋ฉด ๊ทธ ๋ด๋ถ์ ์๋ ์ปดํฌ๋ํธ๋ค๋ ์ฌ๊ท์ ์ผ๋ก ๋ ๋๋ง ํ๋ค.(์ฌ๊ท์ ์ผ๋ก ๋ ๋๋ง ๋๋ค๋ผ๋ ์๋ฏธ๋ ์์ ์ปดํฌ๋ํธ๋ค์ด ๋ ๋๋ง๋๊ณ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ ์์ฐจ์ ์ผ๋ก ๋ ๋๋ง ๋๋ ๋ฐฉ์์ ๋งํ๋ค.) ์ด๋ ๊ฒ ์ต์์ ์ปดํฌ๋ํธ์ ๋ ๋๋ง ์์
์ด ๋๋๋ฉด ์ง๋๊ณ ์๋ ์ ๋ณด๋ค์ ์ฌ์ฉํ์ฌ HTML ๋งํฌ์
(markup)์ ๋ง๋ค๊ณ , ์ด๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ ํ๋ ์ค์ ํ์ด์ง์ DOM ์์ ์์ ์ฃผ์
ํ๋ค.
๋ฆฌ์กํธ์์ ๋ ๋๋ง์ ์ ํํ ์๋ฏธ๋ 3๊ฐ์ง๋ฅผ ๋ด๊ณ ์๋ ๊ฒ์ผ๋ก ๋ณด์ฌ์ง๋ค.
์ฒซ๋ฒ์งธ, ๋ฆฌ์กํธ๋ก ์ ์ํ ์ปดํฌ๋ํธ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด(render ํจ์์ ๋ฆฌํด ๊ฐ)
๋๋ฒ์งธ, ๋ฆฌํด ๋ฐ์ ๊ฐ์ฒด์ ๋ฐ์ดํฐ(View์ ๊ตฌ์ฑ์ ๋ณด)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก HTML๋งํฌ์ ๊ตฌ์ฑ - ์ปดํฌ๋ํธ์ ์ ์๋ View ์ ๋ณด๋ฅผ ์ด์ฉํด์ HTML๋งํฌ์ ์ ๊ตฌ์ฑํ๋ค.
์ธ๋ฒ์งธ, ๊ตฌ์ฑ๋ HTML๋งํฌ์ ์ ์ค์ ํ์ด์ง์ DOM์์ ์์ ์ฃผ์
์ปดํฌ๋ํธ๋ฅผ ์ค์ ํ์ด์ง์ ๋ ๋๋งํ ๋๋ ๋ถ๋ฆฌ๋ ๋ ๊ฐ์ง ์ ์ฐจ๋ฅผ ๋ฐ๋ฅธ๋ค. ์ฒซ๋ฒ์งธ, ๋ฌธ์์ด ํํ์ HTML ์ฝ๋๋ฅผ ์์ฑํ๋ค. ๋๋ฒ์งธ, ํน์ DOM์ ํด๋น ๋ด์ฉ์ ์ฃผ์ ํ๋ฉด ์ด๋ฒคํธ๊ฐ ์ ์ฉ๋๋ค.
๋ฆฌ์กํธ์์ View(ํ๋ฉด or HTML)๋ฅผ ์ ๋ฐ์ดํธํ ๋๋ "์ ๋ฐ์ดํธ ๊ณผ์ ์ ๊ฑฐ์น๋ค." ๋ผ๊ณ ํ๊ธฐ๋ณด๋ค๋ "**์กฐํ ๊ณผ์ ์ ๊ฑฐ์น๋ค."**๋ผ๊ณ ํ๋ ๊ฒ์ด ๋ ์ ํํ ํํ์ด๋ค. ์ปดํฌ๋ํธ์์ ์ํ(์ง์ ํ ๋ฐ์ดํฐ) ๋ณํ๊ฐ ์์ ๋ ์ฐ๋ฆฌ ๋ณด๊ธฐ์๋ ๋ณํ์ ๋ฐ๋ผ View๊ฐ ๋ณํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ฌ์ค์ ์๋ก์ด ์์๋ก DOM ์์ ์์ฒด๋ฅผ ๊ฐ์ ๋ผ์ฐ๊ธฐ๋ ๋ฐฉ์์ผ๋ก ์ ๋ฐ์ดํธ ๋๋ค.
์ด ์์ ๋ํ render ํจ์๊ฐ ๋งก์์ ์ํํ๋ค. render ํจ์๋ View๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๊ณ ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง(View์ ๋ฉํ๋ฐ์ดํฐ๋ผ๊ณ ์๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.) ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋๋ฐ ์ปดํฌ๋ํธ๋ ์ํ(๋ฐ์ดํฐ)๋ฅผ ์ ๋ฐ์ดํธ ํ์ ๋ ๋จ์ํ ์ ๋ฐ์ดํธํ ๊ฐ์ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ, ์๋ก์ด ์ํ(๋ฐ์ดํฐ)๋ฅผ ๊ฐ์ง๊ณ render ํจ์๋ฅผ ๋ค์ ํธ์ถํ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ด๋ render ํจ์๊ฐ ๋ฐํํ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ณง๋ฐ๋ก DOM์ ๋ฐ์ํ์ง ์๊ณ , ์ด์ ์ render ํจ์๊ฐ ๋ง๋ค์๋ ์ปดํฌ๋ํธ ์ ๋ณด์ ํ์ฌ render ํจ์๊ฐ ๋ง๋ ์ปดํฌ๋ํธ ์ ๋ณด๋ฅผ ๋น๊ตํ๋ค. ์ด๋ป๊ฒ? Virtual DOM์ด๋ผ๋ ๊ฒ์ ์ด์ฉํด์ ๋น๊ตํ๋ค.
Virtual DOM์ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ง View(ํ์ฌ์ ๋ฏธ๋)๋ฅผ ์ต์ํ์ ์ฐ์ฐ์ผ๋ก ๋น๊ตํ ํ, ๋์ ์ฐจ์ด๋ฅผ ์์๋ด DOM ํธ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธ ํ๊ธฐ ๋๋ฌธ์ ์์์ ์ฌ์ฉ์ด ๋์ง ์๋ค.
DOM์ Document Object Model์ ์ฝ์๋ก, ๊ฐ์ฒด๋ก ๋ฌธ์ ๊ตฌ์กฐ๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ผ๋ก XML์ด๋ HTML๋ก ์์ฑํ๋ค. DOM์ ๊ตฌ์กฐ๋ ํธ๋ฆฌ ํํ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ํน์ ๋ ธ๋๋ฅผ ์ฐพ๊ฑฐ๋, ์ญ์ ํ๊ฑฐ๋, ์ํ๋ ๊ณณ์ ์ฝ์ ํ ์ ์๋ค.
DOM ์์ฒด๋ ๋น ๋ฅด๋ค. DOM ์์ฒด๋ฅผ ์ฝ๊ณ ์ธ ๋์ ์ฑ๋ฅ์ ์ด์๊ฐ ์๋ค. ํ์ง๋ง ์น ๋ธ๋ผ์ฐ์ ๋จ์์ DOM์ ๋ณํ๊ฐ ์ผ์ด๋๋ฉด ์น๋ธ๋ผ์ฐ์ ๊ฐ CSS๋ฅผ ๋ค์ ์ฐ์ฐํ๊ณ , ๋ ์ด์์์ ๊ตฌ์ฑํ๊ณ , ํ์ด์ง๋ฅผ ๋ฆฌํ์ธํธํ๋ค. ์ด ๊ณผ์ ์ ๋ง์ ์๊ฐ๊ณผ ์์์ด ํ๋น ๋๋ค.
๊ทธ๋์ ๋ฆฌ์กํธ์์๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ Virtual DOM๊ทธ๋ ๋ค๋ฉด Virtual DOM์ด๋? ๊ธฐ์กด์ DOM๋ฅผ ์ถ์ํ ํด ๋์ ๊ฒ. ๋ฆฌ์กํธ๋ ์ง์ DOM์ ์ ๊ทผํ์ฌ ์กฐ์ํ๋ ๋์ , ์ด๋ฅผ ์ถ์ํํ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ๊ตฌ์ฑํ์ฌ ์ฌ์ฉํ๋ค. ๋ง์น ์ค์ DOM์ ๊ฐ๋ฒผ์ด ์ฌ๋ณธ๊ณผ ๋น์ทํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ฆฌ์กํธ์์ ๋ฐ์ดํฐ๊ฐ ๋ณํ์ฌ ์น ๋ธ๋ผ์ฐ์ ์ ์ค์ DOM์ ์ ๋ฐ์ดํธํ ๋๋ ๋ค์ ์ธ๊ฐ์ง ์ ์ฐจ๋ฅผ ๊ฐ์ง๋ค.
Node.js์ npm
Node.js๋ ํฌ๋กฌ V8 ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ผ๋ก ๋น๋ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ด๋ค. ์ด๊ฒ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ด ์๋ ๊ณณ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ฐ์ ํ ์ ์๋ค.
๋ฆฌ์กํธ ๊ฐ๋ฐ ๋๊ตฌ์๋ ECMAScript 6(์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ)์ ํธํ์์ผ์ฃผ๋ ๋ฐ๋ฒจ(Babel), ๋ชจ๋ํ๋ ์ฝ๋๋ฅผ ํ ํ์ผ๋ก ํฉ์น๊ณ (๋ฒ๋ค๋ง) ์ฝ๋๋ฅผ ์์ ํ ๋๋ง๋ค ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ฆฌ๋ก๋ฉํ๋ ๋ฑ์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๊ฐ์ง ์นํฉ(Webpack)๋ฑ์ด ์๋ค.
npm์ Node.js์ ํจํค์ง ๋งค๋์ ๋๊ตฌ์ด๋ค. npm์ผ๋ก ์๋ง์ ๊ฐ๋ฐ์๊ฐ ๋ง๋ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ์ค์นํ ํจํค์ง์ ๋ฒ์ ์ ๊ด๋ฆฌํ ์ ์๋ค.
ESLint: ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ ๋ฐ ์ฝ๋ ์คํ์ผ์ ๊ฒ์ฌํด ์ฃผ๋ ๋๊ตฌ
Reactjs Code Snippets: ๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๋ฐ ๋ผ์ดํ์ฌ์ดํด ํจ์๋ฅผ ์์ฑํ ๋ ๋จ์ถ ๋จ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐํธํ๊ฒ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํด ๋ผ ์ ์๋ ์ฝ๋ ์ค๋ํซ ๋ชจ์
Prettier-Code-formatter: ์ฝ๋ ์คํ์ผ์ ์๋์ผ๋ก ์ ๋ฆฌํด์ฃผ๋ ๋๊ตฌ
์ด์ Node.js์ ํจํค์ง ๊ด๋ฆฌ๋๊ตฌ์ธ npm์ ์ค์นํด๋ณด์.