수천 개의 항목이 포함된 대규모 데이터베이스를 처리하는 애플리케이션을 상상해 보십시오. 단일 API 응답으로 모든 기록을 반환하는 것은 재앙을 불러일으키는 방법입니다. 애플리케이션 속도를 저하시키고, 과도한 대역폭을 소비하며, 관리할 수 없는 양의 데이터로 사용자를 압도합니다.
페이지네이션이 솔루션을 제공합니다. 데이터를 더 작고 관리 가능한 페이지로 나누어 사용자는 한 번에 데이터의 하위 집합만 받게 됩니다. 그 결과 API가 더욱 빨라지고 사용자 환경이 더욱 원활해졌습니다.
수백 권의 책으로 가득 찬 대형 도서관 선반을 생각해 보세요. 전체 컬렉션을 혼란스럽게 검색하는 대신 섹션별로("페이지 1", "페이지 2" 등) 탐색하는 것이 훨씬 더 효율적입니다. 페이지 매김은 동일한 원리로 작동합니다.
이 데모에서는 PostgreSQL 데이터베이스 내의 간단한 items
테이블이 사용됩니다. 테이블 스키마는 다음과 같습니다.
<code class="language-sql">CREATE TABLE items ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, created_at TIMESTAMP DEFAULT NOW() );</code>
샘플 데이터로 테이블 채우기:
<code class="language-sql">INSERT INTO items (name) VALUES ('Item 1'), ('Item 2'), ('Item 3'), ..., ('Item 100');</code>
두 개의 쿼리 매개변수를 허용하는 API 엔드포인트(/items
)를 만들어 보겠습니다.
page
: 페이지 번호(기본값은 1).limit
: 페이지당 레코드 수(기본값은 10).Go 코드 구현은 다음과 같습니다.
<code class="language-go">package main import ( "database/sql" "fmt" "log" "net/http" "strconv" _ "github.com/lib/pq" ) // ... (rest of the code remains the same)</code>
페이지 매김 매개변수:
page
: 원하는 데이터 하위 집합을 지정합니다.limit
: 페이지당 레코드 수를 정의합니다.오프셋 계산:
offset
은 현재 페이지의 데이터를 검색하기 전에 건너뛸 레코드 수를 결정합니다.
offset = (page - 1) * limit
예:
page=1
, limit=5
→ offset=0
(0건 건너뛰기).page=2
, limit=5
→ offset=5
(처음 5개 레코드 건너뛰기).SQL 쿼리:
SQL 쿼리의 LIMIT
및 OFFSET
절은 필수 데이터를 가져옵니다.
SELECT id, name, created_at FROM items ORDER BY id LIMIT 5 OFFSET 5;
Postman, cURL 또는 웹 브라우저와 같은 도구를 사용하여 API를 테스트하세요.
<code class="language-bash">curl "http://localhost:8080/items?page=1&limit=10"</code>
<code class="language-bash">curl "http://localhost:8080/items?page=2&limit=20"</code>
/items?page=2&limit=2
에 대한 샘플 응답:
<code class="language-sql">CREATE TABLE items ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, created_at TIMESTAMP DEFAULT NOW() );</code>
1. Go에서 모든 레코드를 가져와서 분할하는 것은 어떨까요? 이는 특히 대규모 데이터 세트의 경우 매우 비효율적입니다. 수백만 개의 레코드를 메모리에 로드하면 API 속도가 크게 느려지거나 중단됩니다.
2. 누락된 매개변수 처리: API 오류를 방지하려면 항상 기본값(예: page=1
, limit=10
)을 정의하세요.
3. 최적화: 자주 쿼리하는 열(예: id
또는 created_at
)을 인덱싱하면 쿼리 속도가 대폭 향상됩니다.
페이지 매김을 구현하려면 최소한의 코드와 전략적 데이터베이스 쿼리가 필요하며 잠재적으로 압도적인 API 응답을 가볍고 사용자 친화적인 환경으로 전환합니다. 대규모 애플리케이션의 확장성을 향상하려면 총 페이지 수, 다음/이전 링크 또는 커서 기반 페이지 매김과 같은 기능을 추가하는 것이 좋습니다. 추가 Golang 리소스 및 업데이트를 보려면 Twitter 및 GitHub에서 Siddhesh를 팔로우하세요. 계속 배우고, 계속 만들어보세요! ??
위 내용은 Go에서 API 응답을 페이지로 나누는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!