Skip to content

이 프로젝트는 온라인 서점 관리자 대시보드 웹 애플리케이션은 서점의 책 목록을 관리하고, 책의 상세 정보를 확인하거나 수정하며, 각 책의 판매 수량을 모니터링하는 데 사용됩니다. 이 애플리케이션은 서점 운영자가 책을 쉽게 관리하고, 추가, 수정, 삭제할 수 있는 기능을 제공합니다. 프론트엔드는 Next.js, Tailwind CSS, TypeScript를 사용하여 개발되며, 백엔드는 RESTful API로 구현되어 데이터베이스와 통신하여 책 데이터를 저장하고 조회합니다.

Notifications You must be signed in to change notification settings

BekCodingAddict/Bookstore-Admin

Repository files navigation

📚 Bookstore Admin

📖 프로젝트 개요

이 프로젝트는 온라인 서점 관리자 대시보드 웹 애플리케이션은 서점의 책 목록을 관리하고, 책의 상세 정보를 확인하거나 수정하며, 각 책의 판매 수량을 모니터링하는 데 사용됩니다. 이 애플리케이션은 서점 운영자가 책을 쉽게 관리하고, 추가, 수정, 삭제할 수 있는 기능을 제공합니다. 프론트엔드는 Next.js, Tailwind CSS, TypeScript를 사용하여 개발되며, 백엔드는 RESTful API로 구현되어 데이터베이스와 통신하여 책 데이터를 저장하고 조회합니다.

📑 프로젝트 요구사항

1.💻 프론트엔드 요구사항

  • Next.js와 TypeScript를 사용하여 웹 애플리케이션 개발
  • 책 목록 페이지
    • 페이지당 10개 항목을 표시하는 페이지네이션 적용
    • 책 제목과 저자를 기준으로 검색 기능 구현
  • 책 상세 정보 페이지 구현
  • 책 추가/제거 및 수량 조절 기능 구현

2. 🌐 백엔드 요구사항

  • 데이터베이스와 통신하는 기본적인 RESTful API 설계 및 구현
    • 1. 책 목롣 조회 (GET /api/books)
    • 2. 책 상세 정보 조회 (GET /api/books/:id)
    • 3. 책 추가 (POST /api/books)
    • 4. 책 정보 수정 (PUT/api/books/:id)
    • 5. 책 삭제 (DELETE /api/books/:id)

3. 추가 요구사항

  • TypeScript를 사용하여 프론트엔드와 백엔드 간의 타입 안전성 보장

4. 보너스 과제 (선택사항)

  • 핵심 기능에 대한 기본적인 테스트 작성
    • 예: 책 추가/삭제, 책 목록 조회의 정상 동작 테스트

🚀 주요 기능

책 목록 조회 (검색 및 필터링 포함)
책 상세 정보 페이지
책 추가 / 삭제 / 수량 조절 기능
백엔드 API 설계 및 데이터베이스 연동
TypeScript 적용 (프론트엔드 & 백엔드 타입 안전성 보장)
기본적인 테스트 작성 (책 추가/삭제, 목록 조회 테스트 포함)

Tech Stacks:

Next.js  Tailwind CSS  TypeScript  Tabler Icons  Node.js  MySQL  Sequelize  REST API  ESLint  Git  Dotenv  GitHub

  • Frontend: Next.js (App Router), Tailwind CSS, TypeScript
  • Backend: Next.js API Routes, MySQL (Sequelize)
  • Deployment: Vercel

⚙️ 설치 및 실행 방법

📌 1. 필수 설치 항목

  • Node.js (v16.0.0 or higher)
  • MySQL (v5.7 or higher)
  • npm (v8.0.0 or higher)

📌 2. 프로젝트 클론

git clone https://github.com/yourusername/bookstore-admin.git
cd bookstore-admin

아니면 그냥 도운러드 받아서 실행 : code->Download ZIP

📌 3. 환경 변수 설정 / (.env Envoirment Variables)

Variables
TABLE_NAME="Your MySQL Schema Name"
ROOT_USERNAME="Your MySQL Root UserName"
MYSQL_PASSWORD="Your MySQL Password"
DB_HOST="Your DB Local host"
DB_PORT="Your Local host port number"
NODE_ENV="development"
NEXT_PUBLIC_BASE_URL="Your currently running on pablic base url for example: http://localhost:3000"

📌 4. 의존성 설치

npm install

📌 6. 개발 서버 실행

npm run dev

📡 API 정보 (Backend)

메서드 URL 설명
📍 GET /api/books 전체 책 목록 조회
📍 GET /api/books/:id 특정 책 정보 조회
📍 POST /api/books 새 책 추가
📍 PUT /api/books/:id 책 정보 수정
📍 DELETE /api/books/:id 책 삭제

