[Bootstrap] 10. List Group, Table, Pagination 이해하기

[Bootstrap] 10. List Group, Table, Pagination 이해하기

이전 글에서는 Bootstrap의 Offcanvas와 Toast를 정리했습니다. 이번 글에서는 데이터를 보기 좋게 정리할 때 자주 사용하는 List Group, Table, Pagination을 살펴보겠습니다.

이 세 가지는 게시판, 관리자 페이지, 검색 결과, 상품 목록, 회원 목록처럼 여러 데이터를 화면에 정리해서 보여줄 때 자주 사용됩니다.


1. List Group이란?

List Group은 여러 항목을 세로 목록으로 보여주는 Bootstrap 컴포넌트입니다. 공지사항 목록, 메뉴 목록, 알림 목록, 카테고리 목록처럼 여러 데이터를 나열할 때 사용합니다.


<ul class="list-group">
  <li class="list-group-item">첫 번째 항목</li>
  <li class="list-group-item">두 번째 항목</li>
  <li class="list-group-item">세 번째 항목</li>
</ul>

바깥 영역에는 list-group 클래스를 사용하고, 각 항목에는 list-group-item 클래스를 사용합니다.


2. 링크 형태의 List Group

목록 항목을 클릭해서 다른 페이지로 이동하게 만들고 싶다면 a 태그를 사용할 수 있습니다. 이때는 list-group-item-action 클래스를 함께 사용합니다.


<div class="list-group">
  <a href="#" class="list-group-item list-group-item-action active">
    전체 게시글
  </a>
  <a href="#" class="list-group-item list-group-item-action">
    공지사항
  </a>
  <a href="#" class="list-group-item list-group-item-action">
    자유게시판
  </a>
  <a href="#" class="list-group-item list-group-item-action">
    질문답변
  </a>
</div>

active 클래스는 현재 선택된 항목을 표시할 때 사용합니다. 사용자가 지금 어느 메뉴를 보고 있는지 알려주는 역할을 합니다.


3. 상태 색상이 있는 List Group

List Group 항목에도 Bootstrap의 상태 색상을 적용할 수 있습니다. 성공, 경고, 오류, 정보 같은 상태를 목록 안에서 구분할 때 유용합니다.


<ul class="list-group">
  <li class="list-group-item list-group-item-primary">일반 안내</li>
  <li class="list-group-item list-group-item-success">처리 완료</li>
  <li class="list-group-item list-group-item-warning">확인 필요</li>
  <li class="list-group-item list-group-item-danger">오류 발생</li>
</ul>

색상은 장식이 아니라 상태를 전달하는 역할입니다. 따라서 의미에 맞는 색상을 선택하는 것이 좋습니다.


4. Badge와 함께 사용하는 List Group

목록 오른쪽에 개수나 상태를 표시하고 싶다면 Badge를 함께 사용할 수 있습니다. 알림 개수, 댓글 수, 대기 건수 등을 보여줄 때 자주 사용합니다.


<ul class="list-group">
  <li class="list-group-item d-flex justify-content-between align-items-center">
    알림
    <span class="badge text-bg-primary rounded-pill">4</span>
  </li>

  <li class="list-group-item d-flex justify-content-between align-items-center">
    댓글
    <span class="badge text-bg-success rounded-pill">12</span>
  </li>

  <li class="list-group-item d-flex justify-content-between align-items-center">
    문의
    <span class="badge text-bg-danger rounded-pill">2</span>
  </li>
</ul>

d-flex, justify-content-between, align-items-center를 함께 사용하면 왼쪽에는 제목, 오른쪽에는 배지를 깔끔하게 배치할 수 있습니다.


5. Table이란?

Table은 행과 열로 데이터를 정리해서 보여주는 HTML 요소입니다. Bootstrap에서는 table 태그에 table 클래스를 붙이면 기본 표 스타일이 적용됩니다.


<table class="table">
  <thead>
    <tr>
      <th>번호</th>
      <th>이름</th>
      <th>이메일</th>
      <th>상태</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>1</td>
      <td>홍길동</td>
      <td>hong@example.com</td>
      <td>활성</td>
    </tr>

    <tr>
      <td>2</td>
      <td>김영희</td>
      <td>kim@example.com</td>
      <td>대기</td>
    </tr>
  </tbody>
</table>

thead는 표의 제목 영역, tbody는 실제 데이터가 들어가는 영역입니다. 표를 만들 때는 구조를 구분해 작성하는 것이 좋습니다.


6. 줄무늬와 테두리가 있는 Table

데이터가 많아지면 행을 구분하기 어려울 수 있습니다. 이때 table-striped, table-bordered 클래스를 사용할 수 있습니다.


