본문 바로가기
PHP로 웹사이트 만들기

게시판 페이지네이션 구현하기: 여러 페이지로 나누어 게시글 보기

by blogfine 2025. 2. 12.

게시판에 페이지네이션 기능을 추가하면 많은 게시글을 여러 페이지로 나누어 사용자가 쉽게 원하는 게시글을 찾을 수 있습니다. 페이지네이션은 특히 게시글이 많을 경우 매우 유용하며, 성능을 향상시키고 사용자의 편리성을 높여줍니다. 이번 글에서는 PHP와 MySQL을 이용해 게시판에 페이지네이션 기능을 구현하는 방법을 설명하겠습니다.

페이지네이션이란?

페이지네이션은 여러 개의 데이터나 콘텐츠를 일정한 크기로 나누어 여러 페이지에 걸쳐 표시하는 기능입니다. 예를 들어, 게시판에 100개의 게시글이 있다면, 한 페이지에 10개씩 표시하여 10개의 페이지로 나누는 방식입니다. 페이지네이션을 통해 사용자는 원하는 게시글을 더 쉽게 찾아볼 수 있으며, 페이지가 많아져도 성능 저하를 방지할 수 있습니다.

게시판 페이지네이션 구현의 기본 개념

게시판 페이지네이션 기능을 구현하려면 크게 다음과 같은 작업이 필요합니다.

  1. 게시글 목록을 페이지별로 나누는 SQL 쿼리 작성
  2. 페이지 번호를 받아 적절한 게시글을 표시하는 PHP 코드 작성
  3. 페이지네이션 링크를 생성하여 사용자에게 페이지를 이동할 수 있는 기능 제공

이제 각각의 작업을 어떻게 구현할 수 있는지 자세히 살펴보겠습니다.

1. 게시글 목록을 페이지별로 나누는 SQL 쿼리

먼저, 게시글을 일정한 개수씩 나누어 표시하기 위한 SQL 쿼리를 작성해야 합니다. 이를 위해 LIMITOFFSET을 사용하여 원하는 범위의 데이터를 조회합니다. 예를 들어, 한 페이지에 10개의 게시글을 표시한다고 가정할 때, 페이지 번호를 받아서 해당 페이지에 맞는 게시글을 조회하는 쿼리는 아래와 같습니다.

