Virtualized List๋กœ DOM๋‹ค์ด์–ดํŠธ ํ•˜๊ธฐ

minjookimm
  • #Virtualized List
  • #react-virtual
  • #๋ฌดํ•œ์Šคํฌ๋กค

์•ˆ๋…•ํ•˜์„ธ์š”. ๋…ธ๋จธ์Šค ํ”„๋ก ํŠธ์—”๋“œ ํŒ€ ๊น€๋ฏผ์ฃผ์ž…๋‹ˆ๋‹ค.

์ €ํฌ ํ”„๋ก ํŠธ์—”๋“œํŒ€์€ ์ฑ„๋„ ๋ฐ ์Šคํ† ์–ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์†๋„ ์ด์Šˆ๋ฅผ ์ธ์ง€ํ•˜๊ณ , ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ UX/UI์˜ ์ค‘์š”์„ฑ์ด ์ปค์ง„ ๋งŒํผ, ํ”„๋ก ํŠธ์—”๋“œ ์ฐจ์›์—์„œ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ ์ƒ๊ฐ๋˜์–ด ๊ณต์œ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

Virtualized List ์Šคํ„ฐ๋”” ๋ฐฐ๊ฒฝ

  • ๋ฌธ์ œ ์ธ์‹

ํ”ผ๋“œ ๊ฒŒ์‹œ๋ฌผ์„ ๊ธธ๊ฒŒ ์Šคํฌ๋กคํ•  ๋•Œ ํ”ผ๋“œ ๋…ธ์ถœ์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋Š” QA๊ฐ€ ์ ‘์ˆ˜๋˜๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ์ธ์ง€ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ์—์„œ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•ด API ์‘๋‹ต ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ๋‹จ์ถ•ํ•ด์ฃผ์…จ์ง€๋งŒ, ๊ฒŒ์‹œ๊ธ€์ด ๋งŽ์€ ์ฑ„๋„์—์„œ๋Š” ์—ฌ์ „ํžˆ ์Šคํฌ๋กค ์‹œ ๋กœ๋”ฉ ์ง€์—ฐ๊ณผ ๋ฐœ์—ด์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฌธ์ œ ์ƒํ™ฉ

์Šคํฌ๋กค์ด ์ง„ํ–‰๋ ์ˆ˜๋ก DOM์— ์ˆ˜๋งŽ์€ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ๋ˆ„์ ๋˜๋ฉด์„œ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๋น„์šฉ์ด ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์›์ธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ API ์†๋„๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Œ์—๋„ DOM ๋ Œ๋”๋ง ์ž์ฒด๊ฐ€ ์†๋„ ์ €ํ•˜์™€ ๋ฐœ์—ด์„ ์œ ๋ฐœํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

Virtualized List๋ž€?

: Virtualized List๋Š” ๋ทฐํฌํŠธ, ์‚ฌ์šฉ์ž์˜ ํ™”๋ฉด์— ๋ณด์ด๋Š” ํ•ญ๋ชฉ๋งŒ DOM์— ๋ Œ๋”๋งํ•˜๊ณ , ๋ณด์ด์ง€ ์•Š๋Š” ํ•ญ๋ชฉ์€ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ํ”ผ๋“œ ์ด๋ฏธ์ง€ Virtualized List ์ ์šฉ์ „ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ํ”ผ๋“œ ์ƒํ™ฉ

ํ˜„์žฌ ์ €ํฌ ํ”ผ๋“œ๋ฅผ ๋ณด์‹œ๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ํ•œ๋‘ ๊ฐœ์˜ ํ”ผ๋“œ๋งŒ ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ DOM ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ํ›จ์”ฌ ๋” ๋งŽ์€ ํ”ผ๋“œ ์š”์†Œ๋“ค์ด ๋ Œ๋”๋ง๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, Virtualized List๊ฐ€ ์ ์šฉ ๋˜์–ด์žˆ์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ˆ˜์‹ญ๊ฐœ, ๋งŽ๊ฒŒ๋Š” ์ˆ˜์‹ญ๋งŒ๊ฐœ์˜ ํ”ผ๋“œ๊ฐ€ ๋ Œ๋”๋ง๋˜์–ด ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ์„ฑ๋Šฅ์— ์ง์ ‘์ ์ธ ๋ถ€๋‹ด์„ ์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Virtualized List๋ฅผ ์ ์šฉํ•œ๋‹ค๋ฉด

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ Virtualized List๋ฅผ ์ ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์‹ค์ œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ณ ์žˆ๋Š” ์š”์†Œ๋งŒ ๋™์ ์œผ๋กœ DOM์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  DOM ๋…ธ๋“œ ์ˆ˜๋ฅผ ์ค„์ด๊ณ , ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ”ผ๋“œ ์ด๋ฏธ์ง€ Virtualized List ์ ์šฉํ›„ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ํ”ผ๋“œ ์ƒํ™ฉ

