λ¬΄ν•œ 슀크둀과 버츄얼 μŠ€ν¬λ‘€μ„ λ„μž… 쀑인 νŽ˜μ΄μ§€μž…λ‹ˆλ‹€!

 

ν”„λ‘œμ νŠΈμ— λ„μž…λ  λ¬΄ν•œ μŠ€ν¬λ‘€μ„ κ°œλ°œ 쀑인 μƒν™©μž…λ‹ˆλ‹€.
κ°œλ°œμ„ μ§„ν–‰ν•˜λ˜ 쀑 λ°μ΄ν„°κ°€ 무수히 λ§Žμ•„μ§ˆ 경우 λ¬Έμ œκ°€ λ°œμƒν•˜μ§„ μ•Šμ„κΉŒλΌλŠ” μƒκ°μ— λ¬΄ν•œ μŠ€ν¬λ‘€μ— λŒ€ν•œ μ΅œμ ν™”λ₯Ό κ³ λ―Όν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€!
μ—¬λŸ¬ μ΅œμ ν™” 쀑 ν•˜λ‚˜λŠ” λ²„μΈ„μ–Ό μŠ€ν¬λ‘€μ— λŒ€ν•΄ 파트λ₯Ό λ‚˜λˆ  기둝해두렀 ν•΄μš”!

 

버츄얼 슀크둀 μ΄λž€?

버츄얼 슀크둀(Virtual Scroll)은 λŒ€λŸ‰μ˜ 데이터λ₯Ό 효율적으둜 μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ 기술둜, μ‚¬μš©μžκ°€ μ‹€μ œλ‘œ 보고 μžˆλŠ” ν•­λͺ©λ§Œ λ Œλ”λ§ν•˜μ—¬ μ„±λŠ₯을 κ°œμ„ ν•©λ‹ˆλ‹€.

 

특히, λ¦¬μŠ€νŠΈλ‚˜ κ·Έλ¦¬λ“œ ν˜•μ‹μ˜ 데이터λ₯Ό λ‹€λ£° λ•Œ μœ μš©ν•˜κ²Œ μ‚¬μš©λ©λ‹ˆλ‹€.

이번 λΈ”λ‘œκ·Έμ—μ„œλŠ” 버츄얼 μŠ€ν¬λ‘€μ„ μ‚¬μš©ν•΄μ•Ό ν•  상황과, μ‹€μ œ μƒμš© λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œμ˜ κ΅¬ν˜„ 방식을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

μƒμš© λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•œ μ„€λͺ…은 λ³„λ„μ˜ κΈ€λ‘œ λΆ„λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€!

 

버츄얼 μŠ€ν¬λ‘€μ„ μ–΄λŠ μƒν™©μ—μ„œ 써야 ν• κΉŒ?

λŒ€λŸ‰μ˜ 데이터 처리

버츄얼 μŠ€ν¬λ‘€μ€ λŒ€λŸ‰μ˜ 데이터λ₯Ό λ‹€λ£¨λŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ ν•„μˆ˜μ μ΄λΌ μƒκ°ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ‚¬μš©μžμ—κ²Œ 수천 수만 개의 ν•­λͺ©μ΄ ν¬ν•¨λœ 리슀트λ₯Ό λ³΄μ—¬μ€˜μ•Ό ν•˜λŠ” 경우, λͺ¨λ“  ν•­λͺ©μ„ ν•œ λ²ˆμ— λ Œλ”λ§ν•˜λ©΄ μ„±λŠ₯ μ €ν•˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

이럴 λ•Œ, ν˜„μž¬ 화면에 λ³΄μ΄λŠ” ν•­λͺ©λ§Œ λ Œλ”λ§ν•¨μœΌλ‘œμ¨ λ Œλ”λ§ μ„±λŠ₯을 κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

슀크둀 μ„±λŠ₯ κ°œμ„ 

