๐Ÿ”จํ† ๊ณ„ํ”ผ ๋ฆฌ๋‰ด์–ผ ํšŒ๊ณ 

thumbnail

๊ฒฐ๊ณผ๋ถ€ํ„ฐ ๋ณด์—ฌ์ฃผ๊ธฐ

๊ฒฐ๊ณผ ์‚ฌ์ง„์ด๋ž‘ ๋‹ค ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ ค๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „2 ๊นƒํ—ˆ๋ธŒ ๋งํฌ

๋ฒ„์ „2 ๋ฐฐํฌ ๋งํฌ

ํ† ๊ณ„ํ”ผ๊ฐ€ ๋ญ”๊ฐ€์š”?

ํ•™๋ถ€์ƒ ์‹œ์ ˆ 4ํ•™๋…„ 2ํ•™๊ธฐ๋•Œ(2018๋…„) ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ์ด์ž, ์ฒ˜์Œ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์“ด ํ”„๋กœ์ ํŠธ์˜€๊ณ , ์ฒซ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ์˜€๊ณ , ์ฒซ ํ˜‘์—…์ด์—ˆ๊ณ , ์ฒซ ์™ธ์ฃผ์ž‘ํ’ˆ์œผ๋กœ ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

๋‹น์‹œ ์ƒ๋ช…๊ณผํ•™๊ณผ ์‚ฌ๋žŒ๊ณผ ๋งŒ๋‚˜ ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ ์–˜๊ธฐ๋„ ํ•ด๋ณด๊ณ , ์ค‘๊ฐ„ ์ ๊ฒ€๋„ ํ•ด๋ณด์•˜๋˜ ํ”„๋กœ์ ํŠธ๋ผ ๊ธฐ์–ต์— ํฌ๊ฒŒ ๋‚จ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์€ ํ† ์งˆ ์ˆ˜์น˜๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ๋Š” ๋ณดํ†ต ๊ณ„์‚ฐ๊ธฐ์ž…๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์ด์ œ ํŠน์ดํ•œ ์ถ”๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ณ๋“ค์ธโ€ฆ!

๊ทธ ๋‹น์‹œ ์š”๊ตฌ ์‚ฌํ•ญ์ด

  1. ๋…ผ๋ฌธ๊ณผ ์ฑ…์„ ๋“œ๋ฆดํ…Œ๋‹ˆ ์—ฌ๊ธฐ ๋‚˜์™€์žˆ๋Š” ํ•„์š”ํ•œ ๊ณต์‹๋“ค์„ ๊ฐ„๋‹จํžˆ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„์‚ฐ๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”.
  2. ํ˜„์žฅ์— ๋‚˜๊ฐ€์„œ ์ฐ์€ ์‚ฌ์ง„๋งˆ๋‹ค ์œ„์น˜์™€ ์ œ๋ชฉ ๋“ฑ์„ ์‚ฌ์ง„ ์œ„์— ๋ฉ”๋ชจ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

    1. ์œ„์น˜๋Š” ์œ„๋„์™€ ๊ฒฝ๋„๋กœ ํ•ด์ฃผ์…จ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹ฌ๋ ฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์„œ ํ•ด์•ผํ•  ์ผ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
  4. ์ปดํ“จํ„ฐ์™€ ํœด๋Œ€ํฐ ์ „๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์–ด์š”.

๋Œ€๊ฐ• ์ด๋žฌ๋˜ ๊ฑธ๋กœ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค.

๋‹ฌ๋ ฅ์€ ์—†์–ด๋„ ๋˜์ง€ ์•Š๋‚˜์š”? ๋ฅผ ํ•ญ์ƒ ์—ฌ์ญค๋ดค๋˜ ๊ฑฐ ๊ฐ™๋‹คโ€ฆ โ€˜๊ธฐ๋ณธ ๋‹ฌ๋ ฅ์ด ๋” ์ข‹์•„์š”โ€ฆโ€™ ํ•˜๋ฉด์„œ

๋‹น์‹œ ๋ฒ„์ „ 1 ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

๋ฒ„์ „1 ๊นƒํ—ˆ๋ธŒ ๋ธŒ๋žœ์น˜

๋ฒ„์ „1 ๋ฐฐํฌ ๋งํฌ

๋ฆฌ๋‰ด์–ผ์€ ์™œ ํ•˜์‹œ์ฃ ?

