Vue: ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๋ชจ๋“ˆ๋กœ ๋ถ„ํ• ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ๊ณ  ์ˆ˜์ค€์˜ ์ง€์› ์ œ๊ณต

์— ๋งŒ๋“  2017๋…„ 07์›” 04์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: vuejs/vue

์ด ๊ธฐ๋Šฅ์€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๊นŒ?

Angular 2์—์„œ ๋‚˜์˜จ ๊ธฐ๋Šฅ ์ค‘ ์ œ๊ฐ€ ์ •๋ง ๊ทธ๋ฆฌ์›Œํ•˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ๋…ผ๋ฆฌ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ์•„๋ž˜๋ฅผ ๋ผ์šฐํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์ œ๊ณตํ•˜์—ฌ Vue์—์„œ ์—ฌ์ „ํžˆ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import Vue from 'vue';
import { routes } from './routes';

export const LazyModule: Vue.ComponentOptions<Vue> = {
  render: r => {
    console.log('rendering');
    return r('router-view');
  },
  created: function() {
    this.$router.addRoutes(routes);
  }
};

์ด๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€๋งŒ Vue ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋ชจ๋“ˆ์ด ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋ฉด ๋” ์ง๊ด€์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋ชจ๋“ˆ์€ ๋ Œ๋”๋ง ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ API๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ์Šต๋‹ˆ๊นŒ?

์ด ๋ชฉ์ ์„ ์œ„ํ•ด ์—ฌ๊ธฐ ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์ข‹์€ ์ž‘์—…์ด ์—ฌ๊ธฐ ์—์„œ ํ…Œ์ŠคํŠธ

๊ถ๊ทน์ ์œผ๋กœ Vue์—์„œ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์ง€์›์„ ๊ธฐ๋Œ€ํ•˜๊ณ  Vue Router์™€ Vuex์—์„œ ์ด๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@patrickhousley , ๋‹ค์Œ์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Vue ๋น„๋™๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ
Vue-router ์ง€์—ฐ ๋กœ๋”ฉ
Vuex ๋น„๋™๊ธฐ ๋ชจ๋“ˆ (์•„์ง ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์Œ)

ssr ๋ฐ pwa ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ํŽธ๋ฆฌํ•œ ์ฝ”๋“œ ๋ถ„ํ•  ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ๊ณ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์—ฐ์Šต์„ ํ•˜๋ฉด ์ •๋ง ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  4 ๋Œ“๊ธ€

@patrickhousley , ์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” Angular 2์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์—†์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ๋ชจ๋“ˆ์ด ๋ฌด์—‡์ด๋ฉฐ ์ด์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

IMO๋Š” Vue/React์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ (๊ฑฐ์˜) ๋ชจ๋“  ๊ฒƒ์„ Component ๋ฐฉ์‹์œผ๋กœ ์ƒ๊ฐํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Module ๋ณด๋‹ค๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ•ฉ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

@jkzing ์ข€ ๋” ์‚ดํŽด ์—ฌ๊ธฐ์—์„œ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ

@patrickhousley , ๋‹ค์Œ์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Vue ๋น„๋™๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ
Vue-router ์ง€์—ฐ ๋กœ๋”ฉ
Vuex ๋น„๋™๊ธฐ ๋ชจ๋“ˆ (์•„์ง ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์Œ)

ssr ๋ฐ pwa ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ํŽธ๋ฆฌํ•œ ์ฝ”๋“œ ๋ถ„ํ•  ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ๊ณ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์—ฐ์Šต์„ ํ•˜๋ฉด ์ •๋ง ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