EssenceAura 프로젝트 - 제품 목록 및 상세 조회 기능

이유승·2024년 3월 11일
0

EssenceAura 프로젝트

목록 보기
8/12

1. 기능의 동작 원리와 순서

제품 목록 조회

  • 클라이언트 요청: 사용자가 제품 목록 페이지에 접속하거나 필터링/정렬 옵션을 선택합니다.
  • 클라이언트에서 서버로 요청 전송: 프론트엔드 코드에서 fetchProducts 함수가 호출됩니다. 이 함수는 사용자의 요구 사항(예: 페이지 번호, 정렬 기준)에 맞게 서버의 /fetchProducts 엔드포인트로 HTTP GET 요청을 보냅니다.
  • 서버 처리: 백엔드에서 productController.getProductsHandler가 이 요청을 받아 처리합니다. 요청에 따른 필터링, 정렬, 페이지네이션을 적용하여 데이터베이스에서 해당 제품 목록을 조회합니다.
  • 응답 반환: 조회된 제품 목록과 페이징 정보(예: 총 페이지 수)가 클라이언트에 JSON 형식으로 반환됩니다.
  • 클라이언트에서 데이터 처리 및 표시: 프론트엔드에서는 반환된 데이터를 받아 사용자 인터페이스에 제품 목록을 표시합니다.

단일 제품 조회

  • 클라이언트 요청: 사용자가 특정 제품의 상세 정보를 보기 위해 제품을 클릭합니다.
  • 클라이언트에서 서버로 요청 전송: 프론트엔드 코드에서 fetchProductById 함수가 호출됩니다. 이 함수는 선택된 제품의 ID를 이용해 서버의 /fetchProduct/:productId 엔드포인트로 HTTP GET 요청을 보냅니다.
  • 서버 처리: 백엔드에서 productController.getProductByIdHandler가 요청을 받아 데이터베이스에서 해당 제품의 상세 정보를 조회합니다.
  • 응답 반환: 조회된 제품의 상세 정보가 클라이언트에 JSON 형식으로 반환됩니다.
    클라이언트에서 데이터 처리 및 표시: 프론트엔드에서는 반환된 데이터를 받아 사용자 인터페이스에 제품의 상세 정보를 표시합니다.



2. 코드 파일의 구성

프론트엔드

  • ProductListPage.tsx:

    제품 목록 페이지의 레이아웃과 UI 구성을 담당하는 리액트 컴포넌트입니다.
    제품 목록 조회, 필터링, 정렬 등의 기능과 관련된 이벤트 처리를 관리합니다.

  • ProductDetailPage.tsx:

    단일 제품의 상세 정보 페이지의 레이아웃과 UI를 구성하는 리액트 컴포넌트입니다.
    선택된 제품의 상세 정보를 조회하고 표시하는 기능을 관리합니다.

  • useProductFetch.ts:

    제품 목록 및 제품 상세 정보 조회와 관련된 로직을 담당하는 커스텀 훅입니다.
    서버로부터 데이터를 가져오고, 상태 관리 및 캐싱을 처리합니다.

  • Pagination.tsx:

    제품 목록 및 제품 상세 정보 조회와 관련된 로직을 담당하는 커스텀 훅입니다.
    페이지네이션을 위한 UI 컴포넌트입니다.
    사용자가 다른 페이지의 제품 목록을 볼 수 있도록 페이지 이동 기능을 제공합니다.

  • SortingBar.tsx / FilterSection.tsx:

    제품 목록 및 제품 상세 정보 조회와 관련된 로직을 담당하는 커스텀 훅입니다.
    제품 목록의 정렬과 필터링 UI를 담당합니다.
    사용자가 제품 목록을 정렬하거나 특정 조건으로 필터링할 수 있도록 돕습니다.

백엔드

  • productRoutes.js:

    제품 목록 및 제품 상세 정보 조회와 관련된 로직을 담당하는 커스텀 훅입니다.
    제품 관련 엔드포인트(제품 목록 조회, 단일 제품 조회)를 정의하는 라우팅 파일입니다.
    각 경로에 대응하는 컨트롤러 함수를 연결합니다.

  • productController.js:

    제품 목록 및 제품 상세 정보 조회와 관련된 로직을 담당하는 커스텀 훅입니다.
    제품 관련 요청을 처리하는 컨트롤러 함수들을 포함합니다.
    제품 목록 조회 및 단일 제품 조회 등의 로직을 처리합니다.

  • productService.js:

    제품 목록 및 제품 상세 정보 조회와 관련된 로직을 담당하는 커스텀 훅입니다.
    백엔드에서 제품 관련 비즈니스 로직을 담당하는 서비스 레이어 파일입니다.
    데이터베이스 쿼리 실행 및 결과 처리 등의 기능을 제공합니다.

  • error.js:

    제품 목록 및 제품 상세 정보 조회와 관련된 로직을 담당하는 커스텀 훅입니다.
    애플리케이션에서 발생할 수 있는 다양한 종류의 에러를 정의하는 파일입니다.
    데이터베이스 오류, 찾을 수 없는 리소스 오류 등을 처리하기 위한 커스텀 에러 클래스를 포함합니다.