์•„๋ฌด๋ž˜๋„ ์ฒ˜์Œ์œผ๋กœ ํ–ˆ๋˜ ํ”„๋ก ํŠธ์—”๋“œ๋‹ค๋ณด๋‹ˆ ๋‚ด๋ถ€ ์ฝ”๋“œ๊ฐ€ (๋‚˜์œ์ชฝ์œผ๋กœ) ๊ธฐ๊ฐ€ ๋ง‰ํž™๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ์ธ์ง€ ํ•ญ์ƒ ๋งˆ์Œ ์†์œผ๋กœ ๋ถˆํŽธํ–ˆ๋Š”๋ฐโ€ฆ ์–ด์ฐจํ”ผ ๋ฆฌ์•กํŠธ๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋‹ˆ ์ด์ฐธ์— ํ† ๊ณ„ํ”ผ๋ฅผ ๋ฆฌ๋‰ด์–ผํ•˜๊ณ  Vue๋Š” ์ž‘๋ณ„ ์ธ์‚ฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ๋‰ด์–ผ์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜›๋‚  ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด๋ณด๋Š” ๊ฒƒ๋„ ๋„์›€๋œ๋‹ค๋Š” ๊ฑธ ์–ด๋””์„œ ๋ณธ ํƒ“๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ๋‰ด์–ผํ•˜๊ธฐ

0. ์‚ฌ์ „ ์ค€๋น„

์ตœ๊ทผ ๋ฆด๋ฆฌ์ฆˆ๋œ Vue3๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋ ค๊ณ  ํ–ˆ์œผ๋‚˜, ํ† ๊ณ„ํ”ผ์˜ ํ•ต์‹ฌ ์š”์†Œ์ค‘ ํ•˜๋‚˜์ธ Vuetify๊ฐ€ Vue3๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„์„œ ๊ธฐ์กด๋ฒ„์ „์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ „์—ญ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์•„์„œ Vuex๋„ ๋นผ๊ณ , ๊ธฐํƒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ์ตœ๋Œ€ํ•œ ๊ฐ€๋ณ๊ฒŒ ๋งŒ๋“ค๊ณ ์ž ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

PWA์˜ ๊ฒฝ์šฐ์—๋Š”, ๋ฒ„์ „1 ๋‹น์‹œ์—” ์ง์ ‘ ๋š๋”ฑ๋š๋”ฑํ•ด์„œ ๋„ฃ์—ˆ๋Š”๋ฐ, ์š”์ฆ˜์—” ์ฒ˜์Œ๋ถ€ํ„ฐ ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•˜๋Š” ๋•๋ถ„์— ์‰ฝ๊ฒŒ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ ๋””์ž์ธ์ด๋‚˜ ๋กœ๊ณ  ๋“ฑ์€ ๊ทธ๋Œ€๋กœ!

1. ํ—ค๋”

๋จผ์ € ๊ฐœ๋ฐœํ•  ๋Œ€์ƒ์€ ์—ญ์‹œ ํ—ค๋” ๋ฐ ๋ฉ”๋‰ด์ž…๋‹ˆ๋‹ค. ์•ฑ ์…ธ ๋””์ž์ธ์ด๋ผ ํฐ ๋ฌด๋ฆฌ๋Š” ์—†์—ˆ๊ณ , Vuetify์—์„œ๋„ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๊ธฐ์— ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ฌ๋ผ์ง„ ์ ์ด๋ผ๋ฉด ๊ธฐ์กด ๋ฒ„์ „์—๋Š” ํˆดํŒ์ด ์žˆ์—ˆ์ง€๋งŒ, ์ด๋ฒˆ์—” ํˆดํŒ์„ ์‚ญ์ œํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ตณ์ด ํˆดํŒ์ด ์—†์–ด๋„ ์ถ”๊ฐ€ํ•œ ์•„์ด์ฝ˜์„ ํ†ตํ•ด ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.

1-1 ์ •๋ณด ๋ชจ๋‹ฌ