일반적인 슀크둀 λ°©μ‹μ—μ„œλŠ” λͺ¨λ“  리슀트 ν•­λͺ©μ΄ DOM에 μ‘΄μž¬ν•˜κ²Œ λ©λ‹ˆλ‹€.

μ‚¬μš©μžκ°€ μŠ€ν¬λ‘€ν•  λ•Œ 화면에 λ³΄μ΄λŠ” ν•­λͺ©μ€ λ°”λ€Œμ§€λ§Œ, DOMμ—μ„œ λͺ¨λ“  μš”μ†Œκ°€ 계속 μœ μ§€λ˜λ―€λ‘œ μ§€μ›Œμ§€κ±°λ‚˜ μΆ”κ°€λ˜λŠ” 과정이 μ—†μŠ΅λ‹ˆλ‹€.

λŒ€μ‹ , λΈŒλΌμš°μ €λŠ” μŠ€ν¬λ‘€μ— 따라 보이지 μ•ŠλŠ” ν•­λͺ©λ“€μ„ μ—¬μ „νžˆ λ©”λͺ¨λ¦¬μ— 두고 μžˆμ–΄, 전체 리슀트의 크기가 컀질수둝 λ Œλ”λ§ μ„±λŠ₯이 μ €ν•˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.

 

반면, 가상 μŠ€ν¬λ‘€μ—μ„œλŠ” μŠ€ν¬λ‘€ν•  λ•Œ ν˜„μž¬ 화면에 λ³΄μ΄λŠ” ν•­λͺ©λ§Œ DOM에 λ Œλ”λ§ν•˜κ³ , λ‚˜λ¨Έμ§€ ν•­λͺ©μ€ DOMμ—μ„œ μ§€μš°κ±°λ‚˜ μˆ¨κΉλ‹ˆλ‹€.

μ΄λ ‡κ²Œ ν•¨μœΌλ‘œμ¨, λ©”λͺ¨λ¦¬μ— μœ μ§€λ˜λŠ” μš”μ†Œμ˜ μˆ˜κ°€ 쀄어듀어 μ„±λŠ₯이 κ°œμ„ λ©λ‹ˆλ‹€.

μ‚¬μš©μžκ°€ μŠ€ν¬λ‘€ν•  λ•Œ ν•„μš”ν•œ 만큼의 ν•­λͺ©λ§Œ μƒμ„±ν•˜κ³ , 보이지 μ•ŠλŠ” ν•­λͺ©μ€ λ©”λͺ¨λ¦¬μ—μ„œ ν•΄μ œν•˜κ²Œ λ˜μ–΄, λ Œλ”λ§ κ³Όμ •μ—μ„œ λΈŒλΌμš°μ €κ°€ μ²˜λ¦¬ν•΄μ•Ό ν•  μš”μ†Œμ˜ μˆ˜κ°€ μ μ–΄μ§€λ―€λ‘œ 슀크둀 μ„±λŠ₯이 λ”μš± μ›ν™œν•΄μ§€κ² μ£ ?!

 

결둠적으둜, 일반 μŠ€ν¬λ‘€μ—μ„œλŠ” DOM의 ν•­λͺ©μ΄ μ§€μ›Œμ§€μ§€ μ•Šμ§€λ§Œ, 가상 μŠ€ν¬λ‘€μ€ ν•„μš” μ—†λŠ” ν•­λͺ©μ„ μ œκ±°ν•˜μ—¬ μ„±λŠ₯을 κ°œμ„ ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

μ‚¬μš©μž κ²½ν—˜ ν–₯상

νŽ˜μ΄μ§€ λ‚΄μ—μ„œμ˜ μ›ν™œν•œ 슀크둀링 κ²½ν—˜μ„ μ œκ³΅ν•˜κΈ° μœ„ν•΄μ„œλ„ 버츄얼 슀크둀이 ν•„μš”ν•©λ‹ˆλ‹€.