```sql SELECT * FROM posts ORDER BY created_at DESC LIMIT 10 OFFSET 0;

위 쿼리는 게시글을 최신순으로 정렬하여 10개씩 가져오며, 첫 페이지에서 0번부터 시작합니다. 페이지 번호가 변경될 때마다 OFFSET 값을 조정하여 해당 페이지의 데이터를 가져올 수 있습니다. 페이지 번호가 2일 경우, OFFSET은 10이 되어야 합니다.

2. PHP로 페이지별 게시글 표시하기

PHP에서 페이지네이션을 구현하려면, 사용자가 요청한 페이지 번호에 따라 MySQL 쿼리에서 LIMIT과 OFFSET을 동적으로 변경해야 합니다. 아래는 PHP 코드 예시입니다.

<?php
// 데이터베이스 연결
$conn = new mysqli("localhost", "username", "password", "database");

// 페이지 번호와 페이지당 게시글 수 설정
$limit = 10; // 한 페이지에 표시할 게시글 수
$page = isset($_GET['page']) ? $_GET['page'] : 1; // 기본값은 첫 페이지
$start = ($page - 1) * $limit; // OFFSET 계산

// 게시글 목록 조회 쿼리
$query = "SELECT * FROM posts ORDER BY created_at DESC LIMIT $start, $limit";
$result = $conn->query($query);

// 게시글 출력
while ($row = $result->fetch_assoc()) {
    echo "<h3>" . $row['title'] . "</h3>";
    echo "<p>" . $row['content'] . "</p>";
}

// 연결 종료
$conn->close();
?>

위 코드에서는 페이지 번호를 $_GET['page']로 받아서 OFFSET 값을 계산하고, 해당 페이지에 맞는 게시글만 가져옵니다. 기본적으로 첫 번째 페이지가 표시됩니다.

3. 페이지네이션 링크 생성하기

사용자가 다른 페이지로 이동할 수 있도록 페이지네이션 링크를 생성해야 합니다. 링크는 현재 페이지를 기준으로 이전 페이지, 다음 페이지, 첫 페이지, 마지막 페이지 등을 표시합니다. 이를 위해 전체 게시글 수를 계산하고, 그에 맞는 페이지 수를 구한 뒤 링크를 출력할 수 있습니다.

<?php
// 데이터베이스 연결
$conn = new mysqli("localhost", "username", "password", "database");

// 전체 게시글 수 조회
$total_query = "SELECT COUNT(*) FROM posts";
$total_result = $conn->query($total_query);
$total_row = $total_result->fetch_row();
$total_posts = $total_row[0];

// 전체 페이지 수 계산
$total_pages = ceil($total_posts / $limit);

// 이전 페이지, 다음 페이지 링크 생성
$prev_page = $page > 1 ? $page - 1 : 1;
$next_page = $page < $total_pages ? $page + 1 : $total_pages;

// 페이지네이션 링크 출력
echo "<a href='?page=1'>첫 페이지</a> ";
echo "<a href='?page=$prev_page'>이전 페이지</a> ";
echo "<a href='?page=$next_page'>다음 페이지</a> ";
echo "<a href='?page=$total_pages'>마지막 페이지</a>";

// 연결 종료
$conn->close();
?>

위 코드에서는 전체 게시글 수를 먼저 조회하고, 전체 페이지 수를 계산하여 페이지네이션 링크를 생성합니다. 사용자는 "첫 페이지", "이전 페이지", "다음 페이지", "마지막 페이지" 링크를 클릭하여 게시글을 탐색할 수 있습니다.

4. 페이지네이션 최적화 방법

페이지네이션을 구현할 때 성능을 최적화하려면 몇 가지 방법을 고려할 수 있습니다. 페이지네이션 기능을 최적화하는 방법은 다음과 같습니다:

4.1. 인덱스 추가

게시글 조회 시 검색 조건이 많아지거나, 데이터가 많아질 경우 인덱스를 추가하는 것이 중요합니다. created_at 컬럼에 인덱스를 추가하면 페이지네이션 성능이 향상됩니다.

 

4.2. 캐시 사용

빈번하게 조회되는 게시글이나 페이지에 대해서는 캐싱을 사용하여 성능을 최적화할 수 있습니다. 페이지네이션 결과를 캐시하여 서버 부하를 줄일 수 있습니다.

게시판 페이지네이션을 활용한 사용자 경험 향상

페이지네이션은 게시판에서 많은 양의 데이터를 효율적으로 처리하고, 사용자 경험을 개선하는 데 매우 중요합니다. 사용자는 게시글을 쉽게 찾아볼 수 있고, 게시판의 성능도 향상됩니다. PHP와 MySQL을 활용하여 게시판 페이지네이션 기능을 구현하고, 위에서 설명한 최적화 방법을 적용하면 더욱 빠르고 효율적인 검색 환경을 제공할 수 있습니다.

게시판 페이지네이션 구현을 통해 사용자의 편리함을 높이고, 서버 부하를 줄이며, 사이트 성능을 최적화하세요. 페이지네이션을 잘 활용하면 대규모 게시판에서도 원활한 사용자 경험을 제공할 수 있습니다.

이 HTML 코드는 게시판 페이지네이션 기능 구현 방법을 설명하며, PHP와 MySQL을 사용하여 게시글을 여러 페이지로 나누어 표시하는 방법을 다루고 있습니다. 또한 성능 최적화 방법과 페이지네이션 링크 생성 방법을 포함하여, 게시판 페이지네이션을 효율적으로 구현할 수 있도록 돕습니다.