개발지식 먹는 하마 님의 블로그

[내일배움캠프 46일차] 배달앱 장바구니 설계 본문

내일배움캠프 (CS25)

[내일배움캠프 46일차] 배달앱 장바구니 설계

devhippo 2025. 4. 22. 21:26

❔ 장바구니를 어떻게 구현할 것인가에 대한 고민

메뉴와 주문은 N:M 관계이다.
장바구니 기능을 추가하기 위해서는 중간 테이블을 두어 1:N, 1:M 관계로 만들 필요가 있었다.

✅ 장바구니 중간 테이블 구현 방법 선정

  1. DB - 제일 무난하지만 DB 접근 횟수가 증가한다.
  2. 세션 - 트래픽이 많아질 경우 서버의 부담이 커진다.
  3. Redis - 팀원 모두가 개발 환경을 맞춰야 한다.
  4. Docker - Redis의 대체제이지만 여전히 별도의 학습이 필요하다.

위와 같은 이유로 후보들 중 1번 DB를 사용하기로 선정하였다.

✅ 장바구니 조건

  • 한 가게의 메뉴만 담을 수 있으며, 가게가 변경될 시 장바구니는 초기화된다.
    • 외래키 User를 Unique로 설정해 한 가게의 메뉴만 담을 수 있도록 하고자 하였다.
    • Cart 삭제 시, CartItem도 함께 삭제되도록 하였다.
    @OneToOne
    @JoinColumn(name = "user_id", unique = true) //유저는 1개의 장바구니만 사용 가능
    private User user;
    @ManyToOne
    @JoinColumn(name = "cart_id")
    @OnDelete(action = OnDeleteAction.CASCADE) //Cart 삭제 시, 함께 삭제됨
    private Cart cart;  //장바구니
  • 장바구니는 마지막 업데이트 시점으로부터 최대 하루만 유지된다.
    • expiredAt 필드를 사용한다.
      최근 수정일 + 1일로 수동 설정하고자 한다.
private LocalDateTime expiredAt;             //장바구니 만료 시간, 수동 업데이트

 

📏 장바구니 ERD