ํ˜„์žฌ ํ”„๋กฌ์— Virtualized List๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

ํ˜„์žฌ ํ”„๋กฌ ์šด์˜ํ™˜๊ฒฝ์—์„œ๋Š” ๋งŽ์€ ์ฑ„๋„์˜ ๊ฒŒ์‹œ๊ธ€์ด ์ง€์†์ ์œผ๋กœ ๋ˆ„์ ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š”๊ฑธ ์•Œ๋ ค์ฃผ๋Š”๋ฐ์š”,

์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์‚ดํŽด ๋ณด์ž๋ฉด 2025๋…„ 7์›” 9์ผ ๊ธฐ์ค€, ํ”„๋กœ๋ฏธ์Šค๋‚˜์ธ ํ”ผ๋“œ ํฌ์ŠคํŠธ๋Š” 107,717๊ฐœ์˜€์œผ๋‚˜ 2๋‹ฌ ๋’ค์ธ 9์›” 2์ผ ๊ธฐ์ค€, ํ”„๋กœ๋ฏธ์Šค๋‚˜์ธ ํ”ผ๋“œ ํฌ์ŠคํŠธ 140,426๊ฐœ๋กœ ์•ฝ 4๋งŒ๊ฐœ์˜ ํ”ผ๋“œ ํฌ์ŠคํŠธ๊ฐ€ ์ฆ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค โฌ†๏ธ

์ผ๋ฐ˜์ ์œผ๋กœ ํ™”๋ฉด์— 500๊ฐœ ์ด์ƒ์˜ ์š”์†Œ๊ฐ€ ๋ Œ๋”๋ง๋˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๊ฐ€์ƒํ™”๊ฐ€ ํฐ ํšจ๊ณผ๋ฅผ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ”„๋กฌ์— Virtualized List๋ฅผ ์ ์šฉํ•˜๋ฉด ์Šคํฌ๋กค ์„ฑ๋Šฅ๊ณผ ์ „๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋”์šฑ ์•ˆ์ •์ ์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์Šคํ„ฐ๋”” ๋ชฉํ‘œ ๋ฐ ์ง„ํ–‰

๋ณธ๊ฒฉ์ ์ธ ์Šคํ„ฐ๋””์— ๋“ค์–ด๊ฐ€๊ธฐ์ „ ์ €ํฌ๋Š” ์„ธ๊ฐ€์ง€์˜ ๋ชฉํ‘œ๋ฅผ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ๋ฒˆ์งธ, Virtualized List์˜ ๊ฐœ๋…๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , @tanstack/react-virtual ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ต์ˆ™ํ•ด์ง€๊ธฐ

๋‘๋ฒˆ์งธ, ์ง์ ‘ ๊ตฌํ˜„์„ ํ†ตํ•ด ๋ Œ๋”๋ง ์ตœ์ ํ™” ๊ธฐ๋ฒ• ์ฒด๋“

์„ธ๋ฒˆ์งธ, ์‹ค์ œ ์„œ๋น„์Šค์— ์ ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๊นŒ์ง€ ์ž‘์„ฑํ•˜๊ธฐ์ž…๋‹ˆ๋‹ค.

์œ„ ๋ชฉํ‘œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ,

1์ฃผ์ฐจ์—” @tanstack/react-virtual ๊ณต์‹๋ฌธ์„œ ๋ฅผ ํ†ตํ•œ Virtualized List์˜ ๊ฐœ๋… ์ •๋ฆฝํ›„ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๊ธฐ์ˆ ์„ ์šฐ๋ฆฌ ์„œ๋น„์Šค์— ๋„์ž…ํ–ˆ์„๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ด์Šˆ๋‚˜ ์šฐ๋ ค์‚ฌํ•ญ์„ ๊ณต์œ ํ–ˆ์Šต๋‹ˆ๋‹ค.

2์ฃผ์ฐจ์—” ํ”„๋กœ์ ํŠธ๋‚ด ์ƒํ™ฉ๋ณ„๋กœ ์–ด๋–ค ๋ฐฉ์‹์˜ ์ ‘๊ทผ์„ ํ•ด์•ผ ํ• ์ง€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๊ณผ ๋…ผ์˜๋ฅผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ€์ƒํ™” ๋ฐฉ์‹์ด๋‚˜ ๋ฐฉ๋ฒ•๋“ค ์ค‘ ์–ด๋–ค๊ฑธ ์ฑ„ํƒํ• ์ง€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๊ณผ ๋…ผ์˜ ์ง„ํ–‰
    • ๊ณต์‹๋ฌธ์„œ์— ๋‚˜์™€์žˆ๋Š” ์˜ˆ์‹œ๋Š” ์ง€์ •๋œ ํŠน์ • ์˜์—ญ ์•ˆ์—์„œ ์Šคํฌ๋กค์„ ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์™€๋Š” ๋งž์ง€ ์•Š์•˜์Œ โ†’ ํŠน์ •์˜์—ญ์ด ์•„๋‹Œ ํ™”๋ฉด ์ „์ฒด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์Šคํฌ๋กคํ•ด๋„ ์•„์ดํ…œ ๋ฆฌ์ŠคํŠธ ์˜์—ญ์ด ์Šคํฌ๋กค ๋˜์–ด์•ผํ–ˆ์Œ
      • useVirtualizer์„ ํ†ตํ•ด ํŠน์ • ์˜์—ญ ์Šคํฌ๋กค์„ ๋จผ์ € ๊ตฌํ˜„ํ•ด๋ณด๊ณ , useWindowVirtualizer๋กœ ์œˆ๋„์šฐ ์˜์—ญ ์—์„œ ์Šคํฌ๋กค์ด ๋˜๋„๋ก ์ž‘์—… ์ง„ํ–‰
    • ๋†’์ด๊ฐ€ ์ •ํ•ด์ ธ์žˆ๋Š” ์˜์—ญ์€ ์ž‘์—…์— ํฐ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์œผ๋‚˜ ๋†’์ด๊ฐ€ ์•„์ดํ…œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฒฝ์šฐ ๊ณต์‹๋ฌธ์„œ์— ๋‚˜์™€์žˆ๋Š”dynamic ์™€ variable์ค‘ ์–ด๋–ค๊ฑธ ์ฑ„ํƒํ•ด์•ผ ํšจ์œจ์ ์ผ์ง€์— ๋Œ€ํ•œ ๊ณ ๋ฏผ
      • ์•„์ดํ…œ์ด ๋ Œ๋”๋ง๋œ ํ›„ ref={virtualizer.measureElement}๋ฅผ ํ†ตํ•ด ๋†’์ด๋ฅผ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ๋Š” dynamic์„ ์ฑ„ํƒํ•ด์„œ ์ž‘์—… ์ง„ํ–‰

3์ฃผ์ฐจ๋ถ€ํ„ฐ 6์ฃผ์ฐจ๊นŒ์ง€๋Š” ํ”„๋กœ์ ํŠธ์— ์‹ค ์ ์šฉ์„ ํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ์Šต๋‹ˆ๋‹ค.

๊ณ ์ •๋œ ๋†’์ด์— ํ•œ๋ฒˆ์— ์ „์ฒด ๋ฐ์ดํ„ฐ ๋กœ๋“œํ•ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€, ๋ฌดํ•œ ์Šคํฌ๋กค๋กœ ๊ตฌํ˜„๋œ ํŽ˜์ด์ง€ ๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ๋†’์ด์˜ ์•„์ดํ…œ์ด ์žˆ๋Š” ๋ฌดํ•œ์Šคํฌ๋กค ํŽ˜์ด์ง€๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์ผ€์ด์Šค๋กœ ์‹ค์Šต์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์Šคํ„ฐ๋”” ์ง„ํ–‰์—์„œ ๊ฒช์€ ์–ด๋ ค์›€

์ €ํฌ๋Š” ์ด๋ฒˆ ์Šคํ„ฐ๋””์—์„œ ๋‹จ์ˆœํžˆ ์ด๋ก ๋งŒ ํ•™์Šตํ•˜๋Š” ๋ฐ ๊ทธ์น˜์ง€ ์•Š๊ณ , ์‹ค์ œ ์ฝ”๋“œ๋กœ ๊ฐ€์ƒํ™” ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉฐ ํŒ€์› ๊ฐ์ž๊ฐ€ ๋А๋‚€ ์–ด๋ ค์›€์„ ํ•จ๊ป˜ ๊ณต์œ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค.

๊ทธ ๊ณผ์ •์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์  ์ด์Šˆ๋ฅผ ๋งˆ์ฃผํ–ˆ๊ณ , ์ด๋ฅผ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋ฉฐ ์—ฌ๋Ÿฌ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ ˆ์ด์•„์›ƒ ๊ณ„์‚ฐ ๋ฌธ์ œ

: ํ•œ ์ค„์— ํ•œ ๊ฐœ์”ฉ ๋ฐฐ์น˜ํ• ์ง€, ๋‘์„ธ ๊ฐœ์”ฉ ๋ฐฐ์น˜ํ• ์ง€์— ๋”ฐ๋ผ ๊ณ„์‚ฐ ๋กœ์ง์ด ๋‹ฌ๋ผ์ง
โ†’ ๊ธฐ์กด์— ์ •์˜๋œ ์Šคํƒ€์ผ์„ useVirtualizer์˜ size ์ธ์ˆ˜์— ๋งž๊ฒŒ ์žฌ์ •์˜ํ•˜์—ฌ ํ•ด๊ฒฐ

  1. ์Šคํฌ๋กค ์ค‘๋ณต ์ด์Šˆ

: ํŠน์ • ์˜์—ญ์—๋งŒ ๊ฐ€์ƒ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹ useVirtualizer ์‚ฌ์šฉ ์‹œ, ๊ฐ€์ƒ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ ์šฉ๋˜๋Š” ์˜์—ญ๊ณผ ๊ทธ ์™ธ ์˜์—ญ์ด ๋ถ„๋ฆฌ๋˜์–ด ์Šคํฌ๋กค์ด ๋‘ ๊ฐœ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ
โ†’ useWindowVirtualizer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ์œˆ๋„์šฐ ์Šคํฌ๋กค์— ๋Œ€์‘ํ•˜๋„๋ก ์„ค์ •ํ•˜์—ฌ ํ•ด๊ฒฐ

  1. ๋†’์ด ๊ฐ’ ๋ถˆ๊ท ์ผ ๋ฌธ์ œ

: ์•„์ดํ…œ๋งˆ๋‹ค ๋†’์ด๊ฐ€ ๋‹ฌ๋ผ ๋ฌดํ•œ ์Šคํฌ๋กค ์‹œ ์Šคํฌ๋กค ์œ„์น˜ ๊ณ„์‚ฐ์ด ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•„ ์–ด์ƒ‰ํ•œ ์›€์ง์ž„์ด ๋‚˜ํƒ€๋‚จ
โ†’ estimateSize๋กœ ์ถ”์ • ๋†’์ด์˜ ์ •ํ™•๋„๋ฅผ ๋†’์ด๊ณ  measureElement์œผ๋กœ ์‹ค์ œ ๋†’์ด๋ฅผ ์ธก์ • ๋ฐ ์บ์‹ฑํ•˜์—ฌ ํ•ด๊ฒฐ

  1. ์Šคํƒ๋ทฐ ํ™˜๊ฒฝ ๋ฌธ์ œ

: ์Šคํƒ๋ทฐ ํ˜•ํƒœ๋กœ ๋…ธ์ถœ๋˜๋Š” ํŽ˜์ด์ง€์—์„œ ์Šคํฌ๋กค๊ณผ ๋ Œ๋”๋ง ๋™์ž‘์ด ๋งค๋„๋Ÿฝ์ง€ ๋ชปํ•จ
โ†’ ๊ฐ€์ƒ๋ฆฌ์ŠคํŠธ ์˜์—ญ์— ๋†’์ด๋ฅผ ์ง€์ •ํ•ด์คŒ์œผ๋กœ์จ ํ•ด๊ฒฐ