ํ—ค๋” ์˜ ์šฐ์ธก ์ƒ๋‹จ์— ๋ถ™์€ ์•„์ด์ฝ˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ •๋ณด ๋ชจ๋‹ฌ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค. ์ด๊ฑธ ํ†ตํ•ด์„œ ๊ฐ ํ† ์งˆ ์ˆ˜์น˜ ๊ณ„์‚ฐ์— ์–ด๋–ค ๊ฒƒ๋“ค์ด ํ•„์š”ํ•œ์ง€ ์žฌ๋ฃŒ๋“ค์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ํ•˜๋“œ ์ฝ”๋”ฉ์œผ๋กœ ๊ธ€์„ ์ ์—ˆ๋‹ค๋ฉด, ์ด๋ฒˆ ๋ฆฌ๋‰ด์–ผ ๋ฒ„์ „์—์„œ๋Š” ๋ฏธ๋ฆฌ ์ •๋ฆฌํ•ด๋†“์€ ๊ณต์‹์„ ์ž˜ ์ •๋ฆฌํ•˜์—ฌ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํž˜์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ตฌ๊ฐ„์ž…๋‹ˆ๋‹ค.

์ข€ ๋” ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ๋กœ๋„ ์จ๋จน์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋ฏธ Vuetify์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋‹ฌ ์ปดํฌ๋„ŒํŠธ์™€ ๋‹ค๋ฅผ ๋ฐ”๊ฐ€ ์—†์–ด์ ธ์„œ ์œ ๋‹ˆํฌํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ ๋†”๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

for๋ฌธ๊ณผ if๋ฌธ์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋ณต์„ ์—†์• ๊ณ , ์ง€์† ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

2. ๋‹ฌ๋ ฅ

์‚ฌ์‹ค ์ฒ˜์Œ ๊ฐœ๋ฐœ๋•Œ๋„ ๊ตณ์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ธ๊ฐ€โ€ฆ ๊ณ ๋ฏผํ–ˆ๋˜ ๊ธฐ๋Šฅ์ด๋ผ ๋ฆฌ๋‰ด์–ผ์—์„  ๋บ„๊นŒ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด์ œ Vuetify์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ๋‹ฌ๋ ฅ UI์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜๊ณ , ๋นผ์ง€ ์•Š๊ณ  ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ๋งˆ์Œ ๋จน์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ฌ๋ ฅ์„ ๋ถ™์ด๊ณ , ๋ชจ๋‹ฌ์„ ํ†ตํ•ด CREATE, ํŒ์—…์„ ํ†ตํ•ด READ ์™€ DELETE๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. Vuetify ๋‹ฌ๋ ฅ๋งŒ์˜ ๊ตฌ์„ฑ์ด ํ—ท๊ฐˆ๋ ค์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ Typescript์˜ ํ•„์š”์„ฑ์„ ์‹ค๊ฐํ•˜๊ฒŒ ๋˜์—ˆ๋„ค์š”.

๋‹ค์Œ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š”๋ฐโ€ฆ React์—์„œ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ํ•œ ํŒŒ์ผ ๋‚ด ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ด์ ธ์„œ ๊ฐœ๋ณ„ ํŒŒ์ผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ๋ฐ–์— ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ณ ๋ฏผ์„ ์กฐ๊ธˆ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์–ด์ฐจํ”ผ ๋‚˜๋ˆˆ 3๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ์„œ๋กœ ์˜์กด๋„๊ฐ€ ๊นŠ์œผ๋‹ˆ, ์ข€ ๊ธธ๋”๋ผ๋„ ํ•œ ์ปดํฌ๋„ŒํŠธ์— ๋„ฃ๋Š” ๊ฒŒ ๋งž์ง€ ์•Š์„๊นŒ?

๊ทธ๋ž˜๋„ ๋‚˜๋ˆ ์„œ ๋‚˜์  ๊ฑด ์—†์œผ๋‹ˆ ์ผ๋‹จ์€ ๋‚˜๋ˆ„์–ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋žฌ๋”๋‹ˆ ์ด๋ฒคํŠธ๋ฒ„์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋‚˜ ๊ณ ๋ คํ•ด๋ณผ ์ •๋„๋กœ ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ„์˜ ํ†ต์‹ ์ด ์—ฌ๊ธฐ์ €๊ธฐ ์™”๋‹ค๊ฐ”๋‹คํ•˜๋‹ค๋ณด๋‹ˆ ํ˜ผ์„ ์„ ๋นš์—ˆ๋Š”์ง€, ์ด์ „์— ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์ผ ๋•Œ๋Š” ๊ดœ์ฐฎ์•˜๋˜ ๋ถ€๋ถ„๋“ค์ด ํ„ฐ์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹คํ–‰ํžˆ๋„ ์—๋Ÿฌ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์„œ ๋ง‰์•˜์ง€๋งŒ, ๋ง‰์ƒ โ€˜๊ดœํžˆ ๋‚˜๋ˆˆ ๊ฒŒ ์•„๋‹๊นŒโ€™ ๋ผ๋Š” ์ƒ๊ฐ๋งŒ ๋” ์ปค์กŒ์Šต๋‹ˆ๋‹ค.

