본문 바로가기

전체 글63

ORM으로 했던 SQL을 직접 작성해보기 SQL을 직접 작성하려고 했던 이유 프로젝트 만들 때 JPA를 사용했기 때문에 실제 쿼리를 작성해보지 않았었다. 그래서 "등록된 상품 관련 조회" 쿼리를 SQL로 직접 작성해보면서 정리해보려고 한다. 도메인 모델 도메인 설계는 2) 도메인 모델과 테이블 설계편에 자세히 정리했었다. 간단히 정리하자면 아래와 같다. 회원은 구매와 판매 모두 가능하다. 회원 상품을 판매하기 위해 상품 정보, 이미지 첨부를 해야 한다. 구매 시 여러 종류의 상품을 선택하여 장바구니에 담아 구매할 수 있다. 데이터베이스 테이블 설계 요구사항을 기반으로 설계한 테이블 ERD다. (프로젝트는 항상 뒤돌아서 생각해보면, 아쉬운 부분이나 개선해야 할 코드부분이 잘 보인다.) (이번에는 ERD 설계가 아쉬운 것 같아서, "user-sal.. 2023. 8. 31.
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.