๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Vue.js10

[Vue.js] chunk-venders.js ์šฉ๋Ÿ‰ ์ค„์ด๊ธฐ ๋ฐ ์†๋„ ๊ฐœ์„  Vue.js ๋กœ ๊ฐœ๋ฐœ ํ›„ ์šด์˜ ์ค‘์ธ ์‚ฌ์ดํŠธ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค. Vue.js ๋Š” ์ฒ˜์Œ์— ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ํ•œ๋ฒˆ์— ๋ฐ›์•„์˜ค๋Š”๊ฒŒ ๋ฌธ์ œ์˜€๋‹ค. ๊ทธ ๋ชจ๋“  ๊ฒƒ์ด ์••์ถ•๋œ ํŒŒ์ผ์ธ chunk-vendors.js ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์„๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ, ์–ด๋Š์ƒˆ 12.3MB ๊นŒ์ง€ ๋ถˆ์–ด๋‚œ ํƒ“์— ์ธํ„ฐ๋„ท ์†๋„๊ฐ€ ๋Š๋ฆฐ ๋‚˜๋ผ์—์„œ๋Š” ์ฒ˜์Œ์— ํ™”๋ฉด์„ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•œ๋‹ค. ์ฒ˜์Œ์—๋Š” lazy-loading ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ๋ฅผ ์‹œ์ผœ๋ณด์•˜์ง€๋งŒ, ์ฐจ์ด๊ฐ€ ๋ฏธ๋ฏธ ํ–ˆ๋‹ค. ์ด ๋ฐ–์—๋„ ์ด๋ฏธ์ง€ ์‚ฌ์ด์ฆˆ ์ค„์ด๊ธฐ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด chunk-vendors.js ์„ ์ผ์ •ํ•œ ํฌ๊ธฐ๋กœ ์ชผ๊ฐœ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜๋‹ค. // vue.config.js ํŒŒ์ผ configureWebpack:{ mode: 'development', devtool:.. 2023. 5. 18.
[Vue.js] Chart.js ์ฐจํŠธ ๋ฐ์ดํ„ฐ 0 ์ธ ๊ฐ’ ์ˆจ๊ธฐ๊ธฐ Chart.js ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ฒ˜์Œ ์‚ฌ์šฉํ• ๋•Œ๋Š” custom ์ด ์‰ฝ์ง€ ์•Š์•„ ๋ณด์˜€๋Š”๋ฐ, ์ด๊ฒƒ ์ €๊ฒƒ ์ ์šฉํ•˜๋‹ค ๋ณด๋‹ˆ ์—ญ์‹œ๋‚˜ ๋‚ด๊ฐ€ ์ž˜ ๋ชฐ๋ž๋˜ ๊ฒƒ์ด์—ˆ๋‹ค. ๋ˆ„์ ์ฐจํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ๋‚˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด Mon ~ Sun ๊นŒ์ง€ ๊ฐ’์ด 0์ธ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•˜๋‹ค ์ƒ๊ฐ๋˜์—ˆ๋‹ค. ์ด์ „ ๊ฒŒ์‹œ๊ธ€์—์„œ total ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์„ ํ™œ์šฉํ•˜์—ฌ 0 ์ธ ๋ฐ์ดํ„ฐ๋“ค์„ ์ˆจ๊ฒจ๋ณผ ๊ฒƒ์ด๋‹ค. tooltips: { callbacks: { footer: function (data) { // ๋ˆ„์  ์ดํ•ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ฝ”๋“œ var total = 0; for (var i = 0; i < data.length; i++) { total += data[i].xLabel; } return "Total: " + total; }, // ์ถ”๊ฐ€๋œ ์ฝ”๋“œ label: functio.. 2022. 11. 8.
[Vue.js] Chart.js labels hover ์‹œ ๋ฐ์ดํ„ฐ(tooltip) ๋ณด์ด๊ธฐ Chart.js ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•ด๋‹น ๋ง‰๋Œ€/์ฐจํŠธ ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ค์•ผ tooltp ์ด ๋ณด์ธ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์œ„์™€ ๊ฐ™์ด June ์€ 8000๊ฑด ์ด์ƒ์ด๊ณ  January ๋Š” 10๊ฑด์ผ๋•Œ ๋ฒ”์œ„ ์ฐจ์ด๊ฐ€ ๋„ˆ๋ฌด ์ปค์ ธ์„œ ๋ง‰๋Œ€์œ„์— ์ •ํ™•ํžˆ ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๊ธฐ ์‰ฝ์ง€ ์•Š๋‹ค. ์ด ์ƒํƒœ๋Š” ์‚ฌ์šฉ์„ฑ์ด ๋„ˆ๋ฌด ๋–จ์–ด์ ธ์„œ January ๋ผ๋ฒจ ์œ„์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ธ์„๋•Œ๋„ tooltip์ด ๋ณด์ด๋„๋ก ์ฆ‰, ๊ฐ ๋ผ๋ฒจ์œ„์— hover ๊ฐ€ ๋™์ž‘ํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•œ๋‹ค. options: { tooltips: { mode: 'index', intersect: false }, } ๊ฐ„๋‹จํ•˜๊ฒŒ options ์— ์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค. chart.js Document ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค. ์„ค์ •์ด true ์ด๋ฉด intersect์ฒซ ๋ฒˆ์งธ ๊ต์ฐจ ํ•ญ๋ชฉ์ด ๋ฐ์ดํ„ฐ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฒฐ์ •ํ•˜.. 2022. 11. 4.
[Vue.js] Char.js ๋ผ๋ฒจ ๊ฐ’(value) ํ‘œ์‹œํ•˜๊ธฐ Chart.js ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜ต์…˜๊ณผ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ „๋ถ€ ๋‹ค ์•Œ๊ณ  ์‚ฌ์šฉํ•˜๊ธด ์–ด๋ ค์šฐ๋‹ˆ ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ์ฐพ์•„๋ณด๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ๋ฒ„์ „๋ณ„๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๋‹ฌ๋ผ์„œ ๋ผ๋ฒจ ๊ฐ’ ํ‘œ์‹œํ•˜๋Š”๋ฐ ์• ๋ฅผ ์ข€ ๋จน์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ chart.js ๋ฒ„์ „์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค chart.js : 2.9.4 chartjs-plugin-datalabels : 0.7.0 vue-chartjs : 3.5.1 ๋‚˜๋Š” chart.js 2.x ๋ฅผ ์‚ฌ์šฉํ•ด์„œ datalabels ๋ฅผ 2.x ๋ฅผ ์„ค์น˜ํ–ˆ์„๋•Œ๋„ ๋™์ž‘์„ ํ•˜์ง€ ์•Š์•—๊ณ , 1.x๋กœ ๋‚ด๋ ธ์„๋•Œ๋„ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜๋‹ค. ์ฐพ๊ณ  ์ฐพ์•„์„œ 0.7.0 ๋ฒ„์ „์„ ์„ค์น˜ํ•ด์„œ์•ผ ๋ผ๋ฒจ ๊ฐ’์„ ํ‘œ์‹œ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋งŒ์•ฝ chart.js 3.x ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด datalables ๋Š” 2.x ์ด์ƒ ํ•„์š”ํ•˜๋ฉฐ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ๊ณต์‹๋ฌธ์„œ์—์„œ ํ™•์ธ.. 2022. 10. 28.
[Vue.js] Chart.js ๋ˆ„์  ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ์ดํ•ฉ ํ‘œ์‹œํ•˜๊ธฐ (Stack Bar, Total) Chart.js ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ธฐ๋ณธ ์˜ต์…˜์œผ๋กœ๋Š” ๋ˆ„์  ๋ง‰๋Œ€๊ทธ๋ž˜ํ”„์˜ total ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š๋Š”๋‹ค. ์ด๋Š” option ์˜ tooltips ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค. tooltips: { mode: "label", callbacks: { footer: function (data) { var total = 0; for (var i = 0; i < data.length; i++) { total += data[i].yLabel; // ์„ธ๋กœ๋ง‰๋Œ€๋Š” yLabel , ๊ฐ€๋กœ๋ง‰๋Œ€๋Š” xLabel } return "Total: " + total; }, }, },option ๋“ค์„ ์ •์˜ํ• ๋•Œ ์ด ์ฝ”๋“œ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค. ๋ง‰๋Œ€ ๊ฐœ๋ณ„ ๊ฐ’๊ณผ ์ด ํ•ฉ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค. 2022. 10. 25.
[Vue.js] Hot Reload ๋™์ž‘ ์•ˆํ• ๋•Œ ์˜ˆ์ „์— ๋งŒ๋“ค์–ด ๋†จ๋˜ Vue.js + SpringBoot ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ ๋„์› ๋Š”๋ฐ Vue ์˜ ์žฅ์ ์ธ hot reload ๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋™์ž‘์„ ํ•˜์ง€ ์•Š์•˜๋‹ค. Vue ์˜ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พธ๋ฉด ํ•ญ์ƒ rebuild ํ›„ ์Šคํ”„๋ง์„ ์žฌ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ๋ถˆํŽธํ•ด์„œ ๊ธ‰ํ•˜๊ฒŒ ๊ตฌ๊ธ€์— ๊ฒ€์ƒ‰ํ•ด์„œ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜๋‹ค. package.json ์— --watch ์ถ”๊ฐ€ build --watch ๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์žฌ๋นŒ๋“œ ํ•˜์—ฌ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜๋„๋ก ์ถ”๊ฐ€ ํ•˜์˜€๋‹ค. ์ด์ œ ์˜ˆ์ „์ฒ˜๋Ÿผ Vue์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฐ”๋กœ ๋ฐ˜์˜์ด ๋˜์—ˆ๋‹ค. 2022. 10. 18.
Vue.js(4) Router ๋ฐ Axios, async await ๊ฐœ๋… Vue Router ์‹ฑ๊ธ€ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋‹ค. ํŽ˜์ด์ง€๊ฐ„์— ์ด๋™ํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ• ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋ผ์šฐํ„ฐ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ var router = new VueRouter({ ... }) ๋ผ์šฐํ„ฐ ์˜ต์…˜ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ routes : ๋ผ์šฐํŒ… ํ•  URL ๊ณผ ์ปดํฌ๋„ŒํŠธ ๊ฐ’ ์ง€์ • path : ํŽ˜์ด์ง€ url component : ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ ๋ฟŒ๋ ค์งˆ ์ปดํฌ๋„ŒํŠธ mode URL ์˜ ํ•ด์‰ฌ ๊ฐ’ ์ œ๊ฑฐ ์†์„ฑ mode=''history' ===> # ๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ถ™๋Š” ๊ฒƒ์„ ์ œ๊ฑฐ ์ธ์Šคํ„ด์Šค์— ๋ผ์šฐํ„ฐ ์ธ์Šคํ„ด์Šค ๋“ฑ๋ก new Vue({ router: router ...}) ์„ค์น˜ https://router.vuejs.org/installation.html ๊ณต์‹์‚ฌ์ดํŠธ ์„ค์น˜ ๋งํฌ npm install vue-router .. 2022. 10. 9.
Vue.js(3) Vue ์ธ์Šคํ„ด์Šค ์†์„ฑ ๋ฐ ์ปดํฌ๋„ŒํŠธ Vue ์ธ์Šคํ„ด์Šค new Vue({ el:, template:, data: , methods: , created: , watch: , }); el: ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ทธ๋ ค์ง€๋Š” ํ™”๋ฉด์˜ ์‹œ์ž‘์  template: ํ™”๋ฉด์— ํ‘œ์‹œํ•  ์š”์†Œ data: ๋ฐ์ดํ„ฐ methods: ์ด๋ฒคํŠธ ํ•จ์ˆ˜๋“ค created: ๋ผ์ดํ”„์‚ฌ์ดํด ์ค‘ ํ•˜๋‚˜ watch: data์—์„œ ์ •์˜ํ•œ ์†์„ฑ์ด ๋ณ€๊ฒฝ๋์„ ๋•Œ ์ถ”๊ฐ€ ๋™์ž‘์„ ์ •์˜ computed: ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ methods ํ•จ์ˆ˜์ €์žฅ์†Œ computed ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์— ๋”ฐ๋ผ์„œ ๋ฐ”๋€Œ๋Š” ๊ฐ’์„ ์ •์˜ํ•˜๋Š” ์†์„ฑ์ด๋‹ค. ํ…œํ”Œ๋ฆฟ ๋‚ด์— ํ‘œํ˜„์‹์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ„๋‹จํ•œ ์—ฐ์‚ฐ์ผ ๋•Œ๋งŒ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. {{ message.split('').reverse().join('') }} ์ด๋ ‡๊ฒŒ ์—ฐ์‚ฐ.. 2022. 10. 9.
Vue.js(2) vue ์ธ์Šคํ„ด์Šค ๋ฐ ํ…œํ”Œ๋ฆฟ ๋ฌธ๋ฒ• Vue Instance Vue.js ํ™”๋ฉด ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ๊ผญ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ํ•„์ˆ˜ ๋‹จ์œ„์ด๋‹ค.Instance ์ƒ์„ฑ // ์ƒˆ๋กญ๊ฒŒ Vue๋ฅผ ์„ ์–ธ new Vue({ el: '#app', // ์–ด๋–ค ์š”์†Œ์— ์ ์šฉ์„ ํ•  ์ง€ ์ •ํ•จ ์—ฌ๊ธฐ์„œ๋Š” HTML ์ฝ”๋“œ์— ์„ ์–ธ๋œ id="app"์ธ div ํƒœ๊ทธ๋ฅผ ์ง€์ • data: { // data ๋Š” ํ•ด๋‹น VueJS์—์„œ ์‚ฌ์šฉํ•  ์ •๋ณด๋“ค์„ ์„ ์–ธํ•ด์ฃผ๋Š” ์—ญํ•  title: '์•ˆ๋…• VueJS!' } }) ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ๊ณผ API new Vue({ el: , // ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ทธ๋ ค์ง€๋Š” ํ™”๋ฉด์˜ ์‹œ์ž‘์  (ํŠน์ • HTMLํƒœ๊ทธ) template: , // ํ™”๋ฉด์— ํ‘œ์‹œํ•  ์š”์†Œ (HTML, CSS ๋“ฑ) data: , // ๋ทฐ์˜ ๋ฐ˜์‘์„ฑ(Reactivity) ๊ฐ€ ๋ฐ˜์˜๋œ ๋ฐ์ดํ„ฐ ์†์„ฑ methods: , // ํ™”.. 2022. 10. 9.
Vue.js(1) ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ MVVM ์ด๋ž€? ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋กœ์ง์„ UI๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ญ์‚ฌ : ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ํ™œ์šฉํ•œ ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ์™€ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. 1. ๋ชจ๋ธ Model ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค.2. ๋ทฐ View UI์™€ UI ๋กœ์ง์„ ๋‹ค๋ฃฌ๋‹ค.3. ๋ทฐ ๋ชจ๋ธ View Model View ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ์œ„ํ•ด ๋งŒ๋“ , View๋ฅผ ์œ„ํ•œ Model์ด๋‹ค. View๋ฅผ ๋‚˜ํƒ€๋‚ด์ฃผ๊ธฐ ์œ„ํ•œ Model ์ด์ž View ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ๋™์ž‘ ์‚ฌ์šฉ์ž์˜ Action๋“ค์€ View๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๊ฒŒ ๋จ View์— Action์ด ๋“ค์–ด์˜ค๋ฉด, Command ํŒจํ„ด์œผ๋กœ View Model์— Action์„ ์ „๋‹ฌ View Model์€ Model์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ Model์€ .. 2022. 10. 9.
๋ฐ˜์‘ํ˜•