AI 웹 개발 : Cursor로 검색·필터·페이징 기능 구현하기 (초보자ㆍ비전공자 실무 강화) | 쇼핑몰 만들기 Part 4

다시 돌아온 제로입니다.
지난 시간 우리는 AI Cursor를 활용하여 쇼핑몰 페이지의 UI와 상품페이지까지 구현을 했습니다.
아마 대부분 사람들이 크게 어려움이 없으셨을 것으로 생각이 됩니다.

하지만 쇼핑몰에서 상품을 나열하는 것 만으로는 방문자가 원하는 상품을 쉽게 찾기 어렵습니다.
상품이 많아질수록 사용자가 원하는 상품을 바로 찾게 하는 기능은 필수이며,
그만큼 UX(User Experience, 사용자 경험)와 전환율에 직접적인 영향을 미칩니다.

이번 Part 4에서는 Cursor AI를 활용하여 쇼핑몰에 검색(Search), 필터(Filter), 페이징(Pagination) 기능을 구현하는 실무 과정을 안내합니다. 초보 개발자, 비전공자, AI 활용 웹페이지 제작 부업러 모두 이해할 수 있도록 용어 설명과 단계별 예시까지 상세히 다루겠습니다.

이번 파트도 출발해 보도록 하겠습니다.

AI와 개발자가 협업하는 모습을 이미지화 한 AI 생성 이미지입니다.
본 이미지의 저작권은 블로그 주인 제로에게 있습니다.
AI와 개발자가 협업하는 모습을 이미지화 한 AI 생성 이미지입니다.
본 이미지의 저작권은 블로그 주인 제로에게 있습니다.

1. Part 4에서 구현할 목표

이번 파트에서는 다음과 같은 기능을 구현합니다.

① 상품 검색(Search)

  • 사용자 입력 키워드로 상품을 즉시 필터링
  • 실무에서는 “상품명 + 태그 + 설명” 기준으로 검색

② 필터(Filter)

  • 카테고리, 가격대, 할인율, 인기순 등
  • 사용자가 원하는 기준으로 상품을 쉽게 추출

③ 페이징(Pagination)

  • 한 페이지에 상품을 모두 노출하지 않고, 페이지 단위로 나누어 표시
  • 서버/브라우저 부하 감소 및 UX 향상

이 세 기능을 구현하면 방문자는 수많은 상품 중에서 원하는 상품을 빠르게 찾을 수 있습니다.


2. 왜 검색 · 필터 · 페이징이 중요한가?

1) 검색(Search)

검색 기능은 단순히 입력 폼이 아닙니다.
사용자가 원하는 상품을 즉시 찾을 수 있도록 연결하는 관문입니다.
특히 모바일 사용자가 많은 쇼핑몰에서는 검색창 노출과 위치가 중요합니다.

2) 필터(Filter)

필터는 상품 리스트를 사용자가 필요에 따라 정렬·선택하게 합니다.
실무에서는 다음과 같은 기준이 자주 사용됩니다.

  • 카테고리: 티셔츠, 패딩, 신발 등
  • 가격대: 0~5만원, 5~10만원 등
  • 할인율: 10%, 20%, 30% 이상
  • 인기순: 리뷰수, 판매량 기준

3) 페이징(Pagination)

상품 수가 많을 경우 스크롤만으로는 한계가 있습니다.
페이지 단위로 나누면 성능 향상과 함께 사용자 경험도 좋아집니다.

용어설명 – Pagination(페이징)

웹 페이지에서 데이터를 페이지 단위로 나누어 보여주는 방법입니다.
“이전/다음” 버튼이나 페이지 번호를 클릭하여 이동합니다.
페이징 처리가 되어있지 않으면 웹 페이지의 로딩 속도도 저하되고 사용자 또한 불편함을 느낍니다.


3. Cursor AI 프롬프트 예시

이번 Part 4에서는 다음 프롬프트를 기반으로 Cursor가 코드를 생성합니다.
(지난 시간까지 진행한 프로젝트에 프롬프트를 입력해 주시면 됩니다)

[Cursor AI 바로가기]