React ์˜€๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ถ„๋ฆฌํ–ˆ์„๊นŒโ€ฆ?? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋จธ๋ฆฌ๋ฅผ ์ง€๋ฐฐํ•œ ์ˆœ๊ฐ„

3. ์บ”๋ฒ„์Šค

์ด์ชฝ์€ ์‹œ์ž‘ํ•˜๊ธฐ ์ „ ์ด๋ฆ„์„ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค.

Canvas๋ฅผ ์“ฐ๋‹ˆ ์บ”๋ฒ„์Šค๋ผ๊ณ  ํ•ด์•ผํ•˜๋‚˜? ์•„๋‹ˆ๋ฉด ์‚ฌ์ง„์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฑฐ๋‹ˆ ์‚ฌ์ง„ํƒญ์ด๋ผ๊ณ  ํ•ด์•ผํ•˜๋‚˜?

๊ฒฐ๊ตญ ์ฒ˜์Œ์—” ์‚ฌ์ง„์„ ์“ฐ๋‹ค๊ฐ€ ๋งˆ์ง€๋ง‰์— ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๊ณ  ์บ”๋ฒ„์Šค๋กœ ๋‹ค์‹œ ๊ฐˆ์•„ํƒ”์Šต๋‹ˆ๋‹ค.

์•„๋ฌด๋ž˜๋„ ํ‰์†Œ์— ์ž˜ ์“ฐ์ง€ ์•Š๋Š” canvas์ด๋‹ค๋ณด๋‹ˆ ๋งŽ์ด ๊ณ ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

3-1 ์‚ฌ์ง„์„ ๋ถˆ๋Ÿฌ์™€์„œ ์บ”๋ฒ„์Šค์— ๊ทธ๋ฆฌ๊ธฐ

์š”๊ตฌ์‚ฌํ•ญ์€

  1. ์‚ฌ์ง„์„ ๋ถˆ๋Ÿฌ์™€์„œ ์บ”๋ฒ„์Šค์— ๋ณด์—ฌ์ฃผ๊ณ ,
  2. ๊ทธ ์œ„์— ๊ธ€์ž ๋ฉ”๋ชจ๋ฅผ ์ ์–ด ๋„ฃ์€ ๋’ค,
  3. ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋จผ์ € ์‚ฌ์ง„์„ ๋ถˆ๋Ÿฌ์™€์„œ ์บ”๋ฒ„์Šค์— ๋ณด์—ฌ์ฃผ๋Š” ๊ฒŒ ์šฐ์„ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์ง„์„ inputํƒœ๊ทธ๋กœ ๋ถˆ๋Ÿฌ์™€์„œ canvas์— ๋ณด์—ฌ์ฃผ๋Š” ๊ฑด ์‰ฌ์› ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ!

canvas๋Š” ์ผ๋ฐ˜ imgํƒœ๊ทธ์ฒ˜๋Ÿผ ๊พธ์šฑ ๋ˆŒ๋Ÿฌ์„œ, ์ €์žฅํ•˜๊ธฐ ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด๊ฐ€ ๋‚˜์˜ค๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์บ”๋ฒ„์Šค ์œ„์˜ ๊ทธ๋ฆผ์„ ๋‹ค์‹œ img ํƒœ๊ทธ๋กœ ๋„˜๊ฒจ์ฃผ์–ด ์œ ์ €์—๊ฒŒ ๋ณด์—ฌ์ฃผ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ UX์ƒ ์œ ์ €๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ณด์—ฌ์ค„ ์ˆ˜๊ฐ€ ์žˆ์œผ๋‹ˆ๊นŒ์š”.

๋‹คํ–‰ํžˆ๋„ canvas์—๋Š” toDataURL ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์—ˆ๊ณ , ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์บ”๋ฒ„์Šค ์œ„์— ๊ทธ๋ ค์ง„ ๊ทธ๋ฆผ์„ img์˜ src ํƒœ๊ทธ๋กœ ๋„˜๊ฒจ์ค„ ์ˆ˜๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ๋ฒˆ์งธ ๋ฌธ์ œ

