[SeSAC] December 2, 2023

✔︎ 오늘의 정리

  • 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개 주세요~ 기 때문에 빠를 수밖에 없다.
  • 단점
    • 구현하기 까다롭다. 
    • 정렬 기능이 제한적이다.

 

 

 

etc-image-0

 

둘이 얼마나 차이나길래? 하고 보니까 이만큼 차이난다네요 ,, ,

약간 정렬 속도 보는 거 같다

 

 

 

https://velog.io/@minsangk/%EC%BB%A4%EC%84%9C-%EA%B8%B0%EB%B0%98-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%84%A4%EC%9D%B4%EC%85%98-Cursor-based-Pagination-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0

 

커서 기반 페이지네이션 (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

https://medium.com/@oshiryaeva/offset-vs-cursor-based-pagination-which-is-the-right-choice-for-your-project-e46f65db062f

 

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"... ...

추후에 넣고 싶어요 ... ... 입니다

그냥 참고자료용으로 넣어놓으려고 함

 

https://stackoverflow.com/questions/56572225/how-to-double-tap-instead-of-a-single-tap-a-collection-view-cell-in-swift

 

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

https://velog.io/@bibi6666667/iOS-Swift-UITapGestureRecognizer-%ED%83%AD-%EC%A0%9C%EC%8A%A4%EC%B2%98-%EC%9D%B8%EC%8B%9D%EA%B8%B0

 

[iOS, Swift] UITapGestureRecognizer 탭 제스처 인식기

https://cocoacasts.com/swift-fundamentals-working-with-tap-gesture-recognizers-in-swiftUITapGestureRecognizer 클래스를 이용해 탭 제스처를 사용하는 법.tappableView

velog.io

 

 

 

 

 

 

 

NavigationBar backgroundColor 노치까지 채우기

https://dk308c.tistory.com/71

 

[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