쇼핑몰 상품 리스트에 검색, 필터, 페이징 기능을 HTML과 CSS로 만들어 주세요.
요구사항:
- 검색창: 상품명 및 태그 검색 가능
- 필터: 카테고리, 가격대, 할인율 선택 가능
- 페이징: 한 페이지당 12개 상품, 이전/다음 버튼 포함
- 모바일, 태블릿, 데스크톱 반응형
- CSS/HTML 구조를 가독성 있게 작성
Cursor AI에 입력한 프롬프트.
본 이미지는 독자의 이해를 돕기 위해 직접 캡쳐한 화면으로 저작권은 블로그 주인 제로에게 있습니다.
Cursor AI에 입력한 프롬프트.
본 이미지는 독자의 이해를 돕기 위해 직접 캡쳐한 화면으로 저작권은 블로그 주인 제로에게 있습니다.

이 프롬프트로 생성된 코드는 독자 분들의 가독성을 위해 일부만 발췌하여 포스팅 할 예정입니다.
전체 코드는 GitHub에서 보실 수 있습니다.
[제로의 GitHub 저장소 바로가기]


4. 검색 기능(Search) 구현 해설

Cursor가 생성한 HTML 구조(부분발췌)

<!-- 검색창 -->
            <div class="search-box">
                <input 
                    type="text" 
                    id="searchInput" 
                    class="search-input" 
                    placeholder="상품명 또는 태그로 검색..."
                    aria-label="상품 검색"
                >
                <button class="search-button" aria-label="검색">
                    <span class="search-icon">🔍</span>
                </button>
            </div>
  • id=”searchInput” : JavaScript와 연결하기 위한 고유 식별자
  • placeholder : 사용자가 입력할 내용을 안내하는 텍스트
  • 접근성과 UX 모두를 고려한 요소입니다.

검색 기능을 구현할 때, 실무에서는 실시간 검색(Instant Search)을 구현하기도 하며
데이터가 많은 경우 서버 사이드 필터링과 결합합니다.


5. 필터(Filter) 구현 해설

Cursor가 생성한 HTML 구조(부분발췌)

<!-- 가격대 필터 -->
                <div class="filter-group">
                    <label for="priceFilter" class="filter-label">가격대</label>
                    <select id="priceFilter" class="filter-select" aria-label="가격대 선택">
                        <option value="">전체</option>
                        <option value="0-20000">20,000원 이하</option>
                        <option value="20000-50000">20,000원 ~ 50,000원</option>
                        <option value="50000-100000">50,000원 ~ 100,000원</option>
                        <option value="100000-999999">100,000원 이상</option>
                    </select>
                </div>
  • select 요소 : 드롭다운 형태 필터
  • option value : 실제 필터링 데이터 값
  • JavaScript를 이용해 선택 시 상품 리스트를 실시간 업데이트

실무에서는 가격 범위 슬라이더할인율 체크박스 등도 함께 적용합니다.


6. 페이징(Pagination) 구현 해설

Cursor가 생성한 HTML / Js 코드(부분발췌)

HTML 소스코드

 <!-- 페이징 컨트롤 -->
        <nav class="pagination-section" id="paginationSection" aria-label="페이지 네비게이션">
            <!-- 페이징 버튼들은 JavaScript로 동적 생성됩니다 -->
        </nav>

JS 소스코드(일부 발췌)

// ============================================
// 페이징 렌더링 함수
// ============================================

function renderPagination() {
    const totalPages = Math.ceil(filteredProducts.length / productsPerPage);
    
    paginationSection.innerHTML = '';

    if (totalPages <= 1) {
        return; // 페이지가 1개 이하면 페이징 숨기기
    }

    // 이전 버튼
    const prevButton = document.createElement('button');
    prevButton.className = 'pagination-button prev-next';
    prevButton.textContent = '이전';
    prevButton.disabled = currentPage === 1;
    prevButton.addEventListener('click', () => {
        if (currentPage > 1) {
            currentPage--;
            renderProducts();
            renderPagination();
            window.scrollTo({ top: 0, behavior: 'smooth' });
        }
    });
    paginationSection.appendChild(prevButton);

    // 페이지 번호 버튼
    const maxVisiblePages = 5;
    let startPage = Math.max(1, currentPage - Math.floor(maxVisiblePages / 2));
    let endPage = Math.min(totalPages, startPage + maxVisiblePages - 1);

    if (endPage - startPage < maxVisiblePages - 1) {
        startPage = Math.max(1, endPage - maxVisiblePages + 1);
    }
  • button.prev/next : 페이지 이동
  • button.page : 특정 페이지 번호 이동
  • CSS로 스타일링 시 현재 페이지 강조 가능

실무에서는 JavaScript로 페이지 클릭 시 상품 리스트 동적 변경
반응형 레이아웃 유지가 핵심입니다.


7. SEO와 접근성을 고려한 구성

검색·필터·페이징 섹션에서도 SEO와 접근성을 무시할 수 없습니다.

1) aria-label

  • 검색창, 필터, 버튼에 aria-label 속성 추가
  • 시각장애인 사용자가 스크린리더로 읽을 수 있음
                <button class="search-button" aria-label="검색">
                    <span class="search-icon">🔍</span>
                </button>

