Home > DB > πŸ’Ύ[Database] λ¬΄ν•œ 슀크둀 방식(Infinite Scroll)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸ’Ύ[Database] λ¬΄ν•œ 슀크둀 방식(Infinite Scroll)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?
Database Spring Boot JPA REST API

β€œπŸ’Ύ[Database] λ¬΄ν•œ 슀크둀 방식(Infinite Scroll)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?”

🍎 Intro.

  • μ‚¬μš©μžκ°€ μŠ€ν¬λ‘€μ„ 내릴 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ 데이터λ₯Ό λ™μ μœΌλ‘œ λ‘œλ“œν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
  • Javaμ—μ„œλŠ” 주둜 Spring Boot + JPA + REST APIλ₯Ό ν™œμš©ν•˜μ—¬ λ¬΄ν•œ 슀크둀 λ°©μ‹μ˜ λ°±μ—”λ“œλ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.

βœ…1️⃣ λ¬΄ν•œ 슀크둀 λ°©μ‹μ˜ 핡심 κ°œλ….

1️⃣ ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— 데이터 μš”μ²­.

  • 슀크둀 이벀트 λ°œμƒ μ‹œ, ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— 데이터λ₯Ό μš”μ²­.
  • μš”μ²­ μ‹œ cursor(λ§ˆμ§€λ§‰ κ²Œμ‹œλ¬Ό ID) λ˜λŠ” page(νŽ˜μ΄μ§€ 번호)λ₯Ό 포함.

2️⃣ μ„œλ²„κ°€ μš”μ²­λ°›μ€ λ°μ΄ν„°λ§Œ λ°˜ν™˜.

  • LIMIT λ˜λŠ” OFFSET을 μ‚¬μš©ν•˜μ—¬ μ§€μ •λœ 개수만큼의 데이터 λ°˜ν™˜.
  • μ»€μ„œ 기반 νŽ˜μ΄μ§•(Cursor Pagination)이 κ°€μž₯ 효율적.

3️⃣ ν΄λΌμ΄μ–ΈνŠΈκ°€ 받은 데이터λ₯Ό μΆ”κ°€λ‘œ λ Œλ”λ§.

  • κΈ°μ‘΄ 데이터에 μƒˆλ‘œμš΄ 데이터λ₯Ό μΆ”κ°€ν•˜μ—¬ UI μ—…λ°μ΄νŠΈ.

βœ…2️⃣ Javaμ—μ„œ λ¬΄ν•œ μŠ€ν¬λ‘€μ„ κ΅¬ν˜„ν•˜λŠ” 2κ°€μ§€ 방식.

1️⃣ νŽ˜μ΄μ§€ 번호 기반 νŽ˜μ΄μ§•(Offset Pagination)

  • μš”μ²­ μ‹œ νŽ˜μ΄μ§€ 번호(Page Number)와 νŽ˜μ΄μ§€ 크기(Page Size)λ₯Ό μ „λ‹¬ν•˜μ—¬ νŠΉμ • νŽ˜μ΄μ§€ 데이터λ₯Ό 쑰회.
  • SQLμ—μ„œ LIMITκ³Ό OFFSET을 ν™œμš©.

2️⃣ μ»€μ„œ 기반 νŽ˜μ΄μ§•(Cursor Pagination)

  • λ§ˆμ§€λ§‰μœΌλ‘œ μ‘°νšŒν•œ λ°μ΄ν„°μ˜ ID λ˜λŠ” Timestampλ₯Ό κΈ°μ€€μœΌλ‘œ λ‹€μŒ 데이터λ₯Ό μš”μ²­.
  • λŒ€κ·œλͺ¨ 데이터 μ²˜λ¦¬μ— μ΅œμ ν™”λ¨.

βœ…3️⃣ λ¬΄ν•œ 슀크둀 λ°©μ‹μ˜ μž₯단점.

βœ… μž₯점.

  • 1. μ‚¬μš©μž κ²½ν—˜(UX) κ°œμ„  ➞ μ‚¬μš©μžκ°€ 자견슀럽게 데이터λ₯Ό 탐색 κ°€λŠ₯.
  • 2. μ„±λŠ₯ μ΅œμ ν™” ➞ ν•„μš”ν•œ 만큼만 데이터λ₯Ό μš”μ²­ν•˜μ—¬ μ„œλ²„ λΆ€λ‹΄ κ°μ†Œ.
  • 3. λ„€νŠΈμ›Œν¬ μ΅œμ ν™” ➞ νŽ˜μ΄μ§€ 전체λ₯Ό λ‘œλ“œν•˜μ§€ μ•Šκ³  ν•„μš”ν•œ λ°μ΄ν„°λ§Œ 전솑.

❌ 단점.

  • 1. νŠΉμ • 데이터 검색 어렀움 ➞ μ‚¬μš©μžκ°€ μ›ν•˜λŠ” 데이터λ₯Ό λ‹€μ‹œ μ°ΎκΈ° 어렀움.
  • 2. SEO 문제 ➞ 검색 엔진이 전체 μ½˜ν…μΈ λ₯Ό ν¬λ‘€λ§ν•˜κΈ° 어렀움.
  • 3. λ©”λͺ¨λ¦¬ μ‚¬μš© 증가 ➞ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ 데이터가 계속 μΆ”κ°€λ˜λ©΄ μ„±λŠ₯ μ €ν•˜ κ°€λŠ₯.

πŸš€ κ²°λ‘ .

  • Javaμ—μ„œ λ¬΄ν•œ μŠ€ν¬λ‘€μ„ κ΅¬ν˜„ν•  λ•ŒλŠ” μ»€μ„œ 기반 νŽ˜μ΄μ§•(Cursor Pagination)이 μ„±λŠ₯상 유리.
  • Spring Boot + JPAμ—μ„œ REST APIλ₯Ό μ œκ³΅ν•˜κ³ , ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μš”μ²­μ„ λ³΄λ‚΄λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„.
  • λŒ€κ·œλͺ¨ 데이터λ₯Ό μ²˜λ¦¬ν•  λ•ŒλŠ” μ»€μ„œ 기반 νŽ˜μ΄μ§•μ΄ 적합.