3-1. 제품 목록 및 상세 조회 기능의 특징 - 프론트엔드

상태 관리 및 데이터 페칭 (useProductFetch.ts):

제품 목록 조회 및 제품 상세 정보 조회와 관련된 데이터 페칭과 상태 관리를 수행하는 커스텀 훅을 사용합니다. 이를 통해 코드의 재사용성과 가독성이 향상됩니다.

UI 컴포넌트 구성 (ProductListPage.tsx, ProductDetailPage.tsx 등):

제품 목록과 상세 정보 페이지의 UI를 관리하는 여러 컴포넌트가 구성되어 있습니다. 이들은 사용자 인터페이스를 구성하고, 사용자의 상호작용에 반응합니다.

페이지네이션 및 정렬 기능 (Pagination.tsx, SortingBar.tsx):

사용자의 제품 목록 조회 경험을 향상시키기 위해 페이지네이션 및 제품 목록 정렬 기능이 구현되어 있습니다. 이는 사용자가 원하는 제품을 보다 쉽게 찾을 수 있도록 돕습니다.



3-2. 제품 목록 및 상세 조회 기능의 특징 - 백엔드

라우팅 및 컨트롤러 구성 (productRoutes.js, productController.js):

제품 관련 엔드포인트와 이에 대응하는 컨트롤러 함수들이 명확하게 정의되어 있습니다. 이 구조는 요청 처리의 분리와 코드의 가독성을 향상시킵니다.

데이터베이스 쿼리 및 비즈니스 로직 (productService.js):

제품 정보 조회를 위한 데이터베이스 쿼리와 관련된 비즈니스 로직이 service 레이어에 구현되어 있습니다. 이는 코드의 분리 및 유지보수를 용이하게 합니다.

에러 핸들링 (error.js):

다양한 에러 유형에 대한 처리가 구현되어 있어, 예외 상황 발생 시 적절한 응답을 반환할 수 있습니다. 이는 서버의 안정성과 클라이언트 경험을 향상시키는 중요한 요소입니다.

SQL 인젝션 방어 (productService.js):

SQL 인젝션을 방어하기 위해 Prepared Statements과 Parameterized Queries 기법을 적용하였습니다. 이 두 기법은 SQL 인젝션 공격으로부터 보호하는 데 매우 효과적입니다.



4. 취약점과 개선 사항

프론트엔드

  • UI/UX 개선 (ProductListPage.tsx, ProductDetailPage.tsx):

현재 UI는 기본적인 기능 제공에 초점을 맞추고 있습니다. 사용자 경험을 향상시키기 위해 인터페이스를 더 직관적이고 매력적으로 만들 수 있습니다. 예를 들어, 제품 이미지의 품질을 높이거나, 상호작용 요소에 애니메이션을 추가하는 것이 좋습니다.

  • 에러 핸들링 및 사용자 피드백 (useProductFetch.ts):

네트워크 요청 실패나 서버로부터의 오류 응답에 대해 사용자에게 보다 명확한 피드백을 제공하는 것이 중요합니다. 사용자가 이해하기 쉬운 안내 메시지를 제공하여, 오류 상황에서 사용자의 혼란을 줄일 수 있습니다.

백엔드

  • SQL 인젝션 방지 (productService.js):

SQL 쿼리를 생성할 때, 사용자 입력을 적절하게 처리하여 SQL 인젝션 공격을 방지하는 것이 중요합니다. 이를 위해 쿼리 파라미터화나 ORM(객체-관계 매핑) 라이브러리를 사용하는 것이 좋습니다.

  • 상세한 에러 로깅 및 처리 (error.js):

발생 가능한 예외 상황에 대해 보다 상세한 에러 처리 로직을 추가하고, 로깅 시스템을 도입하여 오류 추적 및 디버깅을 용이하게 하는 것이 좋습니다. 이를 통해 시스템의 안정성과 유지보수성을 향상시킬 수 있습니다.

  • 서버 측 데이터 검증 (productController.js):

클라이언트 측 검증뿐만 아니라 서버 측에서도 입력 데이터의 유효성을 검증해야 합니다. 이는 부적절한 데이터 처리를 방지하고, 보안을 강화하는 데 중요합니다.

profile
프론트엔드 개발자를 준비하고 있습니다.

0개의 댓글