카카오 도서 검색 API를 활용한 도서 검색 애플리케이션에 무한 스크롤 페이징 기능을 구현한 과정을 정리하였다.
페이지네이션을 위한 상태 관리 속성 추가:
private var currentQuery = ""
private var currentPage = 1
private var isLastPage = false
private var isFetching = false
func searchBooks(query: String) {
if query != currentQuery {
books = []
currentPage = 1
isLastPage = false
currentQuery = query
}
guard !isFetching, !isLastPage else { return }
fetchBooks(query: query, page: currentPage)
}
private func fetchBooks(query: String, page: Int) {
guard let encodedQuery = query.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
let url = URL(string: "https://dapi.kakao.com/v3/search/book?query=\(encodedQuery)&page=\(page)&size=10") else {
return
}
isFetching = true
var request = URLRequest(url: url)
request.allHTTPHeaderFields = ["Authorization": "KakaoAK \(apiKey)"]
URLSession.shared.dataTask(with: request) { [weak self] data, response, error in
// 응답 처리 및 상태 업데이트
}.resume()
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let position = scrollView.contentOffset.y
let contentHeight = scrollView.contentSize.height
let screenHeight = scrollView.bounds.height
if position > contentHeight - screenHeight - 100 {
viewModel.loadNextPageIfNeeded()
}
}
무한 스크롤 페이징 기능 구현을 통해 앱의 성능과 사용자 경험을 크게 개선하였다. 메모리 관리와 네트워크 최적화를 통해 안정적이고 효율적인 데이터 로딩을 실현하였으며, 앞으로도 지속적인 모니터링과 개선을 통해 더 나은 서비스를 제공할 예정이다.