λͺ¨λ“  ν•­λͺ©μ„ ν•œ λ²ˆμ— λ‘œλ“œν•˜μ§€ μ•Šκ³ , ν•„μš”ν•œ 만큼만 λ‘œλ“œν•˜λŠ” λ°©μ‹μœΌλ‘œ μ‚¬μš©μžμ—κ²Œ λΉ λ₯΄κ³  μ›ν™œν•œ κ²½ν—˜μ„ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

λ¦¬λ Œλ”λ§ μ„±λŠ₯ λ˜ν•œ κ³ λ €ν•΄μ•Ό ν•  λΆ€λΆ„μž…λ‹ˆλ‹€.

일반적인 슀크둀 λ°©μ‹μ—μ„œλŠ” λͺ¨λ“  리슀트 ν•­λͺ©μ΄ DOM에 μ‘΄μž¬ν•˜λ―€λ‘œ, μ‚¬μš©μžκ°€ μŠ€ν¬λ‘€ν•  λ•Œλ§ˆλ‹€ κΈ°μ‘΄ μš”μ†Œκ°€ μž¬λ Œλ”λ§λ˜κ±°λ‚˜ μœ„μΉ˜λ₯Ό λ³€κ²½ν•΄μ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 κ³Όμ •μ—μ„œ λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ΄ λ°œμƒν•˜λ©΄ μ„±λŠ₯ μ €ν•˜λ‘œ μ΄μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

반면, 버츄얼 μŠ€ν¬λ‘€μ—μ„œλŠ” ν˜„μž¬ 화면에 λ³΄μ΄λŠ” ν•­λͺ©λ§Œ λ Œλ”λ§ν•˜κΈ° λ•Œλ¬Έμ—, λ¦¬λ Œλ”λ§μ΄ ν•„μš”ν•œ ν•­λͺ©μ˜ μˆ˜κ°€ 쀄어듀어 μ„±λŠ₯이 κ°œμ„ λ©λ‹ˆλ‹€.

 

데이터가 변경될 λ•Œλ„ 화면에 λ³΄μ΄λŠ” ν•­λͺ©λ§Œμ„ 효율적으둜 μ—…λ°μ΄νŠΈν•  수 μžˆμ–΄, 전체적인 μ‚¬μš©μž κ²½ν—˜μ΄ 크게 ν–₯μƒλ©λ‹ˆλ‹€.

 

결과적으둜, 버츄얼 μŠ€ν¬λ‘€μ„ 톡해 μ‚¬μš©μžμ—κ²Œ λ§€λ„λŸ½κ³  λΉ λ₯Έ 슀크둀링 κ²½ν—˜μ„ μ œκ³΅ν•¨μœΌλ‘œμ¨, λŒ€λŸ‰μ˜ 데이터λ₯Ό λ‹€λ£¨λŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ κ²½ν—˜μ€ μ‚¬μš©μžκ°€ 데이터λ₯Ό 보닀 μ§κ΄€μ μœΌλ‘œ νƒμƒ‰ν•˜κ³ , ν•„μš”ν•  λ•Œ λΉ λ₯΄κ²Œ 정보λ₯Ό 얻을 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

 

μ‹€μ œλ‘œ 버츄얼 μŠ€ν¬λ‘€μ„ μƒμš© 라이브러리둜 λ§Œλ“  곳에선 μ–΄λ–»κ²Œ κ΅¬ν˜„ν–ˆμ„κΉŒ?

μƒμš© 라이브러리의 κ΅¬ν˜„ 방식

 react-window, react-virtualized, react-virtuoso κ΄€λ ¨λœ λ³„λ„μ˜ κΈ€λ‘œ λΆ„λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€!

 

마무리

버츄얼 μŠ€ν¬λ‘€μ€ λŒ€λŸ‰μ˜ 데이터λ₯Ό 효율적으둜 μ²˜λ¦¬ν•˜κ³ , μ‚¬μš©μžμ—κ²Œ μ›ν™œν•œ 슀크둀링 κ²½ν—˜μ„ μ œκ³΅ν• λ•Œ λ§€λ ₯μžˆλŠ” κΈ°μˆ μž…λ‹ˆλ‹€!