์ด ๊ณผ์ •์—์„œ ์บ”๋ฒ„์Šค์˜ ํฌ๊ธฐ๊ฐ€ ์›๋ณธ ์‚ฌ์ง„์˜ ํ•ด์ƒ๋„๋ฅผ ๋ฐ”๊พธ์–ด๋ฒ„๋ฆฌ๋Š” ๊ฒฝํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์บ”๋ฒ„์Šค์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์œผ๋ฉด, ์›๋ณธ ์‚ฌ์ง„์˜ ํฌ๊ธฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜๋“  ์Šค์ผ€์ผ์„ ์ค„์—ฌ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด ์›์ธ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ €๋Š” ์บ”๋ฒ„์Šค๋ฅผ ์—†์• ๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„์˜ˆ ์—†์• ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ™”๋ฉด์—์„œ ๋ณด์ด์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ๋กœ ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์ง„์ด ๋“ค์–ด์˜ค๋ฉด, ์‚ฌ์ง„์˜ ํฌ๊ธฐ์— ๋งž๊ฒŒ ์บ”๋ฒ„์Šค์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์บ”๋ฒ„์Šค๊ฐ€ ์œ ์ €์˜ ํ™”๋ฉด์„ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋ ํ…Œ๊ณ , ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์ด ๊นจ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์–ด์ฐจํ”ผ ํ™”๋ฉด์— ๋ณด์—ฌ์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ img ํƒœ๊ทธ๋ฟ์ด๊ธฐ ๋•Œ๋ฌธ์— canvas ํƒœ๊ทธ๋ฅผ ์ˆจ๊ฒผ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌ๋ฉด ์•„๋ฌด๋ฆฌ ์บ”๋ฒ„์Šค๊ฐ€ ์ปค๋„ ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €๋Š” ์•Œ์•„์ฑ„์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋‘๋ฒˆ์งธ ๋ฌธ์ œ

๊ทธ๋Ÿฐ๋ฐ ๊ฐ„ํ—์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์Šต๋‹ˆ๋‹ค. ์œ ์ €๊ฐ€ ๋ถˆ๋Ÿฌ๋“ค์ธ ์‚ฌ์ง„์„ img์˜ src๋กœ ๋„ฃ๋Š” ๋ถ€๋ถ„์—์„œ ๊ณ„์† ์ „๋‹ฌ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์„œ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์‹คํ—˜ ๋์— ์•Œ๊ฒŒ ๋œ ๊ฒฐ๊ณผ๋Š”, ์›๋ณธ ์‚ฌ์ง„์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด dataURL๋กœ ํŒŒ์‹ฑํ•˜๋Š” ๊ณผ์ •์ด ๊ธธ์–ด์ ธ ์ œ๋•Œ์— img ํƒœ๊ทธ์˜ src๋กœ ๋„˜๊ฒจ์ฃผ์ง€ ๋ชปํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

  1. ์–ด์ฐจํ”ผ ๊ฐ€๋” ๋ฐœ์ƒํ•˜๋‹ˆ ๋‚ด๋ฒ„๋ ค๋‘”๋‹ค -> ์†”์งํžˆ ํ˜นํ–ˆ์ง€๋งŒโ€ฆ ์‹ ์€ ๋””ํ…Œ์ผํ•จ์— ๊นƒ๋“ ๋‹ค๊ณ , ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.
  2. setTimeout์ด๋‚˜ sleep์œผ๋กœ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๋งŒ๋“ ๋‹ค -> ๊ฐ๊ฐ์˜ ์‚ฌ์ง„๋งˆ๋‹ค ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๋‹ค๋ฅด๊ณ , ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ UX์ ์œผ๋กœ ์น˜๋ช…ํƒ€๋ผ๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๊ธฐ๊ฐํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  3. ๋  ์ง„ ๋ชจ๋ฅด๊ฒ ์œผ๋‚˜ Promise๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ๋‹ค.

๋„ค. 3๋ฒˆ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ํŒŒ์‹ฑํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ , ํŒŒ์‹ฑ์ด ์™„๋ฃŒ๋˜๋ฉด img ํƒœ๊ทธ๋กœ ๋„˜๊ฒจ์ฃผ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋žฌ๋”๋‹ˆ ์‹ ๊ธฐํ•˜๊ฒŒ๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

