✔︎ 오늘의 정리
- pagenation
- cursor
- offset
- 두 번 탭해서 좋아요 기능 넣기
- NavigationBar BackgroundColor 노치까지 채우기
pagenation
페이지네이션 방식이 두 가지로 나뉜다는 걸 알았는가?
난몰랏다.
안 김에 정리하고 넘어가려고 한다. :3
먼저, 페이지네이션이란 수많은 데이터들을 묶음으로 나누어 단계적으로 불러오는 것을 의미한다.
페이지네이션 방식에는 커서와 오프셋으로 나뉘는데, 프로그래밍에서 늘 그렇듯 둘 다 서로의 장점이 단점이고 단점이 장점이다.
Offset
먼저, Offset 방식이다. 편의상... 오프셋이라고 하겠다.
이 방식은 여러 API를 다룰 때 많이 사용되는 방식으로, 요청을 '페이지' 단위로 구분하여 요청 / 응답하게 구현된 방식을 오프셋 방식이라고 한다.
흔히 요청을 보낼 때 특정한 값을 요청값으로 요구하고, 그 값에 따라 스크롤할 수 있는 페이지를 response로 받을 수 있다.
긍까......
struct TMDB: Decodable {
let page: Int
let results: [Result]
let totalPages, totalResults: Int
enum CodingKeys: String, CodingKey {
case page, results
case totalPages = "total_pages"
case totalResults = "total_results"
}
}
TMDB를 예로 들어 보자.
response에서 자체적으로 page와 totalPage, totalResults라는 값을 준다.
이 page값으로 뭘 할 수 있냐면 ,,
"https://api.themoviedb.org/3/trending/all/day?language=en-US&page=\(page)"
요청을 보낼 때 위와 같이 page값을 넣어 특정한 페이지로 나눠놓은 데이터를 꺼내와서 사용자에게 보여줄 수 있다.
- 장점
- 구현하기 쉽다
- 데이터가 많지 않은 경우 간단하고 빠르다.
- 단점
- 만약 중간에 데이터가 추가될 경우 중복 데이터가 노출될 수 있다. (지속적으로!)
- 데이터가 많으면 많을수록 느려진다.
- 서버 안에서 데이터는 하나의 묶음으로 되어 있는데, 매번 페이지 수를 나누어 그 페이지수를 센 다음 몇 번째 다음 어디 페이지... ... 를 찾아서 보내주는 거기 때문에 데이터의 수가 많으면 많을수록 느려질 수밖에 없다.
- 서버 안에서 데이터는 하나의 묶음으로 되어 있는데, 매번 페이지 수를 나누어 그 페이지수를 센 다음 몇 번째 다음 어디 페이지... ... 를 찾아서 보내주는 거기 때문에 데이터의 수가 많으면 많을수록 느려질 수밖에 없다.
Cursor
반면, 클라이언트가 가져간 마지막 데이터를 통해 다음 데이터를 요청 / 응답하게 구현된 방식을 커서 방식이라고 한다.
먼 소리냐?
기존의 오프셋 기반 페이지네이션은 사용자의 요청에 따라서나 해당 서버의 기준에 따라 페이지를 나눴다면 커서 방식은 내가 보고 있는 위치가 기준이 된다.
이전에 TMDB에서 요청을 보낼 때나 응답을 받을 때 'page'가 필요했던 것과 달리, cursor 방식에서는 요청을 보낼 때 현재 위치를 받는다.
- 장점
- 대용량 데이터를 다룰 때 편리하다.
- 페이지가 기준이 아닌 사용자가 보고 있는 위치가 기준이 되므로 특정 인덱스를 찾아 그 이후부터 데이터를 보여주면 되기 때문에!
- offset 기반의 pagenation이 몇 번째 다음 30개 주세요~ 라면 cursor는 얘 다음 30개 주세요~ 기 때문에 빠를 수밖에 없다.
- 대용량 데이터를 다룰 때 편리하다.
- 단점
- 구현하기 까다롭다.
- 정렬 기능이 제한적이다.

둘이 얼마나 차이나길래? 하고 보니까 이만큼 차이난다네요 ,, ,
약간 정렬 속도 보는 거 같다
커서 기반 페이지네이션 (Cursor-based Pagination) 구현하기
사실 처음에는 이 주제로 포스트를 쓰려고 했던건 아니고 Apollo GraphQL 에서 커서 기반 페이지네이션 구현 을 주제로 글을 쓰려고 했습니다. 그런데 막상 찾아보니 백엔드-프론트엔드를 함께 고려
velog.io
https://velog.io/@pjh612/Offset-Paging-vs-Cursor-Paging
Offset Paging vs Cursor Paging
페이징이란?종류오프셋 페이징OffSet : 어디 부터 시작해서 가져올것인지?Limit : 몇개를 가져올 것인지?보통 offset 페이징은 프론트 엔드에서 이렇게 표현됩니다. 페이지 버튼과 함꼐 쓰이며 버튼
velog.io
Offset vs Cursor-Based Pagination: Which is the Right Choice for Your Project?
Pagination is a way to prevent your browser from crashing or giving users a bad experience when dealing with large amounts of data. Instead…
medium.com
두 번 탭해서 좋아요 기능 넣기
그래서 넣었냐고 묻는다면 "NO"... ...
추후에 넣고 싶어요 ... ... 입니다
그냥 참고자료용으로 넣어놓으려고 함
How to double tap (instead of a single tap) a collection view cell in swift?
Right now, I have a bunch of messages in a collectionview cell. My code to single tap the cell right now is func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: Ind...
stackoverflow.com
[iOS, Swift] UITapGestureRecognizer 탭 제스처 인식기
https://cocoacasts.com/swift-fundamentals-working-with-tap-gesture-recognizers-in-swiftUITapGestureRecognizer 클래스를 이용해 탭 제스처를 사용하는 법.tappableView
velog.io
NavigationBar backgroundColor 노치까지 채우기
[iOS] NavigationBar BackgroundColor 노치까지 채우기
이전 프로젝트의 UI를 손보고 있는데,, 라이트모드를 기본으로 했던 거에서 다크모드로 옮기려고 하니까 진짜 온갖 걸 다 변경해야 하드라 사실 당연함 ,, 워낙 예전에 만들었던 프로젝트다 보니
dk308c.tistory.com
collectionView / tableView cell register 시
스토리보드는 UINib을 만들어서 넣을 것......
코드베이스는 그냥......
'TIL' 카테고리의 다른 글
[docker] Ubuntu에 Tomcat server 세팅하기 on mac (1) | 2024.04.12 |
---|---|
[SeSAC] December 6, 2023 (1) | 2023.12.11 |
[SeSAC] November 30, 2023 (0) | 2023.12.01 |
[SeSAC] November 27, 2023 (1) | 2023.11.28 |
[SeSAC] November 20, 2023 (0) | 2023.11.21 |