<table class="table table-striped table-bordered">
  <thead>
    <tr>
      <th>번호</th>
      <th>제목</th>
      <th>작성자</th>
      <th>작성일</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>1</td>
      <td>Bootstrap 정리</td>
      <td>관리자</td>
      <td>2026-06-28</td>
    </tr>

    <tr>
      <td>2</td>
      <td>그리드 시스템 복습</td>
      <td>홍길동</td>
      <td>2026-06-28</td>
    </tr>
  </tbody>
</table>
클래스 역할
table Bootstrap 표 기본 스타일
table-striped 행마다 배경을 다르게 표시
table-bordered 표에 테두리 표시
table-hover 마우스를 올린 행 강조

7. Hover 효과가 있는 Table

사용자가 어느 행을 보고 있는지 쉽게 알 수 있도록 마우스를 올린 행을 강조할 수 있습니다.


<table class="table table-hover">
  <thead>
    <tr>
      <th>번호</th>
      <th>상품명</th>
      <th>가격</th>
      <th>상태</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>1</td>
      <td>키보드</td>
      <td>45,000원</td>
      <td>판매중</td>
    </tr>

    <tr>
      <td>2</td>
      <td>마우스</td>
      <td>25,000원</td>
      <td>품절</td>
    </tr>
  </tbody>
</table>

table-hover는 게시판 목록, 상품 목록, 관리자 목록처럼 행 단위로 데이터를 확인하는 화면에 잘 어울립니다.


8. 반응형 Table

표는 열이 많아지면 모바일 화면에서 쉽게 깨질 수 있습니다. 이때 table을 table-responsive 영역으로 감싸면 작은 화면에서 가로 스크롤로 볼 수 있습니다.


<div class="table-responsive">
  <table class="table table-striped table-hover">
    <thead>
      <tr>
        <th>번호</th>
        <th>회원명</th>
        <th>이메일</th>
        <th>가입일</th>
        <th>최근 접속</th>
        <th>상태</th>
      </tr>
    </thead>

    <tbody>
      <tr>
        <td>1</td>
        <td>홍길동</td>
        <td>hong@example.com</td>
        <td>2026-06-01</td>
        <td>2026-06-28</td>
        <td>활성</td>
      </tr>
    </tbody>
  </table>
</div>

모바일 화면까지 고려한다면 표를 만들 때 table-responsive를 함께 사용하는 습관을 들이는 것이 좋습니다.


9. Pagination이란?

Pagination은 많은 데이터를 여러 페이지로 나누어 보여줄 때 사용하는 컴포넌트입니다. 게시판 목록, 검색 결과, 상품 목록, 관리자 목록에서 자주 사용됩니다.


<nav aria-label="Page navigation">
  <ul class="pagination">
    <li class="page-item">
      <a class="page-link" href="#">이전</a>
    </li>

    <li class="page-item">
      <a class="page-link" href="#">1</a>
    </li>

    <li class="page-item active">
      <a class="page-link" href="#">2</a>
    </li>

    <li class="page-item">
      <a class="page-link" href="#">3</a>
    </li>

    <li class="page-item">
      <a class="page-link" href="#">다음</a>
    </li>
  </ul>
</nav>

Pagination은 보통 nav, ul, li, a 구조로 작성합니다. 현재 페이지에는 active 클래스를 붙여 사용자가 보고 있는 페이지를 표시합니다.


10. 비활성 페이지 버튼

첫 페이지에서는 이전 버튼이 필요하지 않거나 클릭되면 안 되는 경우가 있습니다. 이때 disabled 클래스를 사용할 수 있습니다.


<nav aria-label="Page navigation">
  <ul class="pagination">
    <li class="page-item disabled">
      <a class="page-link">이전</a>
    </li>

    <li class="page-item active">
      <a class="page-link" href="#">1</a>
    </li>

    <li class="page-item">
      <a class="page-link" href="#">2</a>
    </li>

    <li class="page-item">
      <a class="page-link" href="#">다음</a>
    </li>
  </ul>
</nav>

disabled는 클릭할 수 없는 상태를 시각적으로 표현합니다. active는 현재 선택된 페이지를 나타냅니다.


11. Pagination 크기 조절

Pagination은 크기도 조절할 수 있습니다. 작은 목록에는 pagination-sm, 큰 화면에는 pagination-lg를 사용할 수 있습니다.


<ul class="pagination pagination-sm">
  <li class="page-item"><a class="page-link" href="#">1</a></li>
  <li class="page-item"><a class="page-link" href="#">2</a></li>
</ul>

<ul class="pagination pagination-lg">
  <li class="page-item"><a class="page-link" href="#">1</a></li>
  <li class="page-item"><a class="page-link" href="#">2</a></li>
</ul>

