페이지네이션은 많은 데이터를 부분적으로 나눠서 불러오는 기술이다!
- 쿼리에 해당되는 모든 데이터를 한번에 불러오지 않고 부분적으로 쪼개서 불러온다.
- 수억개의 상품이 데이터베이스에 저장되어있는데 사용자가 상품 검색화면 들어갈 때마다 모든 상품 정보를 서버에서 클라이언트로 전송할 필요가 없다.
- 클라우드 시스템은 데이터 전송에 돈이 든다!
- 돈이 안들더라도 수억개의 데이터를 한번에 보내면 분명 메모리가 터질것이다.
- 메모리가 터지지 않더라도 데이터 전송에 상당히 오랜시간이 걸릴 것이다.
- 페이지 기반으로 데이터를 잘라서 요청하는 Pagination
- 요청을 보낼때 원하는 데이터 개수와 몇번째 페이지를 가져올지 명시
- 페이지 숫자를 누르면 다음 페이지로 넘어가는 형태 UI 에서 많이 사용
- Pagination 도중에 데이터베이스에서 데이터가 추가되거나 삭제될 경우 저장되는 데이터가 누락되거나 중복될 수 있다.
- Pagination 알고리즘이 매우 간단하다.
1페이지 | 2페이지 | 3페이지 | 4페이지 |
---|
🅐🅑🅒🅓 | 🅔🅕🅖🅗 | 🅘🅙🅚🅛 | 🅜🅝🅞🅟 |
-
1 페이지 요청
- 4개 데이터 요청 (🅐🅑🅒🅓)
-
2 페이지 요청
- 4개 스킵 (🅐🅑🅒🅓)
- 4개 요청 (🅔🅕🅖🅗)
-
3 페이지 요청
- 8개 스킵 (🅐🅑🅒🅓|🅔🅕🅖🅗|)
- 4개 요청 (🅘🅙🅚🅛)
장점 : 데이터적으로 효율적이다!
예제의 문제점
가정 1 )
상황 1 )
- 1 페이지 처음 불러올때, 🅐🅑🅒🅓가 보이는 상황이고,
- 2 페이지를 불러올때, 갑자기 데이터Ⓒ를 추가했다면?
🅓🅔🅕🅖가 불려지게 되면서 🅓 가 중복으로 불려지게된다.
기존 현재 1 페이지 )
1페이지 | 2페이지 | 3페이지 | 4페이지 |
---|
🅐🅑🅒🅓 | 🅔🅕🅖🅗 | 🅘🅙🅚🅛 | 🅜🅝🅞🅟 |
갑자기 데이터 추가 된 후, 2 페이지 )
1페이지 | 2페이지 | 3페이지 | 4페이지 |
---|
🅐🅑🅒Ⓒ | 🅓🅔🅕🅖 | 🅗🅘🅙🅚 | 🅛🅜🅝🅞 |
가정 2)
- 1 페이지의 🅓 가 삭제되고, 2 페이지를 불러온다면?
상황 2)
1페이지 | 2페이지 | 3페이지 | 4페이지 |
---|
🅐🅑🅒🅓 | 🅔🅕🅖🅗 | 🅘🅙🅚🅛 | 🅜🅝🅞🅟 |
- 갑자기 🅓 가 삭제되고 2페이지를 불러온다면?
🅔 는 누락되고 🅕🅖🅗🅘 가 보이게 된다.
1페이지 | 2페이지 | 3페이지 | 4페이지 |
---|
🅐🅑🅒🅔 | 🅕🅖🅗🅘 | 🅙🅚🅛🅜 | 🅝🅞🅟 |
- 무한스크롤 할 경우 자주 사용
- 가장 최근에 가져온 데이터 기준으로 다음 데이터를 가져오는 Pagination
- 요청을 보낼때 마지막 데이터의 기준값(ID 등 Unique 값)과 몇개의 데이터를 가져올지 명시
- 스크롤 형태의 리스트에서 자주 사용 (ex : 앱의 ListView)
- 최근 데이터의 기준값을 기반으로 쿼리가 작성되기 때문에 데이터가 누락되거나 중복될 확률이 적음.
예제
1페이지 | 2페이지 | 3페이지 | 4페이지 |
---|
🅐🅑🅒🅓 | 🅔🅕🅖🅗 | 🅘🅙🅚🅛 | 🅜🅝🅞🅟 |
- 1 페이지 요청시 id > 0 보다 큰 기준으로 불러오고
- 2 페이지 요청시 id > 4 보다 큰 기준으로 불러온다. (마지막 데이터를 파악하고 그 id 이후 부터 요청한다.)
가정 1)
- 만약, 2 페이지를 불러오는데, 1 페이지에 Ⓒ 데이터가 추가됐다면?
- 1 페이지의 Ⓒ 는 누락되는데, 이 누락은 신규데이터라 어쩔 수 없다.
1페이지 | 2페이지 | 3페이지 | 4페이지 |
---|
🅐🅑🅒Ⓒ🅓 | 🅔🅕🅖🅗 | 🅘🅙🅚🅛 | 🅜🅝🅞🅟 |
가정 2)
- 만약 2 페이지에서 1페이지를 넘어가기 전 🅓가 삭제된다면?
1 페이지에서 🅐🅑🅒🅓 를 보여줬지만, 🅓가 삭제되면, 2 페이지가 보일때 마지막 데이터 기준으로 다음 부터 보여지게된다.
1페이지 | 2페이지 | 3페이지 | 4페이지 |
---|
🅐🅑🅒🅔 | 🅔🅕🅖🅗 | 🅘🅙🅚🅛 | 🅜🅝🅞🅟 |