Home > DB > πŸ’Ύ[Database] νŽ˜μ΄μ§•(Paging)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸ’Ύ[Database] νŽ˜μ΄μ§•(Paging)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?
Database

πŸ’Ύ[Database] νŽ˜μ΄μ§•(Paging)μ΄λž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸ“Œ Intro.

  • β†˜οΈŽ νŽ˜μ΄μ§•(Paging)은 λŒ€λŸ‰μ˜ 데이터λ₯Ό ν•œ λ²ˆμ— λͺ¨λ‘ μ‘°νšŒν•˜μ§€ μ•Šκ³  μž‘μ€ λ‹¨μœ„(Page, νŽ˜μ΄μ§€)둜 λ‚˜λˆ„μ–΄ ν•„μš”ν•œ λΆ€λΆ„λ§Œμ„ κ°€μ Έμ˜€λŠ” 기법.
  • β†˜οΈŽ 주둜 λ°μ΄ν„°λ² μ΄μŠ€ 쿼리 κ²°κ³Όλ‚˜ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©μžμ˜ μš”μ²­μ— 따라 λ°μ΄ν„°μ˜ λͺ©λ‘μ„ 보여쀄 λ•Œ μ‚¬μš©.

βœ…1️⃣ νŽ˜μ΄μ§•μ˜ λͺ©μ .

  • 1. μ„±λŠ₯ μ΅œμ ν™”.
    • β†˜οΈŽ ν•œ λ²ˆμ— λ§Žμ€ 데이터λ₯Ό μ‘°νšŒν•˜λ©΄ μ‹œμŠ€ν…œ λ¦¬μ†ŒμŠ€λ₯Ό 많이 μ†Œλͺ¨ν•˜κ²Œ 됨.
      • β†˜οΈŽ νŽ˜μ΄μ§•μ„ 톡해 λ°μ΄ν„°λ² μ΄μŠ€μ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λΆ€ν•˜λ₯Ό 쀄일 수 있음.
  • 2. μ‚¬μš©μž κ²½ν—˜ κ°œμ…˜.
    • β†˜οΈŽ λͺ¨λ“  데이터λ₯Ό ν•œ λ²ˆμ— 보여주면 μ‚¬μš©μžκ°€ μ›ν•˜λŠ” 데이터λ₯Ό μ°ΎκΈ° μ–΄λ €μ›Œμ§ˆ 수 있음.
      • β†˜οΈŽ νŽ˜μ΄μ§•μ„ 톡해 데이터λ₯Ό 보기 μ‰½κ²Œ λ‚˜λˆŒ 수 있음.
  • 3. λ„€νŠΈμ›Œν¬ λΆ€λ‹΄ κ°μ†Œ.
    • β†˜οΈŽ νŽ˜μ΄μ§•μ„ 톡해 ν•„μš”ν•œ λ°μ΄ν„°λ§Œ μ „μ†‘ν•˜μ—¬ λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ 쀄일 수 있음.

βœ…2️⃣ νŽ˜μ΄μ§•μ˜ κΈ°λ³Έ κ°œλ….

  • 1️⃣ νŽ˜μ΄μ§€ 번호(Page Number)
    • β†˜οΈŽ μ‚¬μš©μžκ°€ 보고자 ν•˜λŠ” νŽ˜μ΄μ§€μ˜ λ²ˆν˜Έμž„.(예: 1νŽ˜μ΄μ§€, 2νŽ˜μ΄μ§€,…)
  • 2️⃣ νŽ˜μ΄μ§€ 크기(Page Size)
    • β†˜οΈŽ ν•œ νŽ˜μ΄μ§€λ‹Ή 보여쀄 λ°μ΄ν„°μ˜ κ°œμˆ˜μž„.(예: 10개, 20개,…)
  • 3️⃣ μ˜€ν”„μ…‹(Offset)
    • β†˜οΈŽ κ°€μ Έμ˜¬ λ°μ΄ν„°μ˜ μ‹œμž‘ μœ„μΉ˜μž„.(SQLμ—μ„œ OFFSET μ‚¬μš©)
  • 4️⃣ ν•œ νŽ˜μ΄μ§€λ‹Ή 데이터 ν•­λͺ©
    • β†˜οΈŽ νŽ˜μ΄μ§€λ§ˆλ‹€ 보여쀄 ν•­λͺ©μ˜ λͺ©λ‘μž„.

βœ…3️⃣ νŽ˜μ΄μ§• μ˜ˆμ‹œ.

πŸ“Œ SQL μ˜ˆμ‹œ (MySQL)