Promise์— ๋˜๋‹ค์‹œ ๊ฐํƒ„ํ•˜๊ณ  ๊ฐ‘๋‹ˆ๋‹ค.

์บ”๋ฒ„์Šค ํผ

์‚ฌ์ง„์„ ๋ณด์—ฌ์ฃผ๊ณ  ์ €์žฅํ•˜๋Š” ๊ฒƒ๊นŒ์ง€ ๋๋งˆ์ณค์œผ๋‹ˆ ์ด์ œ ๋ฉ”๋ชจ๋ฅผ ๊ตฌํ˜„ํ•  ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค.

๋‹คํ–‰ํžˆ๋„ ๋ฒ„์ „1์—์„œ ํ–ˆ๋˜ ๋ฐฉ๋ฒ•์ด ์•„์ง ์œ ํšจํ•˜๋‹ˆ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ ์™„๋ฒฝํ•˜์ง€๋Š” ๋ชปํ–ˆ์ง€์š”.

๊ทธ๋ž˜์„œ ๊ณ ์นœ ๋ถ€๋ถ„์€

  1. ์‚ฌ์ง„์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ํฐํŠธ ํฌ๊ธฐ๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒŒ ์•ˆ ๋˜๋ฉด ํ•ด์ƒ๋„๊ฐ€ ํฐ ์‚ฌ์ง„์—๋Š” ๊ธ€์ž๊ฐ€ ๊ฐœ๋ฏธ๋งŒํ•ด์ง‘๋‹ˆ๋‹ค.
  2. ๊ธ€์ž์˜ ๋’ท ๋ฐฐ๊ฒฝ์„ ๋™์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ canvas์— measureText๋ผ๋Š” ์ข‹์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์–ด ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๊ฑธ ํ™œ์šฉํ•˜๋ฉด ๊ธ€์ž๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋„ˆ๋น„๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๊ฐ ํŒŒํŠธ๋งˆ๋‹ค ์ค„ ๋ฐ”๊ฟˆ๋„ ์กฐ๊ธˆ ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค. ๋™์ ์œผ๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํผ ๋ถ€๋ถ„๋„ ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ๊ฐ€ ์กฐ๊ธˆ ๊ฑฑ์ •๋˜์—ˆ์œผ๋‚˜, ํผ์€ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

3. ๊ณ„์‚ฐ๊ธฐ

๊ณ„์‚ฐ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ์–ด๋ ค์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฏธ๋ค„๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „1์—์„œ๋Š” ๊ทธ๋žฌ๊ฑฐ๋“ ์š”.

ํ•˜์ง€๋งŒโ€ฆ

์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ ๊ณต์„ ๋“ค์ธ ๊ณต์‹์ด ์™„์„ฑ๋„๊ฐ€ ๋†’์•˜๋Š”์ง€ ์ •๋ง ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ๋ง์•˜์Šต๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„์ „์—์„œ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ–ˆ๋˜

  1. placeholder๋ฅผ ๋™์ ์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ
  2. hint ๋™์ ์œผ๋กœ ์„ค์ •ํ•˜๊ธฐ
  3. ๊ฐ ๊ณต์‹๋“ค์˜ ํ•จ์ˆ˜ ๋™์  ์„ค์ •
  4. ์–ด์ฉŒ๊ตฌ์ €์ฉŒ๊ตฌ ๋™์ ์œผ๋กœ

๋“ฑ๋“ฑโ€ฆ ๋™์ ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฑด ์ „๋ถ€ ์†์‰ฝ๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.

spread operator์˜ ๋„์›€๋„ ์ปธ๋„ค์š”.

๋‹ค๋งŒ ์—ฌ๊ธฐ์„œ๋„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๋‚˜๋‹ˆ ์ž์‹ - ๋ถ€๋ชจ - ์ž์‹ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ ธ์„œ ๋˜๋‹ค์‹œ ๊ณ ๋ฏผ์— ๋น ์กŒ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ref๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๊ธด ํ–ˆ์ง€๋งŒ ์ฐ์ฐํ•œ ๋Š๋‚Œ์€ ๊ฐ€์‹œ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ํ•ด๋„ ๊ดœ์ฐฎ๋‹ค๊ณ  ํ•˜๊ธด ํ–ˆ์ง€๋งŒโ€ฆ

๊ณผ์—ฐ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ํ•˜๋Š” ๊ฒŒ ๋งž๋Š” ์ผ์ผ๊นŒโ€ฆ??