모바일이나 좁은 영역에서는 작은 크기를 사용하고, 메인 목록 하단처럼 눈에 잘 보여야 하는 곳에서는 기본 크기나 큰 크기를 사용할 수 있습니다.


12. Pagination 정렬

Pagination은 Flex 유틸리티 클래스를 함께 사용해 정렬할 수 있습니다. 가운데 정렬이나 오른쪽 정렬이 자주 사용됩니다.


<nav aria-label="Page navigation">
  <ul class="pagination justify-content-center">
    <li class="page-item"><a class="page-link" href="#">이전</a></li>
    <li class="page-item active"><a class="page-link" href="#">1</a></li>
    <li class="page-item"><a class="page-link" href="#">2</a></li>
    <li class="page-item"><a class="page-link" href="#">다음</a></li>
  </ul>
</nav>

<ul class="pagination justify-content-end">
  ...
</ul>

게시판이나 검색 결과 목록에서는 가운데 정렬을 많이 사용하고, 관리자 화면에서는 오른쪽 정렬을 사용하는 경우도 많습니다.


13. List Group, Table, Pagination 함께 사용하기

실제 화면에서는 이 세 가지를 함께 사용하는 경우가 많습니다. 왼쪽에는 카테고리 List Group, 오른쪽에는 Table 목록, 아래에는 Pagination을 배치할 수 있습니다.


<div class="container">
  <div class="row g-4">

    <div class="col-md-3">
      <div class="list-group">
        <a href="#" class="list-group-item list-group-item-action active">전체</a>
        <a href="#" class="list-group-item list-group-item-action">공지사항</a>
        <a href="#" class="list-group-item list-group-item-action">자유게시판</a>
        <a href="#" class="list-group-item list-group-item-action">질문답변</a>
      </div>
    </div>

    <div class="col-md-9">
      <div class="table-responsive">
        <table class="table table-hover">
          <thead>
            <tr>
              <th>번호</th>
              <th>제목</th>
              <th>작성자</th>
              <th>작성일</th>
            </tr>
          </thead>

          <tbody>
            <tr>
              <td>1</td>
              <td>Bootstrap 게시판 예시</td>
              <td>관리자</td>
              <td>2026-06-28</td>
            </tr>
          </tbody>
        </table>
      </div>

      <nav aria-label="Page navigation">
        <ul class="pagination justify-content-center">
          <li class="page-item disabled"><a class="page-link">이전</a></li>
          <li class="page-item active"><a class="page-link" href="#">1</a></li>
          <li class="page-item"><a class="page-link" href="#">2</a></li>
          <li class="page-item"><a class="page-link" href="#">다음</a></li>
        </ul>
      </nav>
    </div>

  </div>
</div>

이 구조는 게시판, 관리자 목록, 검색 결과 화면의 기본 뼈대로 활용하기 좋습니다.


14. 사용 시 주의할 점

  • List Group은 항목이 너무 많아지면 그룹을 나누는 것이 좋다.
  • 현재 선택된 항목에는 active를 사용해 위치를 알려주는 것이 좋다.
  • Table은 열이 많을 경우 table-responsive로 감싸는 것이 안전하다.
  • 표에는 thead와 tbody를 구분해 작성하는 것이 좋다.
  • Pagination의 현재 페이지에는 active를 사용한다.
  • 클릭할 수 없는 페이지 버튼에는 disabled를 사용한다.

데이터를 보여주는 화면은 보기 좋은 것도 중요하지만, 사용자가 원하는 정보를 빠르게 찾을 수 있어야 합니다. 목록, 표, 페이지 이동은 단순해 보여도 화면의 사용성을 크게 좌우합니다.


15. 정리

  • List Group은 여러 항목을 목록 형태로 보여주는 컴포넌트다.
  • list-group-item-action을 사용하면 클릭 가능한 목록을 만들 수 있다.
  • Badge를 함께 사용하면 항목별 개수나 상태를 표시할 수 있다.
  • Table은 데이터를 행과 열로 정리해서 보여줄 때 사용한다.
  • table-striped, table-bordered, table-hover로 표를 보기 좋게 만들 수 있다.
  • table-responsive는 모바일 화면에서 표가 깨지는 문제를 줄여준다.
  • Pagination은 많은 데이터를 여러 페이지로 나누어 보여줄 때 사용한다.

이번 글에서는 Bootstrap의 List Group, Table, Pagination을 정리했습니다. 이 세 가지는 데이터를 정리해서 보여주는 화면에서 매우 자주 사용됩니다. 게시판이나 관리자 페이지를 만들 때 특히 많이 등장하므로 구조를 익혀두는 것이 좋습니다.

다음 글에서는 Bootstrap에서 현재 위치나 로딩 상태를 표현할 때 사용하는 Breadcrumb, Spinner, Placeholder를 정리해보겠습니다.