중고거래 플랫폼 프로젝트
접속 URL: https://sprint.boolean.kr
React + Vite를 사용한 중고거래 마켓플레이스 웹 애플리케이션입니다.
- Frontend: React 19.2.0
- Build Tool: Vite 7.2.4
- Routing: React Router 7.9.6
- HTTP Client: Axios 1.13.2
- Styling: CSS Modules
src/
├── assets/ # 이미지, 아이콘 등 정적 리소스
│ ├── images/
│ │ ├── home/ # 홈 페이지 이미지
│ │ └── icons/ # 아이콘
│ └── styles/ # 전역 스타일
├── components/ # 공통 컴포넌트
│ ├── layout/ # Header, Footer
│ └── ui/ # 재사용 가능한 UI 컴포넌트
│ └── Image.jsx
├── features/ # 기능별 모듈
│ ├── home/ # 홈 페이지 관련
│ │ └── components/
│ │ └── FeatureCard/
│ └── items/ # 상품 관련
│ ├── api/ # API 호출
│ │ └── itemsApi.js
│ └── components/
│ ├── ProductsList.jsx # 상품 목록 컴포넌트
│ ├── ItemsSort.jsx # 정렬 컴포넌트
│ ├── Pagination.jsx # 페이지네이션
│ ├── Skeleton.jsx # 스켈레톤 UI
│ └── index.js
├── pages/ # 페이지 컴포넌트
│ ├── Home.jsx
│ ├── Login.jsx
│ ├── Signup.jsx
│ ├── Items.jsx
│ ├── ItemDetail.jsx
│ └── AddItem.jsx
├── lib/ # 라이브러리 설정
│ └── axios.js # Axios 인스턴스 설정
└── utility/ # 유틸리티 함수
├── number.js # 숫자 포맷팅
└── pagination.js # 페이지네이션 계산
- 히어로 섹션
- 주요 기능 소개 (Hot Item, Search, Register)
- 베스트 상품 섹션: 인기 상품 표시
- 반응형: 모바일 1개, 태블릿 2개, PC 4개
- 전체 상품 섹션:
- 검색 기능 (구현예정)
- 정렬 기능 (최신순, 인기순)
- 페이지네이션
- 반응형 그리드 레이아웃
- 스켈레톤 UI: 로딩 상태 표시
- 구현 예정
- 구현 예정
- 로그인 (
/login) - 회원가입 (
/signup)
상품 목록을 그리드 형태로 표시하는 컴포넌트
상품 정렬 기능 (최신순, 인기순)
- 모바일: 아이콘만 표시
- 태블릿 이상: 텍스트 + 드롭다운
페이지네이션 컴포넌트
로딩 중 스켈레톤 UI 컴포넌트
- 베스트 상품 스켈레톤
- 전체 상품 스켈레톤
- 헤더 스켈레톤
- 모바일 (< 768px):
- 베스트 상품: 1열
- 전체 상품: 2열
- 페이지 사이즈: 4개
- 태블릿 (768px ~ 1200px):
- 베스트 상품: 2열
- 전체 상품: 3열
- 페이지 사이즈: 6개
- PC (≥ 1200px):
- 베스트 상품: 4열
- 전체 상품: 5열
- 페이지 사이즈: 10개
fetchItems(page, pageSize, orderBy): 상품 목록 조회page: 페이지 번호pageSize: 페이지당 아이템 수orderBy: 정렬 기준 ("recent"|"favorite")
getPagination(totalCount, currentPage, pageSize, visiblePageCount): 페이지네이션 정보 계산- 반환값:
{ hasPrevPage, hasNextPage, visiblePages }
- 반환값:
formatPrice(price): 가격 포맷팅 (천 단위 콤마)
# 의존성 설치
npm install
# 개발 서버 실행
npm run dev
# 빌드
npm run build
# 빌드 미리보기
npm run preview
# 린트 검사
npm run lint- 화면 크기에 따른 동적 페이지 사이즈 조정
window.matchMedia를 활용한 반응형 처리- 초기값을 동적으로 계산하여 타이밍 이슈 해결
- Grid 레이아웃을 활용한 헤더 구조
- 모바일: 2행 2열 (제목/등록, 검색/정렬)
- 태블릿 이상: 1행 5열 (제목/검색/등록/정렬)
- 스켈레톤 UI를 통한 로딩 상태 개선
- 애니메이션 효과 적용
- CSS Modules 사용
- CSS 변수를 활용한 일관된 디자인 시스템
- 반응형 미디어 쿼리 적용
- Feature 기반 폴더 구조
- 재사용 가능한 컴포넌트 분리
- 스켈레톤 컴포넌트를 별도로 분리하여 관리
/ → Home
/login → Login
/signup → Signup
/items → Items (상품 목록)
/items/additem → AddItem (상품 등록)
/items/:itemId → ItemDetail (상품 상세)- 상품 상세 페이지 구현
- 상품 등록 페이지 구현
- 로그인, 회원가입 폼 검증
- 인증 기능 구현
- 검색 기능 구현
- 좋아요 기능 구현