seeyouletter / seeyouletter-fe

0 stars 0 forks source link

[๐Ÿ’Œ FEATURE REQUEST] ๋ธ”๋ก ๋ฐ ๊ทธ๋ฃน์˜ ์ถ”๊ฐ€ ๋กœ์ง์„ ์ƒ์„ฑํ•œ๋‹ค #68

Closed JengYoung closed 1 year ago

JengYoung commented 1 year ago

๋ฉˆ์ถฐ! ๐Ÿ–๐Ÿป ์ž ์‹œ ์ฒดํฌ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค~

๋ฐฐ๊ฒฝ ๋ฐ ์„ค๋ช…

์ด์ œ ๋“œ๋””์–ด ๋Œ€๋ง์˜ ๋ธ”๋ก-๊ทธ๋ฃน์„ UI์ ์œผ๋กœ CRUDํ•˜๋Š” ์ž‘์—…์— ๋“ค์–ด๊ฐ„๋‹ค. ํ•ต์‹ฌ์€ ํ”ผ๊ทธ๋งˆ์ฒ˜๋Ÿผ, ๋“œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•œ CRUD ๋กœ์ง์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๋‹ค๋งŒ ์ด ์ž‘์—…์˜ ๊ฒฝ์šฐ, ๊ฝค๋‚˜ ๋งŽ์€ ์–‘์˜ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ์„ ์ €๋ฒˆ #67 ์—์„œ ํ™•์ธํ–ˆ๋‹ค. (์•ฝ 3500์ค„...) ๋”ฐ๋ผ์„œ ์ƒ์„ฑ ์ž‘์—…๋งŒ ์šฐ์„ ์ ์œผ๋กœ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค.

๊ธฐ๋Œ€๊ฒฐ๊ณผ

  1. [๋ธ”๋ก]์„ ๋ˆ„๋ฅด๋ฉด Main ์•ˆ์—์„œ๋Š” crosshair ๋ชจ์–‘์˜ ์ปค์„œ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.
  2. crosshair ๋ชจ์–‘์ธ ์ƒํƒœ์—์„œ Main ์•ˆ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  3. ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ทธ๋ฆด ๋•Œ์—๋Š” ์˜ˆ์ƒ ๊ฐ€๋Šฅํ•œ ํฌ๊ธฐ๊ฐ€ ์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜์™€์•ผ ํ•œ๋‹ค.
  4. ๋งˆ์šฐ์Šค๋ฅผ ๋–ผ๋ฉด ์ปค์„œ ๋ชจ์–‘์ด ์›๋ž˜๋Œ€๋กœ ๋Œ์•„์™€์•ผ ํ•œ๋‹ค.
  5. ์ปค์„œ ๋ชจ์–‘์ด ๋Œ์•„์˜ด๊ณผ ๋™์‹œ์— ๋ธ”๋ก์ด ๋‚˜์™€์•ผ ํ•œ๋‹ค.

๋Œ€์•ˆ ์ œ์‹œ

๊ทธ๋Ÿฌํ•˜๋‹ค. ํ”ผ๊ทธ๋งˆ์ฒ˜๋Ÿผ ํ•˜๋Š” ๋กœ์ง์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

ํ˜„ ์ƒํ™ฉ - ๋„์ž… ๊ฒ€ํ†  ์ค‘

๊ฒฐ๊ตญ ์ผ๋ จ์˜ ์ถ”๊ฐ€/์ƒ์„ฑ ์ž‘์—…์„ ํ•œ ๋ฒˆ์— ์ง€์›ํ•˜๊ธฐ๋กœ ๋ฐฑ์—”๋“œ ์ธก๊ณผ ์•ฝ์†ํ•œ ์ƒํƒœ์ด๋‹ค. ์ง€๊ธˆ 2๊ฐ€์ง€์˜ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒ€ํ†  ์ค‘์ด๋‹ค.

TaskQueue

