- ๋ฆฌ์กํธ๋ ํ์ด์ค๋ถ์์ ๊ด๋ฆฌํ๋, ๋ฆฌ์กํธ๋ ์น ํ์ด์ง์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๊ณ ๋น๋ํ๋๋ฐ ์ด์ ์ ๋, ๊ฐ์ฅ ์ธ๊ธฐ ์๋
์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ด๋ค. - UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ๋ฆฌ์กํธ ์์ฒด๋ง์ผ๋ก ์ ์ญ ์ํ ๊ด๋ฆฌ, ๋ผ์ฐํ
, ๋น๋ ์์คํ
๋ฑ์ ์ง์ํ์ง ์๋๋ค. ๋ฐ๋ผ์, ๋ฆฌ์กํธ์์ ์์ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ๋ ค๋ฉด Redux, Mobx, react-router ๋ฑ์
์ถ๊ฐํด์ ์ฌ์ฉ
ํด์ผ ํ๋ค. ํฌ๋ก์ค ํ๋ซํผ(Cross-Platform)
์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ์ฑ๊ธ ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์ (SPA)์ ๊ฐ๋ฐํ ๋ ์ฌ์ฉ๋๋ค.Virtual Dom
์ฌ์ฉ- JS๋ก ๋ชจ๋ ๊ฒ์ ๊ตฌํํ ์ ์๋ค. JSX์ styled-components์ ๊ฐ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด js๋ก ๋งํฌ์ ๊ณผ ์คํ์ผ์ ๊ตฌํํ๋ค.
- React๋ ๋ฐ์ดํฐ ํ๋ฆ์ด ํ ๋ฐฉํฅ์ผ๋ก ํ๋ฅด๋
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ
์ ๊ฐ์ง๋ค.
- ๋ฆฌ์กํธ๋ UI(View)๋ฅผ
์ฌ๋ฌ ์ปดํฌ๋ํธ
๋ก ์ชผ๊ฐ์ ๋ง๋ ๋ค. - ํ ํ์ด์ง ๋ด์์๋ ์ฌ๋ฌ ๊ฐ ๋ถ๋ถ์ ๋ ๋ฆฝ๋ ์ปดํฌ๋ํธ๋ก ๋ง๋ค๊ณ , ์ด ์ปดํฌ๋ํธ๋ฅผ ์กฐํฉํด ํ๋ฉด์ ๊ตฌ์ฑํ๋ค.
- ์ปดํฌ๋ํธ ๋จ์๋ก ์ชผ๊ฐ์ ธ ์๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์ฝ๋๋ฅผ ํ์ ํ๊ธฐ๊ฐ ์๋์ ์ผ๋ก ์ฝ๋ค.
- ๊ธฐ๋ฅ ๋จ์, UI ๋จ์๋ก ์บก์ํ์์ผ ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฌ์ฉ์ฑ์ด ๋๋ค.
- ์ฝ๋๋ฅผ ๋ฐ๋ณต ์ฌ์ฉํ ํ์ ์์ด importํด ์ฌ์ฉํ๋ฉด ๋๋ค๋ ๊ฐํธํจ์ด ์์ผ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณต์กํ๋๋ผ๋ ์ฝ๋์ ์ ์ง๋ณด์, ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๋ค.
DOM
์ Document Object Model์ ์ฝ์์ด๋ค. DOM์ HTML, CSS, XML ๋ฑ์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์ธ์ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๊ฐ์ฃผํ๊ณ ๊ด๋ฆฌํ๋ค.- ๋ฆฌ์กํธ๋ ์ด DOM Tree ๊ตฌ์กฐ์ ๊ฐ์ ๊ตฌ์กฐ์ฒด๋ฅผ Virtual DOM์ผ๋ก ๊ฐ์ง๊ณ ์๋๋ค.
- Virtual DOM์ ๊ฐ์์ Doucment Object Model์ ๋งํ๋ค.
- ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค Virtual DOM์ ๋ง๋ค๊ณ , ๋ค์ ๊ทธ๋ฆด ๋๋ง๋ค ์ค์ DOM๊ณผ ๋น๊ตํ๊ณ ์ ํ ์ํ๋ฅผ ๋น๊ตํด, ๋ณ๊ฒฝ์ด ํ์ํ ์ต์ํ์ ๋ณ๊ฒฝ์ฌํญ๋ง ์ค์ DOM์ ๋ฐ์ํด, ์ฑ์ ํจ์จ์ฑ๊ณ ์๋๋ฅผ ๊ฐ์ ํ๋ค.
- Props๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํด ์ฃผ๋ ๋ฐ์ดํฐ๋ฅผ ๋งํ๋ค.
- ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ์ด๋ฉฐ, ์์ ์ปดํฌ๋ํธ์์ ์ ๋ฌ๋ฐ์ props๋ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๊ณ props ๋ฅผ ์ ๋ฌํด์ค ์ต์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ง props๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
- Evan You๊ฐ ๋ง๋ค์์ผ๋ฉฐ, 2014๋
๋ฆด๋ฆฌ์ฆ๋ฅผ ์์์ผ๋ก ๊พธ์คํ ๋ฐ์ ํ๊ณ ์๋
์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ
์ด๋ค. - ์ปจํธ๋กค๋ฌ ๋์ ๋ทฐ ๋ชจ๋ธ์ ๊ฐ์ง๋
MVVM(Model-View-ViewModel)
ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ๋์์ธ๋์์ผ๋ฉฐ, ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ UI๋ค์ ๋ฌถ์ด์ ์ฌ์ฉํ ์ ์๋ค. Vitual DOM
์ ์ฌ์ฉํ๋ค.- Angular์ React์ ๋นํด ๋งค์ฐ ์๊ณ ๊ฐ๋ฒผ์ฐ๋ฉฐ ๋ณต์ก๋๊ฐ ๋ฎ์ต๋๋ค.
- Template์ Component๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ฌถ๊ณ View Layer๋ฅผ ์ ๋ฆฌํ์ฌ ์ฌ์ฉํ๋ค.
Model - View - ViewModel
์ ์ค์๋ง๋ก ๋ก์ง๊ณผ UI์ ๋ถ๋ฆฌ๋ฅผ ์ํด ์ค๊ณ๋ ํจํด์ด๋ค.- ์นํ์ด์ง๋ DOM๊ณผ JS๋ก ๋ง๋ค์ด์ง๊ฒ ๋๋๋ฐ DOM์ด View์ ์ญํ ์ ํ๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ Model์ ์ญํ ์ ํ๋ค.
- ViewModel์ด ์๋ ๊ฒฝ์ฐ์๋ ์ง์ Model๊ณผ View๋ฅผ ์ฐ๊ฒฐํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ViewModel์ด ์ค๊ฐ์์ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ์ด MVVM ๋ชจ๋ธ์ด๋ค.
- ํ๋ฉด์ ๋น์ถฐ์ง๋ ๋ทฐ์ ๋จ์๋ฅผ ์ชผ๊ฐ์ด ์ฌํ์ฉ์ด ๊ฐ๋ฅํ ํํ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด
์ปดํฌ๋ํธ
์ ๋๋ค. - Vue์์, ์ปดํฌ๋ํธ๋ ๋ฏธ๋ฆฌ ์ ์๋ ์ต์
์ผ ๊ฐ์ง
Vue ์ธ์คํด์ค
์ ๋๋ค. - ์ ์ญ ๋ฑ๋ก๊ณผ ์ง์ญ ๋ฑ๋ก์ด ์กด์ฌํฉ๋๋ค.
- Vue๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ์น ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- ํ์ฅ์๊ฐ .vue์ธ ๋จ์ผ ํ์ผ์ HTML, JS, CSS ์ฝ๋๋ก ๊ตฌ์ฑํ์ฌ ์ฌ์ฉํฉ๋๋ค.
new Vue
๋ก ์ ์ธํ์ฌ ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ฅผVue ์ธ์คํด์ค
๋ผ๊ณ ํ๋ค.- el: ํ๊ทธ์ ์ง์ ํ ID, ํด๋์ค๋ช , ํ๊ทธ๋ช ์ผ๋ก ํด๋น ํ๊ทธ์ vue ์ธ์คํด์ค๋ฅผ ์ฐ๊ฒฐํ๋ ์ต์
- data: key์ value๋ฅผ ์ง์ ํ๋ JSON ํ์์ผ๋ก ๋ฐ์ดํฐ ์ ๋ ฅ ์ต์
- computed: getter/setter๋ฅผ ์ง์ ํ๋ ์ต์ ์ด๋ค.
<div id = โappโ
{{message}}
</div>
<script>
let model = {
message : โ๋ทฐ ์์ฑโ
}
new Vue({
el : โ#appโ,
data : model
})
</script>
Google
์์ ๋ง๋ SPA(Single Page Application)๋ฐฉ์์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ํ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ
์ด๋ค.- ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฌผ๋ก ๋ชจ๋ฐ์ผ ์น, ๋ค์ดํฐ๋ธ ๋ชจ๋ฐ์ผ๊ณผ ๋ฐ์คํฌํ ์ ํ๋ฆฌ์ผ์ด์
๊น์ง ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํ์ํ
๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ๊ฐ์ถ๊ณ ์๋ค.
- ์ฌ์ฉ์ธ์ด๋ TypeScript ํน์ JS์ ES6์ ์ฌ์ฉํ ์ ์์ง๋ง, ๊ฐ๋ฐ ๊ทธ๋ฃน์ธก์์๋
TypeScript๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅ
ํ๊ณ ์๋ค. - ๋ฆฌ์กํธ์ ๋ทฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก
์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ
์ ํ๋ค. - ๋จ๋ฐฉํฅ ๋๋ ์๋ฐฉํฅ์ ์ ํ์
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
์ง์ - ๋๋ ํฐ๋ธ(Directive)์ ์๋น์ค, ์์กด์ฑ ์ฃผ์ (DI, Dependency Injection)์ ๊ฐ์ํ
Angular CLI(Command Line Interface)
์ ๊ณตํ๋ค. ์ฆ, ๊ฐ๋ฐ ๋๊ตฌ ํตํฉ ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ ์๋ํ. ๋ช ๋ น์ด๋ฅผ ํตํด ํ๋ก์ ํธ ์์ฑ, ๋น๋, ํ ์คํธ, ๊ตฌ์ฑ์์ ์ถ๊ฐ ๋ฑ์ ๊ฐํธํ๊ฒ ์ด์ฉ
https://ryublock.tistory.com/41 https://wikidocs.net/17701 https://kjwsx23.tistory.com/526 https://brunch.co.kr/@skykamja24/573