일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 로그아웃 기능 구현
- 파일 업로드
- spring 쇼핑몰
- oracle 설치방법
- 스프링 이미지
- Bcrypt
- 이미지 출력
- 쇼핑몰 포트폴리오
- 스프링 업로드
- 스프링 HikariCP
- 로그인 기능
- 스프링 게시판 구현
- spring 프로젝트
- 스프링 메일 전송
- arraylist
- 스프링 쇼핑몰
- 스프링 프로젝트
- 스프링 프로젝트 기본 설정
- 스프링 파일 삭제
- 삭제 구현
- 스프링 쇼핑몰 프로젝트
- 인증번호 전송
- 회원가입 기능
- ResponseEntity
- 스프링 포트폴리오
- BCrypt 적용
- 스프링 프로젝트 설정
- 정규표현식
- 스프링 게시판
- 쇼핑몰 프로젝트
- Today
- Total
Kim VamPa
[Spring][쇼핑몰 프로젝트][36] 장바구니 기능(테이블 추가) - 1 본문
프로젝트 Github : https://github.com/sjinjin7/Blog_Project
프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188
목표
장바구니 기능 구현
'장바구니' 정보를 담을 테이블을 설계 및 생성합니다.
순서
1. 방향
2. 장바구니 테이블
1. 요구사항 분석
우리가 구현하고자 하는 장바구니 기능은 어떠한 특징을 가지고 동작을 하게 만들지 생각나는 대로 작성해보겠습니다.
등록
- 회원은 자신이 원하는 상품을 '장바구니'에 등록할 수 있습니다.
- 수량도 함께 등록 할 수 있습니다.
- 장바구니 등록은 '상품 페이지'의 버튼을 통해서만 등록 할 수 있다.
- 한 명의 회원이 이미 등록한 장바구니 상품 정보가 있는 경우 새로 등록되지 않고 등록되었다는 경고창을 보여준다.
수정
- 장바구니 페이지에서 해당 상품의 수량 부분에 기존 수량을 변경 후, "수량 변경" 버튼을 누르게 되면 서버 DB에 등록된 '장바구니 수량'이 변경된다.
- 변경 후 '장바구니 페이지'로 리다이렉트 된다.
삭제
- 장바구니 페이지에서 삭제하고자 하는 상품의 '장바구니 삭제' 버튼을 누르게 되면 서버 DB에 등록된 '장바구니 정보'가 삭제된다.
- 삭제된 후 '장바구니 페이지'로 리다이렉트 된다.
장바구니 페이지 이동
- 홈페이지에 로그인한 경우 보이는 오른쪽 상단의 '장바구니' 링크를 '장바구니 페이지'로 이동할 수 있다.
- 로그인하지 않은 사용자가 url을 통해 이동을 할 경우 '장바구니 페이지'로 이동이 되지 않고 '메인 페이지'로 이동된다.
기타
- 장바구니에 등록된 페이지에 있는 상품들을 선택한 후 '구매 버튼'을 누르면 선택한 상품들을 구매할 수 있는 '구매 페이지'로 이동이 된다.
위에 구술한 특징과 동작을 하는 '장바구니 기능'을 구현해보겠습니다. 그에 앞서 '장바구니 정보'를 저장할 DB 테이블부터 생성해보겠습니다.
2. 장바구니 테이블
제가 추가하고자 하는 vam_cart 테이블이 가져야 할 속성과 다른 테이블과의 관계를 아래의 그림으로 표현했습니다.
- 하나의 '장바구니 상품'은 한 명의 '회원'에 속해야 합니다. 하지만 '회원'은 여러 개의 '장바구니 상품'을 가질 수 있습니다. 관계적으로 '장바구니 상품'이 다(多)이기 때문에 '장바구니 상품(vam_cart) 테이블에 외래키인 memberid를 두었습니다.
- '장바구니 상품'은 하나의 '상품' 정보를 가지고 있어야 합니다. 반대로 '상품'은 여러 '장바구니 상품'에 속할 수 있습니다. 위와 동일하게 관계적으로 '장바구니 상품'이 다(多)이기 때문에 '장바구니 상품(vam_cart) 테이블에 외래키인 bookid를 두었습니다.
- '장바구니 상품'은 회원이 몇 개의 상품을 원하는지에 대한 개수 정보인 bookCount를 속성으로 두었습니다.
- 각 '장바구니 상품' 들에 대한 구분을 위한 기본키인 cartid를 두었습니다.
위의 설계 구성대로 테이블을 생성하기 위해 아래의 코드를 실행하였습니다.
-- Oracle
create table vam_cart(
cartId number generated as identity (start with 1) primary key,
memberId varchar2(50),
bookId number,
bookCount number,
foreign key (memberId) references book_member(memberId),
foreign key (bookId) references vam_book(bookId)
);
--MySQL
create table vam_cart(
cartId int auto_increment primary key,
memberId varchar(50),
bookId int,
bookCount int,
foreign key (memberId) references book_member(memberId),
foreign key (bookId) references vam_book(bookId)
);
포스팅 순서 1에서의 요구사항 분석 중 다음과 같은 요구 사항이 있었습니다.
"한 명의 회원이 이미 등록한 장바구니 상품 정보가 있는 경우 새로 등록되지 않고 등록되었다는 경고창을 보여준다."
서버에서 이미 등록한 상품이 있는 경우 INSERT 쿼리를 나가지 않도록 로직을 짤 예정이지만, DB에서도 그러한 중복된 데이터를 가질 수 없도록 'memberId'와 'bookId' 두 컬럼에 유니크 제약조건을 추가해주겠습니다. 아래의 명령어를 통해서 유니크 제약 조건을 추가해주었습니다.
-- 유니크 제약조건 걸기
alter table vam_cart add unique (memberId, bookId);
REFERENCE
DATE
- 2020.11.15
'스프링 프레임워크 > 쇼핑몰 프로젝트' 카테고리의 다른 글
[Spring][쇼핑몰 프로젝트][36] 장바구니 기능(인터셉터 적용) - 3 (0) | 2021.11.17 |
---|---|
[Spring][쇼핑몰 프로젝트][36] 장바구니 기능(Mapper메서드) - 2 (5) | 2021.11.16 |
[Spring][쇼핑몰 프로젝트][35] 상품 상세 페이지 - 2 (4) | 2021.11.10 |
[Spring][쇼핑몰 프로젝트][35] 상품 상세 페이지 - 1 (2) | 2021.11.09 |
[Spring][쇼핑몰 프로젝트][34] 검색 필터링 기능 - 4 (7) | 2021.10.08 |