Spring Boot 를 기반으로 구현한 간단한 쇼핑몰 웹 사이트 GitHub 사이트 프로젝트 진행 과정 목록 🎯 프로젝트 개발 동기 및 목표 스프링, 스프링 부트, JPA, 시큐리티 등의 기술스택들을 이론적으로 학습한 뒤에 실제로 어떻게 동작하는지 이해하기 위해서 간단한 쇼핑몰 프로젝트를 구현해봄. 흔한 쇼핑몰 프로젝트일지라도 완성하는 것에 초점을 두지 않고, 사용되는 기술에 대한 정확한 개념 및 사용법, 그리고 동작원리에 대해서 초점을 맞추었고, 또한 개발 과정에서 맞이하는 에러 및 궁금증들을 자세하게 찾아보고 정리하면서 전체적인 흐름 파악을 목표로 두었으며 프론트보다는 백엔드에 좀 더 집중하였음. ⚙️ 프로젝트 개발 환경 운영체제 : MacOs (Big Sur) 통합개발환경(IDE) : VSCODE..
장바구니 상품 삭제 1. CartService 장바구니 상품 번호를 파라미터로 받아서 삭제하는 로직 추가 2. CartController 장바구니 상품 삭제 요청을 처리하는 Controller 삭제 요청이므로 DeleteMapping 어노테이션 지정 상품 삭제 요청을 하는 유저와 해당 장바구니 상품의 유저가 일치하는지 검증 3. 장바구니 상품 삭제 요청 장바구니 페이지에서 상품의 X 버튼을 클릭하면 삭제 요청 장바구니 상품 주문 1. CartOrderDto 장바구니 페이지에서 주문할 상품의 데이터를 위한 Dto 자기 자신을 List로 가짐 2. OrderService 장바구니 페이지에서 전달 받은 구매 상품으로 주문을 생성하는 로직 추가 Order.createOrder() 메소드 호출 3. CartSer..
장바구니 조회 1. CartDetailDto 장바구니 조회 페이지에 전달할 Dto 클래스 CartItem 객체와 비슷함. 따라서 List 에 담겨서 전달됨 2. CartItemRepository 장바구니 페이지에 전달할 CartDetailDto 리스트를 쿼리 하나로 조회하는 JPQL 문 지연 로딩이기 때문에 최적화를 위해서 아래 코드와 같이 DTO의 생성자를 이용하여 조회 결과를 DTO 객체로 변환 후 반환할 수 있음 // select 부분에 new 키워드와 해당 DTO의 패키지, 클래스명을 지정 new com.shop.dto.CartDetailDto(ci.id, i.itemNm, i.price, ci.count, im.imgUrl) // 최적화를 위해 한 번에 반환하도록 List 타입 지정 List f..
장바구니 담기 1. CartItemDto 제품 상세 페이지에서 장바구니에 담을 상품 Id 와 수량을 전달 받을 DTO 객체 생성 2. Cart Entity 회원 한 명당 1개의 장바구니를 갖으므로 처음 장바구니에 상품을 담을 때는 해당 회원의 장바구니를 생성해야함 멤버를 파라미터로 받아서 장바구니를 생성하는 static 메소드 추가 3. CartItem Entity 장바구니에 담을 CartItem 객체를 생성하는 메소드 추가 장바구니에 담겨 있는 상품을 또 장바구니로 담았을 경우 수량을 증가시키는 메소드 추가 4. CartRepository 현재 로그인한 유저의 장바구니(Cart)를 찾기 위해서 쿼리 메소드 추가 5. CartItemRepository 상품이 장바구니에 들어있는지 조회하는 쿼리 메소드 추..
주문 취소하기 1. Item Entity 주문 취소 시 상품의 재고를 상품 주문 수량만큼 다시 더해주는 addStock() 메소드를 추가함 2. OrderItem Entity Item.addStock() 메소드를 호출하는 cancel 메소드 추가 주문 상품 수량을 파라미터로 넘김 3. Order Entity 주문 상태를 CANCEL 로 변경 모든 OrderItem 객체의 cancel() 메소드를 수행 4. OrderService 상품을 주문한 유저와 주문 취소를 요청한 유저가 동일한지 검증 orElseThrow 언제 해야되는 지?? 주문 취소 메소드 (변경 감지) 5. OrderController 상품을 주문한 유저가 맞는 지 검증 후 orderService.cancelOrder() 메소드 수행 6. 주..
구매 내역 조회 1. OrderItemDto 주문 상품 정보를 담을 OrderItemDto 객체 생성 주문 상품 정보 (상품, 수량)와 상품의 이미지를 담고 있음 2. OrderHistDto 주문 정보를 담을 OrderHistDto 객체 생성 주문 정보내에 주문 상품 정보 List 존재 3. 구매 내역 조회 리포지토리 @Query 어노테이션을 이용하여 구매 내역을 조회 SQL 문을 여러줄로 작성 시 마지막에 띄어쓰기 " " 필수 4. 상품 대표 이미지 조회 리포지토리 구매 내역 페이지에서 주문 상품의 대표 이미지를 위한 조회 5. OrderService 주문 목록을 조회하는 로직 (메소드) 추가 동작 구조 및 원리 - order, orderItem Entity 객체를 각각 OrderHistDto, Ord..
상품 주문 1. 상품 재고 부족 Exception 상품 주문 수량보다 현재 재고의 수가 적을 때 발생시킬 Exception 정의 에러 메시지를 지정할 수 있는 RuntimeException 클래스 구현 2. 상품 재고 변경 (기존 재고 - 주문 수량 재고) 로 stockNumber 수정 만약 0 보다 작다면 재고가 부족한 것이므로 Exception 발생 3. OrderItem 객체 주문 상품과 주문 수량 정보를 가지고 있는 OrderItem Entity 에 객체 생성 메소드 추가 4. Order 객체 OrderItem 객체를 연결하고 OrderItem 객체에 자신을 연결하는 메소드 추가 OrderItem 객체를 이용하여 주문 객체를 만드는 메소드 추가 각 주문 상품의 TotalPrice 를 구한뒤 모두 ..
제품 상세 페이지 1. ItemController 추가 상품 수정 페이지에서 사용했던 ItemDtl 메소드를 그대로 사용하여 상품 조회 메소드 오버로딩은 파라미터의 순서가 달라도 적용이 됨 2. 제품 상세 페이지 View GitHub 참고 totalPrice 를 계산해서 출력하는 calculateTotalPrice() 메소드 - 처음 화면 출력할 때 수행되고, 그 후에 수량 변동 시 수행됨 3. 제품 상세 페이지 화면