λ‹€μ–‘ν•œ λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ΄ 각기 λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•˜κ³  있으며, ν”„λ‘œμ νŠΈμ˜ μš”κ΅¬μ‚¬ν•­μ— 따라 μ ν•©ν•œ 라이브러리λ₯Ό μ„ νƒν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

 

μ €λŠ” ν•™μŠ΅ 및 κ°œμ„ μ μ„ μ°ΎκΈ°μœ„ν•΄ 슀슀둜 κ΅¬ν˜„μ€‘μ— μžˆμŠ΅λ‹ˆλ‹€!

 

버츄얼 슀크둀이 ν•„μš”ν•œ μ΄μœ μ— λŒ€ν•œ κ²½ν—˜

μ‹€μ œλ‘œ ν˜„μž¬ νšŒμ‚¬μ—μ„œ λ§Žμ€ 데이터λ₯Ό λ‹€λ£¨κ²Œ 될 경우, DOM의 크기가 컀짐에 따라 μ„±λŠ₯ μ €ν•˜κ°€ λ°œμƒν–ˆμ—ˆμ–΄μš”.

 

예λ₯Ό λ“€μ–΄, 고객당 보여쀄 수 μžˆλŠ” 데이터가 10만 κ°œμ— 달할 경우, μœ μ €μ˜ 데이터가 κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ μ¦κ°€ν•˜λ©΄μ„œ μ„±λŠ₯ μ΅œμ ν™”κ°€ ν•„μš”ν•΄μ§ˆ κ²ƒμž…λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 이유둜 버츄얼 μŠ€ν¬λ‘€μ„ λ„μž…ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ‹Ήμž₯은 κ΅¬ν˜„λœ ν”„λ‘œμ νŠΈμ— λ¬Έμ œκ°€ 없어보여도 데이터λ₯Ό 효율적으둜 μ²˜λ¦¬ν•˜κ³ , μ‚¬μš©μž κ²½ν—˜μ„ κ°œμ„ ν•˜κΈ° μœ„ν•œ μ„ μ œμ μΈ 쑰치둜 μƒκ°ν•©λ‹ˆλ‹€.

 

버츄얼 μŠ€ν¬λ‘€μ„ κ΅¬ν˜„ν•˜λ©΄μ„œ μ„±λŠ₯을 μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ 기법듀을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μŠ€ν¬λ‘€μ„ 톡해 μƒˆλ‘œμš΄ 데이터가 ν•„μš”ν•  λ•Œ, 남은 가상 슀크둀 μ•„μ΄ν…œμ΄ μžˆλŠ”μ§€ νŒλ‹¨ν•˜λŠ” λ‘œμ§μ„ 톡해 ν•„μš”ν•œ 만큼만 데이터λ₯Ό λ‘œλ“œν•˜λ„λ‘ μ„€κ³„ν–ˆμŠ΅λ‹ˆλ‹€.

이 κ³Όμ •μ—μ„œ λ°μ΄ν„°μ˜ μ–‘κ³Ό μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€μ˜ λ³΅μž‘μ„±μ„ κ³ λ €ν•˜μ—¬ 졜적의 μ„±λŠ₯을 μœ μ§€ν•  수 μžˆλ„λ‘ 지속적인 λ…Έλ ₯μ€‘μž…λ‹ˆλ‹€!

 

 

 

πŸ“ƒ μ°Έκ³  λ¬Έν—Œ  
μ˜€λŠ˜μ˜μ§‘ λ‚΄ λ¬΄ν•œ 슀크둀 개발기
React Window κΉƒν—™
React Virtualized κΉƒν—™
React Virtuoso κΉƒν—™

 

+ Recent posts