TaskQueue๋ฅผ ํ•  ๊ฒƒ์ž„์€ ์ž๋ช…ํ•˜๋‚˜, ์ด๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ• ์ง€๊ฐ€ ๊ณ ๋ฏผ ์ค‘์ด๋‹ค. ์˜ˆ์ปจ๋Œ€ ๊ทธ๋ƒฅ Queue ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ตœ์ ํ™”ํ•  ๋ถ€๋ถ„์ด ์กด์žฌํ•˜์ง€ ์•Š๋‚˜ ๊ณ ๋ฏผ ์ค‘์ด๋‹ค.

  1. Queue๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜๋Š” ์ˆœ๊ฐ„์—, rawํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ๋ณด๋‹ค๋Š” ์••์ถ•์„ ํ•˜๋Š” ๊ฒŒ ๋” ์ข‹์ง€ ์•Š์„๊นŒ? ์˜ˆ์ปจ๋Œ€ ์ƒ์„ฑ-์ถ”๊ฐ€-์‚ญ์ œ๋ฅผ ๋ชจ๋‘ ํ–ˆ๋‹ค๋ฉด ์• ์ดˆ๋ถ€ํ„ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ˆ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  2. ์‚ฌ์‹ค ์Šค์ผ€์ค„๋ง์„ ์œ„ํ•œ ํƒœ์Šคํฌ ํ๋ฅผ ๋งŒ๋“œ๋Š” ํ˜•์‹๋„ ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•˜๋‹ค. ์˜ˆ์ปจ๋Œ€ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ฎคํ…์Šค, ์„ธ๋งˆํฌ์–ด, ๋ชจ๋‹ˆํ„ฐ ํ˜•์‹์ฒ˜๋Ÿผ ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํƒœ์Šคํฌ ํ์˜ ์ ์šฉ ๋ฐฉ์‹์€ ๋‹ค์–‘ํ•˜๊ฒŒ ์กด์žฌํ•˜์ง€๋งŒ ๋‚ด๋ถ€ ์ฒ˜๋ฆฌ๋ฅผ ์ข€ ๋” ๋‹ค์–‘ํ•˜๊ฒŒ ๋ฐ”๊พธ์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ค ๊ฒŒ ๋‚˜์„๊นŒ?

IndexedDB

์ด๋Ÿฌํ•œ ๊ณ ๋ฏผ์€ ์›น ์Šคํ† ๋ฆฌ์ง€ ํ˜•์‹์— ๋Œ€ํ•ด์„œ๋„ ๋‚˜์˜ค๊ณ  ์žˆ๋‹ค. ์˜ˆ์ปจ๋Œ€ ํ˜„์žฌ ์ด๋Ÿฐ ๊ณ ๋ฏผ๋“ค์ด ์žˆ๋‹ค.

  1. ๋ธ”๋ก์˜ ์ƒ์„ฑ ๋กœ์ง์„ ์ผ๋‹จ Queue์— ๋†“๋Š”๋‹ค๊ณ  ์น˜์ž. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฑฐ, ์ƒˆ๋กœ ๊ณ ์นจํ•˜๋ฉด ์—†์–ด์ง€์ง€ ์•Š๋‚˜?
  2. ๋”ฐ๋ผ์„œ ๋‹น์žฅ ๋– ์˜ค๋ฅด๋Š” ๊ฑด 2๊ฐ€์ง€๋‹ค. IndexedDB์™€ LocalStorage์ธ๋ฐ(Cache API๋Š” PWA๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ์‘๋‹ต API๊ฐ€ ์ฃผ ์บ์‹ฑ ๊ด€์‹ฌ์‚ฌ์ด๋ฏ€๋กœ ์ผ๋‹จ ๋…ผ์™ธ๋กœ ์นœ๋‹ค.) ์–ด๋–ค ๊ฒŒ ๋‚˜์„๊นŒ?
  3. ์‰ฌ์šด ๊ฑด LocalStorage์ด๊ธด ํ•œ๋ฐ, ๋ง‰์ƒ LocalStorage๋Š” ์šฉ๋Ÿ‰ ์ œํ•œ์ด ์žˆ์ง€ ์•Š๋‚˜? ๊ทธ๋Ÿฌ๋ฉด IndexedDB๊ฐ€ ๋‚ซ์ง€ ์•Š๋‚˜?

๊ณ ๋ฏผ ๋์— ๋‚ด๋ฆฐ ํ•ด๋‹ต (230205, 15:00, ์ตœ์ข… ๊ฒฐ๊ณผ ์•„๋‹˜!)

TaskQueue

๋˜๋Œ๋ฆฌ๊ธฐ ๋“ฑ์˜ ์—ฌ๋Ÿฌ ๋กœ์ง๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ณ ๋ คํ•  ๋•Œ ๊ฐ€์žฅ ์ง๊ด€์ ์ธ Queue ํ˜•์‹์˜ ํƒœ์Šคํฌ ํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด์œ ๋Š”, ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๊ฐ€ ๊ณผ์—ฐ ์–ผ๋งˆ๋‚˜ ๋ ์ง€ ๋ชจ๋ฅด๋Š” ์ƒํ™ฉ์—์„œ ์„ธ๋งˆํฌ์–ด์™€ ๋ชจ๋‹ˆํ„ฐ์ฒ˜๋Ÿผ ์ข€ ๋” ๋ณ‘๋ ฌ์ ์ธ ํ”„๋กœ์„ธ์Šค ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋™๊ธฐํ™” ๋กœ์ง์€ ์˜ค๋ฒ„์Šค๋Ÿฝ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (๋ฌผ๋ก  ๋งŒ๋“œ๋Š” ๊ฑด ๋‚ด๊ฒŒ ๊ฝค๋‚˜ ๊ท€์ค‘ํ•œ ๊ฒฝํ—˜์ด ๋˜๊ฒ ์ง€๋งŒ, ์•ˆ์ •์ ์ธ ์ฝ”๋“œ๊ฐ€ ์šฐ์„ ์ด๋‹ค.)

