๐INTRO
|SPA (Single Page Application)
- Single Page Application (๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ )
- ํ์ฌ ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ๋ ๋๋งํจ์ผ๋ก์จ ์ฌ์ฉ์์ ์ํตํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
- ๋จ์ผ ํ์ด์ง๋ก ๊ตฌ์ฑ๋๋ฉฐ ์๋ฒ๋ก๋ถํฐ ์ต์ด์๋ง ํ์ด์ง๋ฅผ ๋ค์ด๋ก๋ํ๊ณ , ์ดํ์๋ ๋์ ์ผ๋ก DOM์ ๊ตฌ์ฑ
- ์ฒ์ ํ์ด์ง๋ฅผ ๋ฐ์ ์ดํ๋ถํฐ๋ ์๋ฒ๋ก๋ถํฐ ์๋ก์ด ์ ์ฒด ํ์ด์ง๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ด ์๋, ํ์ฌ ํ์ด์ง ์ค ํ์ํ ๋ถ๋ถ๋ง ๋์ ์ผ๋ก ๋ค์ ์์ฑํจ
- ์ฐ์๋๋ ํ์ด์ง ๊ฐ์ ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ํฅ์
- ๋ชจ๋ฐ์ผ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๊ณ ์๋ ํ์ฌ ํธ๋ํฝ์ ๊ฐ์์ ์๋, ์ฌ์ฉ์ฑ, ๋ฐ์์ฑ์ ํฅ์์ ๋งค์ฐ ์ค์ํ๊ธฐ ๋๋ฌธ
- ๋์ ์๋ฆฌ์ ์ผ๋ถ๊ฐ CSR(Client Side Rendering)์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฆ
|SPA ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
- ๊ณผ๊ฑฐ ์น ์ฌ์ดํธ๋ค์ ์์ฒญ์ ๋ฐ๋ผ ๋งค๋ฒ ์๋ก์ด ํ์ด์ง๋ฅผ ์๋ตํ๋ ๋ฐฉ์์ด์์
- MPA (Multi Page Application)
- ์ค๋งํธํฐ์ด ๋ฑ์ฅํ๋ฉด์ ๋ชจ๋ฐ์ผ ์ต์ ํ์ ํ์์ฑ์ด ๋๋๋จ
- ๋ชจ๋ฐ์ผ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๊ฐ์ ํํ์ ์น ํ์ด์ง๊ฐ ํ์ํด์ง
- ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Vue.js์ ๊ฐ์ ํ๋ก ํธ์๋(Front-End) ํ๋ ์์ํฌ๊ฐ ๋ฑ์ฅ
- CSR(Client Side Rendering), SPA(Single Page Application)์ ๋ฑ์ฅ
- 1๊ฐ์ ์น ํ์ด์ง์์ ์ฌ๋ฌ ๋์์ด ์ด๋ฃจ์ด์ง๋ฉฐ ๋ชจ๋ฐ์ผ ์ฑ๊ณผ ๋น์ทํ ํํ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณต
|CSR
- Client Side Rendering
- ์๋ฒ์์ ํ๋ฉด์ ๊ตฌ์ฑํ๋ SSR ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ ํด๋ผ์ด์ธํธ์์ ํ๋ฉด์ ๊ตฌ์ฑ
- ์ต์ด ์์ฒญ ์ HTML, CSS, JS ๋ฑ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ ๊ฐ์ข ๋ฆฌ์์ค๋ฅผ ์๋ต๋ฐ๊ณ ์ดํ ํด๋ผ์ด์ธํธ์์๋ ํ์ํ ๋ฐ์ดํฐ๋ง ์์ฒญํด JS๋ก DOM์ ๋ ๋๋งํ๋ ๋ฐฉ์
- ์ฆ, ์ฒ์์ ๋ผ๋๋ง ๋ฐ๊ณ ๋ธ๋ผ์ฐ์ ์์ ๋์ ์ผ๋ก DOM์ ๊ทธ๋ฆผ
- SPA๊ฐ ์ฌ์ฉํ๋ ๋ ๋๋ง ๋ฐฉ์
์ฅ์
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ ํธ๋ํฝ ๊ฐ์
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํ ๋ชจ๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ต์ด์ ํ ๋ฒ ๋ค์ด๋ก๋ ํ ํ์ํ ๋ฐ์ดํฐ๋ง ๊ฐฑ์
- ์ฌ์ฉ์ ๊ฒฝํ(UX) ํฅ์
- ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ๋ ๋๋งํ์ง ์๊ณ ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ๋ง์ ๊ฐฑ์ ํ๊ธฐ ๋๋ฌธ
- ๋จ์
- SSR์ ๋นํด ์ ์ฒด ํ์ด์ง ์ต์ข ๋ ๋๋ง ์์ ์ด ๋๋ฆผ
- SEO(๊ฒ์ ์์ง ์ต์ ํ)์ ์ด๋ ค์์ด ์์ (์ต์ด ๋ฌธ์์ ๋ฐ์ดํฐ ๋งํฌ์ ์ด ์๊ธฐ ๋๋ฌธ)
|SSR(Server Side Rendering)
- ์๋ฒ์์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด์ฌ์ค ํ์ด์ง๋ฅผ ๋ชจ๋ ๊ตฌ์ฑํ์ฌ ์ ๋ฌํ๋ ๋ฐฉ์
- JS ์น ํ๋ ์์ํฌ ์ด์ ์ ์ฌ์ฉ๋๋ ์ ํต์ ์ธ ๋ ๋๋ง ๋ฐฉ์
์ฅ์
- ์ด๊ธฐ ๊ตฌ๋ ์๋๊ฐ ๋น ๋ฆ
- ํด๋ผ์ด์ธํธ๊ฐ ๋น ๋ฅด๊ฒ ์ปจํ ์ธ ๋ฅผ ๋ณผ ์ ์์
- SEO(๊ฒ์ ์์ง ์ต์ ํ)์ ์ ํฉ
- DOM์ ์ด๋ฏธ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์์ฑ๋์ด์๊ธฐ ๋๋ฌธ
๋จ์
- ๋ชจ๋ ์์ฒญ๋ง๋ค ์๋ก์ด ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ์ฌ ์ ๋ฌ
- ๋ฐ๋ณต๋๋ ์ ์ฒด ์๋ก๊ณ ์นจ์ผ๋ก ์ธํด ์ฌ์ฉ์ ๊ฒฝํ์ด ๋จ์ด์ง
- ์๋์ ์ผ๋ก ํธ๋ํฝ์ด ๋ง์ ์๋ฒ์ ๋ถ๋ด์ด ํด ์ ์์
|CSR &SSR
- ๋ ๋ฐฉ์์ ์ฐจ์ด๋ ์ต์ข HTML ์์ฑ ์ฃผ์ฒด๊ฐ ๋๊ตฌ์ธ๊ฐ์ ๋ฐ๋ผ ๊ฒฐ์
- ์ฆ, ์ค์ ๋ธ๋ผ์ฐ์ ์ ๊ทธ๋ ค์ง(๋ ๋๋ง) HTML์ ์๋ฒ๊ฐ ๋ง๋ ๋ค๋ฉด SSR / ํด๋ผ์ด์ธํธ๊ฐ ๋ง๋ ๋ค๋ฉด CSR
- SSR๊ณผ CSR์ ๋จ์ ๋น๊ตํ์ฌ ‘์ด๋ค ๊ฒ์ด ๋ ์ข๋ค’๊ฐ ์๋๋ผ, ๋ด ์๋น์ค ๋๋ ํ๋ก์ ํธ ๊ตฌ์ฑ์ ๋ง๋ ๋ฐฉ๋ฒ์ ์ ์ ํ๊ฒ ์ ํํ๋ ๊ฒ์ด ์ค์
- ์๋ฅผ ๋ค์ด, Django์์ Axios๋ฅผ ํ์ฉํ ์ข์์/ํ๋ก์ฐ ๋ก์ง์ ๊ฒฝ์ฐ ๋๋ถ๋ถ์ Server์์ ์์ฑ๋ HTML์ ์ ๊ณตํ๋ ๊ตฌ์กฐ (SSR)
- ๋จ, ํน์ ์์(์ข์์/ํ๋ก์ฐ)๋ง JS(AJAX & DOM์กฐ์)๋ฅผ ํ์ฉ (CSR)
- AJAX๋ฅผ ํ์ฉํด ๋น๋๊ธฐ ์์ฒญ์ผ๋ก ํ์ํ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ง์ ์์ฒญ์ ๋ณด๋ด ๋ฐ์์ค๊ณ JS๋ฅผ ํ์ฉํด DOM์ ์กฐ์
|SEO (Search Engine Optimization) ; ๊ฒ์ ์์ง ์ต์ ํ
- ์น ํ์ด์ง ๊ฒ์์์ง์ด ์๋ฃ๋ฅผ ์์งํ๊ณ ์์๋ฅผ ๋งค๊ธฐ๋ ๋ฐฉ์์ ๋ง๊ฒ ์น ํ์ด์ง๋ฅผ ๊ตฌ์ฑํด์ ๊ฒ์ ๊ฒฐ๊ณผ์ ์์์ ๋ ธ์ถ๋ ์ ์๋๋ก ํ๋ ์์
- ์ธํฐ๋ท ๋ง์ผํ ๋ฐฉ๋ฒ ์ค ํ๋
- ๊ตฌ๊ธ์ ๋ฑ์ฅ ์ดํ ๊ฒ์์์ง๋ค์ด ์ปจํ
์ธ ์ ์ ๋ขฐ๋๋ฅผ ํ์
ํ๋ ๊ธฐ์ด ์งํ๋ก ์ฌ์ฉ๋จ
- ๋ค๋ฅธ ์น ์ฌ์ดํธ์์ ์ผ๋ง๋ ์ธ์ฉ๋์๋๋ฅผ ๋ฐ์
- ๊ฒฐ๊ตญ ํ ์ฌ์ดํธ์ ์ธ์ฉ๋๋ ํ์๋ฅผ ๋๋ฆฌ๋ ๋ฐฉํฅ์ผ๋ก ์ต์ ํ
- Vue.js ๋๋ React ๋ฑ์ SPA ํ๋ ์์ํฌ๋ SSR์ ์ง์ํ๋ SEO ๋์ ๊ธฐ์ ์ด ์ด๋ฏธ ์กด์ฌ
- SEO ๋์์ด ํ์ํ ํ์ด์ง์ ๋ํด์๋ ์ ๋ณ์ SEO ๋์ ๊ฐ๋ฅ
- ํน์ ์ถ๊ฐ๋ก ๋ณ๋์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํจ
- Nuxt.js
- Vue.js ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ ์ํ ํ๋ ์์ํฌ
- SSR ์ง์
- Next.js
- React ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ ์ํ ํ๋ ์์ํฌ
- SSR ์ง์
- Nuxt.js
|Vue.js ์ญํ
Why Vue.js?
- Vanilla JS
- ํ ์ ์ ๊ฐ ์์ฑํ ๊ฒ์๊ธ์ด DOM์์ 100๊ฐ ์กด์ฌ
- ์ด ์ ์ ๊ฐ ๋๋ค์์ ๋ณ๊ฒฝํ๋ฉด, DB์ Update์ ๋ณ๋๋ก DOM์์ 100๊ฐ์ ์์ฑ์ ์ด๋ฆ์ด ๋ชจ๋ ์์ ๋์ด์ผ ํจ
- ‘๋ชจ๋ ์์’๋ฅผ ์ ํํด์ ‘์ด๋ฒคํธ’๋ฅผ ๋ฑ๋กํ๊ณ ๊ฐ์ ๋ณ๊ฒฝํด์ผ ํจ
- Vue.js
- DOM๊ณผ Data๊ฐ ์ฐ๊ฒฐ๋์ด ์๊ณ
- Data๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ด์ ์ฐ๊ฒฐ๋ DOM์ ์์์ ๋ณ๊ฒฝ
- ์ฆ, ์ฐ๋ฆฌ๊ฐ ์ ๊ฒฝ ์จ์ผ ํ ๊ฒ์ ์ค์ง Data์ ๋ํ ๊ด๋ฆฌ (Developer Exp ํฅ์)
Vue.js์ ๊ฐ๋
|MVVM Pattern
- ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ UI๋ก๋ถํฐ ๋ถ๋ฆฌํ๊ธฐ ์ํด ์ค๊ณ๋ ๋์์ธ ํจํด
- ๊ตฌ์ฑ ์์
- Model
- View
- View Model
DOM === HTML Vue===DOM๊ณผ Data์ ์ค๊ฐ์ Model==={key:value}
- Model
- “Vue์์ Model์ JavaScript Object๋ค.”
- Object === { key: value }
- Model์ Vue Instance ๋ด๋ถ์์ data๋ผ๋ ์ด๋ฆ์ผ๋ก ์กด์ฌ
- ์ด data๊ฐ ๋ฐ๋๋ฉด View(DOM)๊ฐ ๋ฐ์
- View
- “Vue์์ View๋ DOM(HTML)์ด๋ค.”
- Data์ ๋ณํ์ ๋ฐ๋ผ์ ๋ฐ๋๋ ๋์
- ViewModel
- “Vue์์ ViewModel์ ๋ชจ๋ Vue Instance์ด๋ค.”
- View์ Model ์ฌ์ด์์ Data์ DOM์ ๊ด๋ จ๋ ๋ชจ๋ ์ผ์ ์ฒ๋ฆฌ
- ViewModel์ ํ์ฉํด Data๋ฅผ ์ผ๋ง๋งํผ ์ ์ฒ๋ฆฌํด์ ๋ณด์ฌ์ค ๊ฒ์ธ์ง(DOM)๋ฅผ ๊ณ ๋ฏผํ๋ ๊ฒ
|Django & Vue.js ์ฝ๋ ์์ฑ ์์
- Django
- “๋ฐ์ดํฐ์ ํ๋ฆ”
- url → views → template
- Vue.js
- “Data๊ฐ ๋ณํํ๋ฉด DOM์ด ๋ณ๊ฒฝ”
- Data ๋ก์ง ์์ฑ
- DOM ์์ฑ
'Development > Vue.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Vue.js - Vue CLI (0) | 2022.05.09 |
---|---|
Vue.js - SFC(Single File Component) (0) | 2022.05.09 |
Vue.js - Lifecycle Hooks (0) | 2022.05.07 |
Vue.js - Template Syntax (0) | 2022.05.07 |
Vue.js - Vue Instance (0) | 2022.05.07 |
๋๊ธ