Skip to content

Latest commit

Β 

History

History
92 lines (78 loc) Β· 4.29 KB

File metadata and controls

92 lines (78 loc) Β· 4.29 KB

νŽ˜μ΄μ§• 처리

1. νŽ˜μ΄μ§• κ΅¬ν˜„ 단계

νŽ˜μ΄μ§• μ²˜λ¦¬λŠ” μ‚¬μš©μžμ—κ²Œ ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ 데이터λ₯Ό μ „μ†‘ν•˜κΈ° μœ„ν•΄ 전체 데이터 μ€‘μ—μ„œ μΌλΆ€λΆ„λ§Œμ„ λ³΄μ—¬μ£ΌλŠ” 방식을 μ˜λ―Έν•˜λŠ”λ° νŽ˜μ΄μ§• 처리λ₯Ό μœ„ν•΄ μ•„λž˜μ™€ 같은 3단계λ₯Ό 거쳐 κ΅¬ν˜„ν•˜κ²Œ λ©λ‹ˆλ‹€.

  • URI의 λ¬Έμžμ—΄μ„ μ‘°μ ˆν•΄ μ›ν•˜λŠ” νŽ˜μ΄μ§€μ˜ 데이터가 좜λ ₯되게 ν•˜λŠ” 1단계
  • λͺ©λ‘ νŽ˜μ΄μ§€ ν•˜λ‹¨μ— νŽ˜μ΄μ§€ 번호λ₯Ό 보여주고, 번호λ₯Ό ν΄λ¦­ν•˜λ©΄ ν•΄λ‹Ή νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λŠ” 2단계
  • λͺ©λ‘ νŽ˜μ΄μ§€μ—μ„œ μ‘°νšŒλ‚˜ μˆ˜μ • μž‘μ—…μ„ ν•œ λ’€, λ‹€μ‹œ μ›λž˜ λͺ©λ‘ νŽ˜μ΄μ§€λ‘œ 이동할 수 있게 μ²˜λ¦¬ν•˜λŠ” 3단계

2. νŽ˜μ΄μ§• 처리의 원칙

νŽ˜μ΄μ§• μ²˜λ¦¬λŠ” λ‹€μŒκ³Ό 같은 원칙을 μ§€μΌœμ•Όν•©λ‹ˆλ‹€.

  • νŽ˜μ΄μ§• μ²˜λ¦¬λŠ” λ°˜λ“œμ‹œ GET λ°©μ‹λ§Œμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • νŽ˜μ΄μ§• μ²˜λ¦¬κ°€ 되면 쑰회 ν™”λ©΄μ—μ„œ λ°˜λ“œμ‹œ λͺ©λ‘μœΌλ‘œ 이동할 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

    예) κ²Œμ‹œνŒμ˜ 4 νŽ˜μ΄μ§€λ₯Ό 보닀가 νŠΉμ • κ²Œμ‹œλ¬Όμ„ μ‘°νšŒν•˜κ³ ,
    λͺ©λ‘μœΌλ‘œ 이동할 경우 λ‹€μ‹œ 4 νŽ˜μ΄μ§€λ‘œ 이동할 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • νŽ˜μ΄μ§• μ²˜λ¦¬λŠ” λ°˜λ“œμ‹œ ν•„μš”ν•œ νŽ˜μ΄μ§€ λ²ˆν˜Έλ§Œμ„ μ œκ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    λ§Œμ•½ νŽ˜μ΄μ§€λ‹Ή 10개의 κ²Œμ‹œκΈ€μ„ 좜λ ₯ν•˜κ³ , 전체 데이터가 41건이라면, 5 νŽ˜μ΄μ§€κΉŒμ§€ 화면에 좜λ ₯λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

3. νŽ˜μ΄μ§• 처리λ₯Ό μœ„ν•œ 더미데이터 μ‚½μž…

createDummyData

4. νŽ˜μ΄μ§• 처리λ₯Ό μœ„ν•œ SQL: LIMIT

MySQL LIMIT

SELECT *
FROM ν…Œμ΄λΈ”λͺ…
LIMIT μ‹œμž‘ 데이터, 좜λ ₯ν•  데이터 개수 

LIMIT을 μ‚¬μš©ν•˜λŠ” 방법은 κ°„λ‹¨ν•©λ‹ˆλ‹€.
λ§Œμ•½ κ²Œμ‹œκΈ€μ„ 10건씩 좜λ ₯ν•˜κ³ , 첫번째 νŽ˜μ΄μ§€λ₯Ό 좜λ ₯ν•˜κ³  μ‹Άλ‹€λ©΄ μ•„λž˜μ™€ 같이 μž‘μ„±ν•˜λ©΄ λ©λ‹ˆλ‹€.

SELECT articleNo, title, content, writer, regDate, viewCnt
FROM tb_article
WHERE articleNo > 0
ORDER BY articleNo DESC, regDate DESC
LIMIT 0, 10

5. νŽ˜μ΄μ§• 처리λ₯Ό 도와쀄 Criteria 클래슀