๊ฐˆ์ˆ˜๋ก ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์˜์กด๋„๊ฐ€ ๋†’์•„์ง€๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ, Vuex๋ฅผ ์“ฐ์ง€ ์•Š๋Š” ์ง€๊ธˆ์œผ๋กœ์ฌ ์ตœ์„ ์ด๋‹ˆ ์–ด์ฉ” ์ˆ˜ ์—†์ด ์ด๋Œ€๋กœ ์œ ์ง€ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์ •๋ณด Expansion

์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์ง€์†๊ฐ€๋Šฅ์„ฑ์ด ๋ง˜์— ๊ฑธ๋ ธ๋Š”์ง€, ์ด๋ฒˆ ์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์ง€์†๊ฐ€๋Šฅ์„ฑ์„ ์ตœ๋Œ€ํ•œ ์œ ์ง€ํ•˜์—ฌ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํผ์ฒ˜๋Ÿผ ์œ ๋‹ˆํฌํ•œ ๊ฒƒ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ , ์–ด๋””์—๋‚˜ ๋ถ™์—ฌ์“ธ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€ ๋ณดํŽธ์ ์ธ ์ปดํฌ๋„ŒํŠธ๋ผ ๊ฐ€๋Šฅํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋งŒ๋“ค์–ด๋†“๊ณ  ๊ดœํžˆ ํ˜ผ์ž ๋ฟŒ-๋“ฏ

๋งˆ๋ฌด๋ฆฌ

lighthouse_result

๋์œผ๋กœ Lighthouse๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋‹ˆ ๊ฝค๋‚˜ ๋†’๊ฒŒ ๋‚˜์™€์„œ ๋งŒ์กฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ ‘๊ทผ์„ฑ์—์„œ ์ ์ˆ˜๊ฐ€ ์กฐ๊ธˆ ๋–จ์–ด์ง€๋Š” ๊ฑดโ€ฆ ์•„์‰ฝ๊ฒŒ๋„ ํ† ๊ณ„ํ”ผ์˜ ํ…Œ๋งˆ ์ƒ‰์ด ๋ฌธ์ œ๋ผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํผํฌ๋จผ์Šค๋Š” ์›น ํฐํŠธ๋•Œ๋ฌธ์—โ€ฆ

Vue๋กœ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋Š” ํ•œ๋™์•ˆ ์ด๊ฒŒ ๋งˆ์ง€๋ง‰์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋Š” react์— ์ง‘์ค‘ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ Next์™€ ๊ฐ™์€ SSR ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋– ์˜ค๋ฅด๊ณ  ์žˆ๋‹ค๊ธธ๋ž˜ ๊ฑฐ๊ธฐ์—๋„์š”.

์šฐ๋ฆฌ ํ˜• ๋ณ€ํ™˜๊ธฐ์—๋„ Vue๊ฐ€ ์“ฐ์˜€๋Š”๋ฐ, ์‚ฌ์‹ค์ƒ ๊ธฐ๋Šฅ์€ Vanilla JS๋กœ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋ฆฌ๋‰ด์–ผ ํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐ”๋‹๋ผ๋กœ ํ•ด๋ด์•ผ ์‹ถ๊ฒ ๋„ค์š”.

๋ณ„ ์ƒ๊ด€์€ ์—†์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์ด๋ฆ„์ด ์ „๋ถ€ C๋กœ ์‹œ์ž‘ํ•˜๋‹ค๋ณด๋‹ˆ (Calculator-, Canvas-, Calendar-) ํ—ท๊ฐˆ๋ฆด ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹คโ€ฆ

๋‹ค์‹œ ๋ณด์—ฌ์ฃผ๊ธฐ

๋ฒ„์ „2 ๊นƒํ—ˆ๋ธŒ ๋งํฌ

๋ฒ„์ „2 ๋ฐฐํฌ ๋งํฌ


Written by@Caesiumy
๐ŸŒ์˜๋ฌธ๊ณผ์—์„œ ์ถœ๋ฐœํ•ด ๐Ÿ’ป์ปดํ“จํ„ฐ๊ณตํ•™์œผ๋กœ ๋„์ฐฉํ•˜๋Š” ํ˜ผ์ข… ๐Ÿ‘จโ€๐Ÿ’ป๊ฐœ๋ฐœ์ž!