Skip to content

TECKIT-SHOPPING/Trend-hub

Repository files navigation

📆 프로젝트 기간

2024.01.15 ~ 2024.02.15 / 서비스 런칭 : 2024.01.30



✔️ 사이트 테스트 전 유의사항

  1. 구매후기는 물품 구매 후 '물품후기 작성하기' 버튼이 생성됩니다. (결제 금액은 뜨지만 실제로 금액이 결제되진 않습니다.)

  2. 문의사항 qna 답변은 관리자만 가능합니다. 일반 사용자 로그인 입장 시 댓글 창이 생성되지 않습니다. (관리자 테스트 trendhub7 / trendhub7@)


⚙️ 서비스 아키텍쳐

stack


📒 기술스택

FRONT-END

BACK-END

Java

Docker

Design

Figma

etc

Google GitHub

🧱 ERD

TrundHub3-ERD



🛠️ 트러블슈팅

BACK-END

상품목록 조회 좋아요 유무 N+1 이슈

요구 사항 핵심 기술을 선택한 이유 및 근거
😱 문제 페이징처리된 상품목록 20개를 가져오는데 각 상품별로 유저가 좋아요 유무를 판단하는 쿼리문은 상품
갯수 20개만큼 쿼리문 날리는 문제 발생
🤔 원인 상품들을 먼저 조회하고 likes에서 exists로 찾기 때문에 N+1 문제 발생하는 것으로 판단했다.
😭 시도 • 구글링을 통해 게시판 구현한 코드들을 봐도 N+1 이슈가 발생하도록 코드가 작성되어있어 쿼리문을 애초에 다르게 만들어야겠다고 생각함.
• product랑 likes를 조인하고 where절에 user를 eq조건에 넣어 해결해봐도 N+1발생
• on절에 productId일치, user가 두 테이블 간에 일치하도록하여 해결함.
😄 해결 likes 엔터티 간의 leftJoin하여 on절에 product 및 user가 두 테이블 간에 일치 조건을 기반으로 하여 데이터를 한꺼번에 가져오는 방식으로 해결함

유효성 검사 에러

요구 사항 핵심 기술을 선택한 이유 및 근거
😱 문제 후기 작성하기 페이지 만드는 과정 중 'validation failed for object="reviewDto"' 란 에러 발생.
🤔 원인 현재 로직에 타임리프 에러메세지 처리 부분 혹은 DTO 부분에 문제가 있을거라 판단.
😭 시도 • 백 부터 Controller를 시작으로 service, DTO 등 순으로 검사 시작.
• DTO에서 유효성 검사하는 부분을 지우고 Controller에서 좀 더 고민
• 타임리프 에러 메세지 처리 부분에서도 한 번씩 확인했지만 로직 상 큰 문제가 없어보여 백엔드 쪽에서 문제가 생겼을 거라 확신.
• 결국 Controller 부분에서 PostMapping 뿐만 아니라 GetMapping에서도 @Valid 를 사용한 것을 확인 후 제거
😄 해결 @GetMapping 부분 @Valid를 제거함으로써 후기 작성 부분 에러 메세지가 잘 처리되는 것을 확인할 수 있었음

‍🧑‍💻 프로젝트 멤버

🔰안우성 🔰최도영 🔰김부권 🔰현진영 🔰이재윤 🔰신석우
안우성 최도영 김부권 현진영 이재윤 신석우
BACK-END BACK-END BACK-END BACK-END BACK-END BACK-END