본문 바로가기

프로젝트/개인 프로젝트 V27

7) 트러블슈팅 일기 이번 시간에는 프로젝트 V1 버전에서 해결하려 했던 문제 중 하나인 JPA N+1 문제에 대해 다뤄보려고 합니다.주문한 상품을 조회할 때 발생했던 N+1 쿼리 문제를 어떻게 해결했는지,그리고 판매 관리를 위해 Sale 테이블을 추가하려 했던 배경과 그에 대한 회고를 공유하려 합니다.번외V2에 대한 이야기는 이번 편으로 마무리될 예정입니다. 그동안 개인 프로젝트만 진행하다 보니, 자가 피드백으로는 성장에 한계가 느껴졌습니다. 그래서 이제는 팀 프로젝트를 통해 더 많은 것을 배우고자 합니다. 조금 길어졌지만, 이런 변화가 제 성장에 큰 도움이 될 것 같습니다.주문상품 조회 시 N+1 쿼리 문제프로젝트 V1에서 아래와 같이 ERD를 구성했습니다. 위의 관계를 따라 Cart, User, OrderIt.. 2023. 6. 14.
6) 예외처리와 오류 페이지 만들기 검증 로직을 추가해야 한다.컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다.웹 서비스는 폼 입력시 오류가 발생하면, 고객이 입력한 데이터를 유지한 상태로 어떤 오류가 발생했는지 친절하게 알려주어야 한다.웹서비스 프로젝트에 검증 요구사항을 추가해보자.상품 등록/수정 할 때,가격, 수량에 문자가 들어가면 안된다.이미지 1개 이상 필수 입력해야 한다.상품명은 필수 입력값이다.입력을 잘못한 경우, 다시 입력 폼으로 돌아오도록 한다.로그인 요구사항로그인 사용자만 상품에 접근하고, 관리할 수 있다.로그인 하지 않은 사용자는 상품 관리에 접근하면 로그인 화면으로 이동된다.로그인 할 때, 비밀번호 잘못 입력한 경우 null을 반환한다.로그인에 실패한 경우, "아이디 또는 비밀번호가 맞지 않습니.. 2023. 6. 14.
5) /category/MUSIC와 /category/BOOK 방식의 요청 매핑 개선하기 이전 프로젝트를 만들었을 때, Querydsl 사용하는 부분 코드가 아쉬었었다. 그래서 이번에 페이징 쿼리를 수정하면서 다시 복습하고자 한다. 고치고 싶었던 것컨트롤러 부분에서 카테고리별로 페이징처리하는 부분 페이징 필터 수정카테고리별로 상품 페이징하는 부분에서 아쉬운점이 있다. 이전 프로젝트에서 카테고리 구현을 하고자, 컨트롤러에서 아래 경로 매핑 2개를 작성했었다./category/BOOK/category/MUSIC{code} 방식으로 받는 방법을 몰라서, 반복되는 코드를 적고 code를 문자열로 고정시켜 페이지 구현을 했었다. 하지만, queryDSL 쿼리를 작성하여 좀 더 코드개선을 할 수 있었다.  또한 페이징 필터를 "낮은가격순" "높은가격순"으로 고쳤다. 이전에 "이름순" "최신등록순" 필터.. 2023. 6. 13.
4) Enum 활용 저번 프로젝트 만들 때, 아쉬웠던 점들을 최대한 보완해보려고 한다. 아쉬웠던 부분Item 정보 중, ItemType(상품등급), ItemCategory(상품카테고리) 설계하는 더 나은 방법을 찾았으면 한다.카테고리별로 상품 페이징하는 부분에서 아쉬운점이 있다.그 외 코드 리팩토링 Enum 활용하여 개선해보자.이전 프로젝트 설계했을 때, Item 필드에 ItemType(상품 등급), ItemCategory(상품 카테고리)가 있는데 String 문자열로 선언했었다. 자바의 enum 타입을 매핑한다.enum을 활용하여, 객체간 책임을 확실히 분리하도록 하자.객체가 상태(값)와 행위(로직)을 갖고 있는 것이 좋다.상품 등급과 카테고리를 명확히 표현하며, 각 타입은 본인이 수행해야할 기능과 책임만 가질 수 있게 .. 2023. 6. 13.