EssenceAura 프로젝트 - 제품 검색 및 검색 추천어 기능

이유승·2024년 3월 11일
0

EssenceAura 프로젝트

목록 보기
10/12
post-custom-banner

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

제품 검색 기능:

  • 사용자가 검색 키워드를 입력합니다.
  • 프론트엔드에서는 이 키워드를 받아 백엔드에 전송합니다. 이 때, debounce 기능을 사용하여 연속적인 입력이 끝난 후 일정 시간이 지나면 요청을 보내도록 합니다.
  • 백엔드에서 productRoutes.js를 통해 getProductsHandler 함수가 호출됩니다.
  • getProductsHandler 함수는 쿼리 파라미터를 분석하여 현재 페이지, 제품의 목록, 정렬 옵션 등을 결정합니다.
  • 이 정보를 바탕으로 getProducts 함수를 호출하여 필요한 제품 데이터를 데이터베이스에서 가져옵니다.
  • 데이터베이스에서 받아온 제품 목록을 클라이언트로 반환합니다.

검색 추천어 기능:

  • 사용자가 검색 키워드를 입력합니다.
  • 프론트엔드는 이 키워드를 백엔드에 전송합니다.
  • 백엔드에서는 productRoutes.js를 통해 getSearchSuggestionsHandler 함수를 호출합니다.
  • getSearchSuggestionsHandler 함수는 쿼리 파라미터에서 키워드를 추출하여 getSearchSuggestions 함수를 호출합니다.
  • getSearchSuggestions 함수는 입력된 키워드를 기반으로 데이터베이스에서 관련 제품 이름, 카테고리, 태그, 이벤트 명 등을 검색합니다.
  • 검색된 결과를 클라이언트에 반환하여 사용자에게 제안 목록을 보여줍니다.



2. 코드 파일의 구성

프론트엔드

  • UpperNavigation.tsx:

    웹사이트 상단의 내비게이션 바를 구현하는 리액트 컴포넌트입니다.
    검색 바와 사용자 관련 액션(로그인, 장바구니 등)을 포함합니다.

  • SearchBar.tsx:

    사용자가 검색어를 입력할 수 있는 검색 바 컴포넌트입니다.
    검색어 입력 및 검색 제안 기능을 관리합니다.

  • UserActions.tsx / UserActionsMobile.tsx:

    데스크탑과 모바일 환경에 대응하는 사용자 액션(로그인, 회원가입, 장바구니 등)을 관리하는 컴포넌트입니다.

  • DropdownMenu.tsx:

    사용자 액션과 관련된 다양한 옵션을 드롭다운 메뉴로 표시하는 컴포넌트입니다.

  • useSearchBar.ts:

    검색 바와 관련된 로직을 관리하는 커스텀 훅입니다.
    검색어 처리 및 검색 제안 로직을 포함합니다.

  • LoadingModal.tsx:

    데이터 로딩 시 표시되는 모달(팝업 창)을 구현하는 컴포넌트입니다.

  • debounce.ts:

    연속적인 이벤트 처리에 사용되는 debounce 함수를 제공하는 유틸리티 파일입니다.

  • productThunks.ts:

    Redux를 이용한 비동기 작업 처리를 위한 Thunk 함수를 정의하는 파일입니다.
    제품 관련 데이터 요청(검색, 상세 조회 등)을 처리합니다.

백엔드

  • productRoutes.js:

    제품 관련 엔드포인트(제품 조회, 검색 제안 등)를 정의하는 라우팅 파일입니다.
    각 경로에 대응하는 컨트롤러 함수를 연결합니다.

  • productController.js:

    제품 관련 요청을 처리하는 컨트롤러 함수들을 포함합니다.
    제품 검색, 검색 제안, 제품 상세 정보 조회 등의 로직을 처리합니다.

  • productService.js:

    백엔드에서 제품 관련 비즈니스 로직을 담당하는 서비스 레이어 파일입니다.
    데이터베이스 쿼리 및 제품 데이터 처리 등의 기능을 제공합니다.



3-1. 제품 검색 및 검색 추천어 기능의 특징 - 프론트엔드

Debounce 사용 (debounce.ts):

검색 입력 시 연속적인 네트워크 요청을 최소화하기 위해 debounce 기능을 사용합니다. 이는 사용자 입력이 끝난 후 일정 시간이 지나면 검색 요청을 보내는 방식으로, 네트워크 부하를 줄이고 성능을 개선합니다.

검색 상태 관리 (useSearchBar.ts):

검색 관련 상태와 로직을 관리하는 커스텀 훅입니다. 사용자의 검색어 입력, 검색 실행, 검색 결과 처리 등을 담당하여, 검색 기능의 로직을 중앙에서 관리합니다.

검색 UI 구성 (SearchBar.tsx, DropdownMenu.tsx 등):

사용자 인터페이스에 검색 바와 검색 추천어 드롭다운 메뉴를 구현합니다. 이 컴포넌트들은 검색 입력과 결과 표시를 사용자에게 직관적으로 보여주는 역할을 합니다.



3-2. 제품 검색 및 검색 추천어 기능의 특징 - 백엔드

검색 로직 구현 (productService.js):

데이터베이스에서 제품을 검색하고 결과를 반환하는 로직을 담당합니다. 다양한 필터(가격, 카테고리, 태그 등)와 정렬 옵션을 지원하여, 사용자의 검색 요구에 유연하게 대응합니다.

에러 처리 (productController.js, error.js):

다양한 종류의 에러를 처리하고, 오류 발생 시 적절한 HTTP 상태 코드와 에러 메시지를 반환합니다. 이를 통해 프론트엔드에서 오류 상황을 명확하게 인식하고 사용자에게 알릴 수 있습니다.



4. 취약점과 개선 사항

프론트엔드:

  • 검색 입력 유효성 검사 (SearchBar.tsx 등):

현재 검색 입력에 대한 유효성 검사가 미흡할 수 있습니다. 사용자가 부적절한 입력을 할 경우에 대비하여 입력 값에 대한 검증 로직을 강화하는 것이 좋습니다.

  • 에러 핸들링 개선 (useSearchBar.ts, productThunks.ts 등):

사용자에게 보다 명확한 피드백을 제공하기 위해 에러 핸들링을 개선할 필요가 있습니다. 네트워크 요청 실패나 서버로부터의 오류 응답에 대해 사용자가 이해하기 쉬운 안내 메시지를 제공해야 합니다.

  • 성능 최적화:

검색 기능에서의 성능 최적화를 고려할 수 있습니다. 예를 들어, 검색 결과 렌더링 최적화, 상태 관리 효율성 개선 등이 있습니다.

백엔드:

  • 보안 강화 (productService.js, productController.js):

SQL 인젝션과 같은 보안 취약점에 대한 보호 조치가 필요합니다. 입력 데이터의 적절한 처리(예: SQL 쿼리 파라미터화)와 보안 강화 기술(예: 입력 값의 적절한 검증과 정제)을 적용해야 합니다.

  • 에러 처리 및 로깅 (productController.js, error.js):

보다 상세한 에러 처리 로직을 추가하여 시스템의 안정성을 높일 필요가 있습니다. 로깅 시스템을 도입하여 예상치 못한 오류를 추적하고, 디버깅을 용이하게 하는 것이 좋습니다.

  • 입력 데이터 검증 (productService.js):

서버 측에서도 입력 데이터의 유효성을 검증해야 합니다. 클라이언트 측 검증만으로는 부족하므로, 서버 측에서도 데이터 검증을 통해 부적절한 데이터의 처리를 방지해야 합니다.

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

0개의 댓글