2) alt 문구

  • 필터로 노출되는 썸네일 이미지는 ALT를 작성
  • SEO와 접근성 향상

3) HTML 시멘틱 태그

  • <nav> : 페이징 영역
  • <form> : 검색/필터 영역
  • 검색엔진 최적화와 화면 이해도를 높임
Part4 내용이 진행되어 만들어진 쇼핑몰 페이지.
페이징처리가 되어 아래에 페이지가 나타난 것을 확인할 수 있습니다.
독자의 이해를 돕기 위해 직접 작성 및 캡쳐한 화면으로 저작권은 블로그 주인 제로에게 있습니다.
Part4 내용이 진행되어 만들어진 쇼핑몰 페이지.
페이징처리가 되어 아래에 페이지가 나타난 것을 확인할 수 있습니다.
독자의 이해를 돕기 위해 직접 작성 및 캡쳐한 화면으로 저작권은 블로그 주인 제로에게 있습니다.

8. 마무리 및 다음 편 예고

이번 Part 4에서는 쇼핑몰 핵심 기능인 검색, 필터, 페이징을 구현했습니다.
이 과정을 통해 학습한 핵심 포인트는 다음과 같습니다.

  • 검색(Search)과 필터(Filter)의 실무적 구현 이해
  • 페이징(Pagination)의 필요성과 동작 원리
  • 반응형 레이아웃과 UX 고려
  • SEO와 접근성(alt, aria-label) 적용
  • 블로그 발췌 + GitHub 전체 코드 관리 전략

다음 Part 5에서는 장바구니 및 결제 UI 구현,
그리고 UX 최적화와 실무 포트폴리오 완성 단계로 진행됩니다.

Part 5까지 완료하면, AI와 협업하여 초보자·비전공자도
실무 수준의 부업용 쇼핑몰 페이지를 완성할 수 있습니다.

이전 편 다시보기

AI 웹 개발 : 부업용 쇼핑몰 페이지 구조 기획 (초보자·비전공자 실무 강화) | 쇼핑몰 만들기 Part 1
AI 웹 개발 : Cursor로 반응형 쇼핑몰 페이지 구현하기 (초보자·비전공자 실무 강화) | 쇼핑몰 만들기 Part 2
AI 웹 개발 : Cursor로 상품리스트 & 카드 UI 구현하기 (초보자·비전공자 실무 강화) | 쇼핑몰 만들기 Part 3

 AI 코딩 시리즈 다시보기

[HTML/CSS 입문] AI로 로그인 페이지 만들어보기 (GPT vs Cursor vs AntiGravity) | Part 1
[HTML/CSS 입문] AI로 반응형 로그인 페이지 개선하기 (GPT vs Cursor vs AntiGravity) | Part 2
[HTML/CSS 입문] AI로 반응형 로그인 페이지 확장하기 (GPT vs Cursor vs AntiGravity) | Part 3

[HTML/CSS 입문] AI로 로그인 페이지 레이아웃(탭 메뉴) 만들어보기(GPT vs Cursor vs AntiGravity) | Part 4
[HTML/CSS 입문] AI로 반응형 UI 만들어보기 (GPT vs Cursor vs AntiGravity) – Part 5
[HTML/CSS 입문] AI로 만드는 헤더·푸터·레이아웃 비교(Gpt vs Cursor vs AntiGravity) | Part 6

[HTML/CSS 입문] AI로 로그인 이후 ‘대시보드 UI’ 만들기 (GPT vs Cursor vs AntiGravity) | Part 7
[HTML/CSS 입문] AI로 대시보드 차트 UI 만들기(GPT vs Cursor vs AntiGravity) | Part 8
[HTML/CSS 입문] AI로 실시간 데이터·검색/필터·테이블/페이징 UI 만들기 (GPT vs Cursor vs AntiGravity) | Part 9
[HTML/CSS/JS 입문] AI로 만드는 ‘완성형 실무 대시보드’ (GPT vs Cursor vs AntiGravity) | Part 10

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