์‹ค์Šต์— ์–ด๋ ค์›€์ด ์žˆ์—ˆ์ง€๋งŒ ๊ฐ€์ƒํ™”(Virtualization)๋ฅผ ์‹ค์ œ๋กœ ์ ์šฉํ•˜๋ฉด์„œ ์ฑ„๋„ ๋ฐ ์Šคํ† ์–ด์˜ ์„ฑ๋Šฅ๊ฐœ์„  ๊ฐ€๋Šฅ์„ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ํŠนํžˆ ์Šคํฌ๋กค ์‹œ ๋ถˆํ•„์š”ํ•œ DOM ๋ Œ๋”๋ง์„ ์ตœ์†Œํ™”ํ•จ์œผ๋กœ์จ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX) ์ธก๋ฉด์—์„œ๋„ ์˜๋ฏธ ์žˆ๋Š” ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์Šต ๊ณผ์ •์—์„œ ๋งˆ์ฃผํ•œ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋“ค์„ ํ•จ๊ป˜ ๊ณ ๋ฏผํ•˜๊ณ  ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋ฉด์„œ, ๋‹จ์ˆœํ•œ ๊ฐœ๋… ํ•™์Šต์„ ๋„˜์–ด ์‹ค์ œ ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ์˜ ์ ์šฉ ๊ฐ€๋Šฅ์„ฑ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ๊ฒ€์ฆํ•  ์ˆ˜ ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋” ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์œ ์ž…๋˜๋”๋ผ๋„ ์•ˆ์ •์ ์ด๊ณ  ๋ถ€๋“œ๋Ÿฌ์šด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„

์Šคํ„ฐ๋””๋ฅผ ํ†ตํ•ด Virtualized List์˜ ๊ฐ€๋Šฅ์„ฑ์„ ํ™•์ธํ–ˆ์œผ๋‹ˆ, ๋‹ค์Œ ๋‹จ๊ณ„๋Š”

  1. ๊ฐ€์žฅ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ด ์Œ“์ธ ํŒฌํ”ผ๋“œ์— ์šฐ์„  ์ ์šฉ
  2. CS ์ด์Šˆ๋กœ ์ œ๊ธฐ๋œ โ€œ๋’ค๋กœ๊ฐ€๊ธฐ ์‹œ ์Šคํฌ๋กค ์œ„์น˜ ๋ณด์กดโ€ ๊ตฌํ˜„์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ
  • Virtualized List์˜ scrollToIndex API ํ™œ์šฉ
  1. ์Šคํ† ์–ด ์ƒํ’ˆ ๋ฆฌ์ŠคํŠธ ์ ์šฉ
  • ํ”ผ๋“œ ์ ์šฉ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ํ™•๋Œ€
  1. ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธํ™”
  • ํ”„๋กœ์ ํŠธ ์ „์ฒด์—์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ VirtualizedList ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ

์Šคํ„ฐ๋””๋ฅผ ๋งˆ์น˜๋ฉฐ

์ด๋ฒˆ ์Šคํ„ฐ๋””๋ฅผ ํ†ตํ•ด Virtualized List์— ๋Œ€ํ•œ ๊ธฐ์ˆ ์  ๊ฐ€๋Šฅ์„ฑ์„ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ €ํฌ ํŒ€์— ํฐ ์˜๋ฏธ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  ๊ฒฝ์šฐ ์„ฑ๋Šฅ ๊ฐœ์„  ํšจ๊ณผ๋ฅผ ๊ธฐ๋Œ€ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๊ณ , ์ตœ๊ทผ CS๋กœ ์ œ๊ธฐ๋œ ์Šคํฌ๋กค ๋ณต์› ๋ฌธ์ œ ๋˜ํ•œ Virtualized List์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๋ฌธ์„œ๋‚˜ ์ฑ…์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ ์‹ค์Šตํ•ด๋ณด๋Š” ๊ณผ์ •์ด ํŠนํžˆ ๋„์›€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด 6์ฃผ๊ฐ„์˜ ์Šคํ„ฐ๋””์—์„œ ์•„์‰ฌ์šด ์ ๋„ ์žˆ์—ˆ๋Š”๋ฐ์š”,

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

๊ทธ๋Ÿผ์—๋„ ์ด๋ฒˆ ๊ฒฝํ—˜์„ ํ†ตํ•ด ๋‹ค์Œ ์Šคํ„ฐ๋””์—์„œ ๋”์šฑ ํ˜„์‹ค์ ์ธ ๋ชฉํ‘œ๋ฅผ ์„ธ์šฐ๊ณ  ๋ฐœ์ „์‹œ์ผœ ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

โ† ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

Art Changes Life

๋…ธ๋จธ์Šค์™€ ํ•จ๊ป˜ ์—”ํ„ฐํ…Œํฌ ์‚ฐ์—…์„ ํ˜์‹ ํ•ด๋‚˜๊ฐˆ ๋ฉค๋ฒ„๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ฑ„์šฉ ์ค‘์ธ ๊ณต๊ณ  ๋ณด๊ธฐ