-- 1νŽ˜μ΄μ§€ (1~10번 데이터)
SELECT * FROM articles LIMIT 10 OFFSET 0;
-- 2νŽ˜μ΄μ§€ (11~20번 데이터)
SELECT * FROM articles LIMIT 10 OFFSET 10;

πŸ“Œ HTTP μš”μ²­ μ˜ˆμ‹œ

GET /articles?page=1&size=10

βœ…4️⃣ νŽ˜μ΄μ§• 방식.

1️⃣ κΈ°λ³Έ νŽ˜μ΄μ§€λ„€μ΄μ…˜ (offset 기반 νŽ˜μ΄μ§•)

  • β†˜οΈŽ νŽ˜μ΄μ§€ λ²ˆν˜Έμ™€ νŽ˜μ΄μ§€λ‹Ή ν•­λͺ© 수λ₯Ό κΈ°μ€€μœΌλ‘œ 쿼리 μ‹€ν–‰.
    • β†˜οΈŽ 예: LIMIT, OFFSET.

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

  • β†˜οΈŽ λ§ˆμ§€λ§‰μœΌλ‘œ μ‘°νšŒν•œ ν•­λͺ©μ„ κΈ°μ€€μœΌλ‘œ λ‹€μŒ ν•­λͺ©μ„ 뢈러옴.
    • β†˜οΈŽ 주둜 κ³ μ„±λŠ₯ APIμ—μ„œ μ‚¬μš©λ¨.

      3️⃣ λ¬΄ν•œ 슀크둀 (Infinite Scroll)

  • β†˜οΈŽ μ‚¬μš©μžκ°€ μŠ€ν¬λ‘€ν•  λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ ν•­λͺ©μ„ 뢈러옴.
    • β†˜οΈŽ λͺ¨λ°”일 μ•±, SNS ν”Όλ“œ λ“±μ—μ„œ 주둜 μ‚¬μš©λ¨.

βœ…5️⃣ νŽ˜μ΄μ§•μ˜ μ£Όμ˜μ‚¬ν•­.

1️⃣ μ˜€ν”„μ…‹ μ„±λŠ₯ 문제.

  • β†˜οΈŽ OFFSET이 클 경우 쿼리 μ„±λŠ₯이 μ €ν•˜λ  수 있음.(μ»€μ„œ 기반 νŽ˜μ΄μ§• ꢌμž₯)

    2️⃣ μ •λ ¬ μ€‘μš”μ„±.

  • β†˜οΈŽ 데이터가 일관성 있게 μ •λ ¬λ˜μ§€ μ•ŠμœΌλ©΄ μ‚¬μš©μžκ°€ ν˜Όλž€μ„ κ²ͺ을 수 있음.

    3️⃣ 데이터 일관성 문제.

  • β†˜οΈŽ 데이터가 쀑간에 λ³€κ²½λ˜λ©΄ νŽ˜μ΄μ§€λ„€μ΄μ…˜ κ²°κ³Όκ°€ μΌκ΄€λ˜μ§€ μ•Šμ„ 수 있음.

βœ…6️⃣ νŽ˜μ΄μ§•μ΄ μ‚¬μš©λ˜λŠ” λŒ€ν‘œμ μΈ 사둀.

  • β†˜οΈŽ 1. λΈ”λ‘œκ·Έ κΈ€ λͺ©λ‘
  • β†˜οΈŽ 2. κ²Œμ‹œνŒ κΈ€ λͺ©λ‘
  • β†˜οΈŽ 3. μ „μžμƒκ±°λž˜ μƒν’ˆ λͺ©λ‘
  • β†˜οΈŽ 4. SNS ν”Όλ“œ
  • β†˜οΈŽ 5. 검색 κ²°κ³Ό νŽ˜μ΄μ§€

πŸš€ μš”μ•½.

  • β†˜οΈŽ νŽ˜μ΄μ§•(Paging) : 데이터λ₯Ό 일정 λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ μ‘°νšŒν•˜λŠ” 기법
  • β†˜οΈŽ κΈ°λ³Έ κ°œλ… : νŽ˜μ΄μ§€ 번호, νŽ˜μ΄μ§€ 크기, μ˜€ν”„μ…‹
  • β†˜οΈŽ λͺ©μ  : μ„±λŠ₯ μ΅œμ ν™”, μ‚¬μš©μž κ²½ν—˜ κ°œμ„ , λ„€νŠΈμ›Œν¬ λΆ€ν•˜ κ°μ†Œ
  • β†˜οΈŽ μ£Όμ˜μ‚¬ν•­ : μ˜€ν”„μ…‹ μ„±λŠ₯ 문제, 데이터 일관성 문제