๋‹ค๋งŒ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๋‹ค์Œ 3๊ฐ€์ง€ ๋ฌธ์ œ์ ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.

์ผ๋‹จ ์ „์ž๋Š” DOM ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ์Šคํ† ์–ด์— ์ถ”๊ฐ€ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ํ›„์ž๊ฐ€ ๋ฌธ์ œ์ด๊ณ , ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๋ฌธ์ œ๋Š” ์ตœ์ ํ™”๋œ ํ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ์ง€๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

๐Ÿ™†๐Ÿป ์ตœ์ ํ™”๋œ ํ๋Š” computed๋˜๋Š” ํ˜•์‹์œผ๋กœ ๊ตฌ์ถ•

์–ด์ฐจํ”ผ ๋˜๋Œ๋ฆฌ๊ธฐ ๋“ฑ์ด ์ผ์–ด๋‚˜๋ฉด ๋ฐ˜๋“œ์‹œ ํ์—์„œ ํ•œ ๋ฒˆ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์ถ”๊ฐ€์ ์ธ ๋กœ์ง๋“ค์„ ๋ณต์žกํ•˜๊ฒŒ ํ•ด์•ผ ํ•˜๊ณ , ์ด๋Š” ์ ์ž–์€ ์œ ์ง€๋ณด์ˆ˜์„ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (ex: delete๋ฅผ ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒฝ์šฐ, ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ๋Œ๋ ค ๋†“๋Š” ์‹์„ ์ตœ์ ํ™”ํ•  ์ง€?)

O(N)์œผ๋กœ ์ผ๋‹จ ์ตœ์ ํ™”๋œ ํ๋ฅผ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. ์ด๋•Œ ํ•ด๋‹น ํ‚ค(id)๊ฐ€ ์žˆ์Œ์„ ์•Œ๊ธฐ ์œ„ํ•œ ์Šคํ† ์–ด๋ฅผ Map์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค. ์กฐํšŒํ•  ๋•Œ๋งˆ๋‹ค ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ํ‚ค๊ฐ€ ์œ„์น˜ํ•œ ์ธ๋ฑ์Šค ์ชฝ์—์„œ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด O(N)์œผ๋กœ ๋‹ฌ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ฆ‰ ์ด ๋กœ์ง์€ O(N)๋งŒ์œผ๋กœ๋„ ๋ชจ๋“  ๋ณ€๊ฒฝ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.


์ถ”๊ฐ€ ๊ณ ๋ฏผ ํ›„์— ๋‚ด๋ฆฐ ํ•ด๋‹ต

TaskQueue - ๊ตณ์ด ๋‚ด๊ฐ€ ์ตœ์ ํ™”๋œ ํ๋ฅผ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‚˜?

์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋ฉ€์ง€ ์•Š์€ ๊ณณ์— ๊ฐ€์žฅ ์™„๋ฒฝํ•œ ํ•ด๋‹ต์ด ์กด์žฌํ–ˆ๋‹ค. React์˜ ์Šค๋ƒ…์ƒท ํ˜•ํƒœ์˜ ๋กœ์ง์„ ์ด์šฉํ•˜๋ฉด ์• ์ดˆ๋ถ€ํ„ฐ ํŽธํ•˜์ง€ ์•Š์•˜์„๊นŒ ์‹ถ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฌผ์€ DOM ํ˜•ํƒœ๋กœ ์–ด์ฐŒ๋˜์—ˆ๋“  ๋งŒ๋“ค์–ด์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋Š” Store์— ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์Šคํ† ์–ด์—์„œ ๊ฐ Block/Group๋“ค์„ ์ดˆ๊ธฐ์˜ ๊ฐ’๊ณผ Diffingํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งŒ๋“ค์–ด๋‚ด๋ฉด ๋˜๋Š” ๊ฑฐ์˜€๋‹ค! ๊ทธ๋Ÿฌ๋ฉด ์•„๋ฌด๋ฆฌ ๋กœ์ง์ด ๋ณต์žกํ•ด์ง€๋”๋ผ๋„ ๊ฐ„๋‹จํ•ด์ง„๋‹ค.

๊ฒฐ๊ณผ ์—ฐ์‚ฐ ์—ญ์‹œ O(N)์ด๊ฒ ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

No response