μ§€κΈˆκΉŒμ§€ μž‘μ„±ν–ˆλ˜ ArticleMapper.xml의 SQL을 μ‚΄νŽ΄λ΄…μ‹œλ‹€.

  • ArticleMapper.xml: λ§Œμ•½ ν•œ νŽ˜μ΄μ§€μ— λ³΄μ—¬μ§€λŠ” 데이터가 10κ°œκ°€ μ•„λ‹ˆλΌλ©΄,
    LIMIT ꡬ문의 λ§ˆμ§€λ§‰μ— 10μ΄λΌλŠ” μˆ«μžκ°€ λ³€κ²½λ˜μ–΄μ•Όλ§Œ ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ λ¬Έμ œμ μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ findAllArticlePaging()의 νŒŒλΌλ―Έν„°λ₯Ό 2개 λ°›λŠ” 방법이 μžˆμŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ, 맀번 2개의 μ μ ˆν•œ 데이터λ₯Ό 직접 λ„˜κ²¨μ•Όν•˜λŠ” λΆˆνŽΈν•¨μ΄ λ°œμƒν•©λ‹ˆλ‹€.
κ·Έλž˜μ„œ, νŽ˜μ΄μ§• 처리λ₯Ό 도와쀄 Criteria 클래슀λ₯Ό μƒμ„±ν•˜κ³ , νŽ˜μ΄μ§• 처리의 기쀀이 λ˜λŠ” λ³€μˆ˜λ“€μ„ ν•˜λ‚˜μ˜ 객체둜 μ²˜λ¦¬ν•˜λ©΄
보닀 νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이후에 좔가사항이 생기더라도 λ©”μ†Œλ“œμ˜ νŒŒλΌλ―Έν„°λ₯Ό λŠ˜λ¦¬μ§€ μ•Šκ³ , 객체에 ν•„λ“œλ₯Ό μΆ”κ°€ν•¨μœΌλ‘œμ¨ 보닀 관리가 μš©μ΄ν•΄μ§‘λ‹ˆλ‹€.

6. νŽ˜μ΄μ§• 처리 μš”μ•½

νŽ˜μ΄μ§• 처리 κ΅¬ν˜„μ„ μœ„ν•΄ 기얡해두어야 ν•  사항듀을 μš”μ•½ν•΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

νŽ˜μ΄μ§€ 번호 좜λ ₯ 처리λ₯Ό μœ„ν•œ 데이터

1. μ‹œμž‘ νŽ˜μ΄μ§€ 번호 (startPage)
2. 끝 νŽ˜μ΄μ§€ 번호 (endPage)
3. 전체 κ²Œμ‹œκΈ€μ˜ 수 (totalCount)
4. 이전 링크 (prev)
5. λ‹€μŒ 링크 (next)

끝 νŽ˜μ΄μ§€ 번호 계산식

Math.ceil(ν˜„μž¬ νŽ˜μ΄μ§€ 번호(page) / νŽ˜μ΄μ§€ 번호의 수(displayPageNumCount)) * νŽ˜μ΄μ§€ 번호의 수(displayPageNumCount)

μ‹œμž‘ νŽ˜μ΄μ§€ 번호 계산식

(끝 νŽ˜μ΄μ§€ 번호(endPage) - νŽ˜μ΄μ§€ 번호의 수(displayPageNumCount)) + 1

끝 νŽ˜μ΄μ§€ 번호의 보정 계산식

Math.ceil(전체 κ²Œμ‹œκΈ€μ˜ 수(totalCount) / νŽ˜μ΄μ§€λ‹Ή 좜λ ₯ν•  κ²Œμ‹œκΈ€μ˜ 수(perPageNum))

이전 링크 ν™œμ„±/λΉ„ν™œμ„± 계산식

(μ‹œμž‘ νŽ˜μ΄μ§€ 번호(startPage) == 1) ? false : true

λ‹€μŒ 링크 ν™œμ„±/λΉ„ν™œμ„± 계산식

(끝 νŽ˜μ΄μ§€ 번호(endPage) * νŽ˜μ΄μ§€λ‹Ή 좜λ ₯ν•  κ²Œμ‹œκΈ€μ˜ 수(perPageNum) >= 전체 κ²Œμ‹œκΈ€μ˜ 수(totalCount)) ? false : true

λͺ©λ‘ νŽ˜μ΄μ§€ 정보 μœ μ§€

쑰회, μˆ˜μ •, μ‚­μ œ 처리 ν›„, λ‹€μ‹œ νŠΉμ • λͺ©λ‘ νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜κΈ° μœ„ν•΄μ„œλŠ”
μ•„λž˜μ™€ 같은 정보λ₯Ό 각 νŽ˜μ΄μ§€λ₯Ό 이동할 λ•Œλ§ˆλ‹€ κ°–κ³  μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

  • ν˜„μž¬ λͺ©λ‘ νŽ˜μ΄μ§€μ˜ 번호 (page)
  • νŽ˜μ΄μ§€λ‹Ή 좜λ ₯ν•  κ²Œμ‹œκΈ€μ˜ 수 (perPageNum)
  • 쑰회 κ²Œμ‹œκΈ€μ˜ 번호 (articleNo)