📂 프로젝트 폴더 구조

📦 bookstore-admin
 ┣ 📂 config
 ┃ ┣ 📜 mySQL.ts
 ┣ 📂 errors
 ┃ ┣ 📜 ErrorArchives.ts
 ┣ 📂 models
 ┃ ┣ 📜 Boook.ts
 ┣ 📂 public
 ┣ 📂 src
 ┃  ┣ 📂 app
 ┣  ┃ ┣ 📂 api
 ┃  ┃ ┃ ┣ 📂 books  # API 엔드포인트
 ┃  ┃ ┃ ┃ ┣ 📂 [bookId]  # API bookid
 ┃  ┃ ┃ ┃ ┣ 📜 route.ts (GET, POST, PUT, DELETE)
 ┃  ┃ ┃ ┣ 📂 books  # API 엔드포인트
 ┃  ┃ ┃ ┃ ┣ 📂 [bookId]  # API BookId page
 ┃  ┃ ┃ ┣ 📂 components  # UI 컴포넌트
 ┃  ┃ ┃ ┣ 📂 utils
 ┃  ┃ ┃ ┣ 📂 types
 ┣ 📂 utils  # 유틸리티 함수 (DB 연결 등)
 ┣ 📜 .env.local (환경 변수)
 ┣ 📜 next.config.js
 ┣ 📜 package.json
 ┣ 📜 README.md
 ┗ 📜 tsconfig.json

참고 사항

  1. 제가 일부로 Next.js Image 성능 최적화 component를 일부로 안 썼습니다.원인 제가 책 상세 정보를 입력할 때 ImageUrl를 같이 입력하게 했습니다.그래서 Next.js Image를 사용하면 제가 원하는 ImageUrl를 입역할 수 없습니다. 매번 다향한 ImageUrㅣ 입력할 때 nextconfig 파일에 domain 추가해야 되기 떄문입니다. 그낭 img 탁를 쓰면 이런 문제 없기 때문입니다.
      <div className="md:w-1/3">
        {book && (
          <img
            src={book.imageUrl}
            alt={book.title}
            width={250}
            height={350}
            className="rounded-lg shadow-md"
            loading="lazy"
          />
          //   <Image
          //     src={book.imageUrl}
          //     alt={book.title}
          //     width={250}
          //     height={350}
          //     className="rounded-lg shadow-md"
          //   />
        )}
      </div>
  1. Dashboard 에는 Order,Users,Settings page들을 UI 디자인만 구현해 났습니다. Interactivity가 없습니다!
  2. Dashboard에 로그인 할 떄 까자(FAke)user 정보로 고그인 할 수 있게 구현했습니다. Authentication and Authorization 기능 없습니다.
  3. 배포된 URL에 방문하시면 Database에서 데이터를 가져 오는데 문제가 있는 것 같습니다.MySQL 사용했기 떄문에 DATABASE 다로 HOSTING 했습니다. 그런데 Vercel로 배포하면 Database에서 데이터를 안 가져옵니다.여러번 노력했지만 아직 해결 못 했습니다.쇱게 MySQL 대신 Mongoose 썼으면는 이런 문제 었었을까 싶습니다. 그런데 Local Envoirment VsCode에 다 잘 실행되고 있습니다.MySQL WorkBranch에서도 HOSTING 했던 데이터 연력이 잘 되었습니다. 문제는 Vercel과 제가 MySQL Hosting 했던 Railway configration에 문제가 있듯 합니다. 아무튼 배포된 URL로 Online hosted MySQL DATABASE 연결을 아직도 못 했습니다.

에러 정리

Error & Problem Title Status Difficult Date
Uncaught (in promise) SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON solved middle Feb 15, 2025
useSearchParams() should be wrapped in a suspense boundary solved low Feb 15, 2025
Hydration failed solved middle Feb 14, 2025
Params should be awaited solved low Feb 14, 2025
div cannot be child of tr solved low Feb 14, 2025

UI Screenshots

image image image image image image image image

About

이 프로젝트는 온라인 서점 관리자 대시보드 웹 애플리케이션은 서점의 책 목록을 관리하고, 책의 상세 정보를 확인하거나 수정하며, 각 책의 판매 수량을 모니터링하는 데 사용됩니다. 이 애플리케이션은 서점 운영자가 책을 쉽게 관리하고, 추가, 수정, 삭제할 수 있는 기능을 제공합니다. 프론트엔드는 Next.js, Tailwind CSS, TypeScript를 사용하여 개발되며, 백엔드는 RESTful API로 구현되어 데이터베이스와 통신하여 책 데이터를 저장하고 조회합니다.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages