본문 바로가기

TIL

[TIL 2024. 05. 31] 장바구니 기능: Redis

오늘 elder_menu.html에서의 "음성 재인식"버튼을 누를시 이용할 수 있는 "장바구니"기능을 위한 cart_ai의 프롬프트 수정과 이에 대한 test를 진행하던 중 다음과 같은 사실을 확인할 수 있었다.

  • 생각보다 gpt가 자연어로 주어지는 inputText에 대해 "메뉴 이름, 수량, action"을 잘 구분해서 높은 정확도로 return해준다는 것
  • 하지만 호출 시 인자로 current_user(staff)와 inputText에 대한 정보만 주어지는 현재 코드로는 특히 "delete" action에 대한 정확도가 떨어질 수 있다는 것
    • ex. 현재 장바구니에 아이스 아메리카노가 3개 들어있는 상황
    • --> inputText가 "아메리카노 1개만 줘"일 경우_ 현재 장바구니에 대한 정보가 없는 gpt로써는 number(수량)을 1개로 반환
    • 즉, "아메리카노 1개만 줘"에 대해서 현재 3개인 수량을 2로 줄이라는 것인지, 수량을 1개로 달라는 것인지를 구분하지 못함

delete에 대한 gpt의 정확도를 올리기 위한 방법을 고민한 결과는 cart_ai 의 매개변수로 "현재의 장바구니"상황을 함께 전해줘야 이에 대한 정확한 delete action이 가능하다는 것이었다.

 

하지만 문제는 장바구니를 DB에 저장하기에는 DB에 대한 부하가 우려된다는 점이다.

왜냐하면 장바구니는 자주 update되어야 하는 항목인 동시에 굳이 중간과정의 장바구니는 DB에 모두 저장될 필요가 없기 때문이다.

 

이에 대한 해결책을 찾아보고, React튜터님과 담당 튜터님께 모두 찾아가서 함께 방법을 찾은 결과는 총 3가지 방식으로 "장바구니"를 구현할 수 있다는 것이었다

1. browser storage 중 session을 사용 (FE단에서 처리)

2. browser storage 중 local storage를 사용 (FE단에서 처리)

3. Redis를 사용 (BE단에서 처리)

 

이 중에서 우리 pair는 3번 선택지를 사용하기로 했다.

이러한 의사결정의 이유는 다음과 같다

  • 우리는 현재 백엔드 개발자를 목표로 공부 중이므로 현업에서도 많이 사용되는 Redis를 미리 경험해보는 것이 유리함
  • Redis를 사용하면 html이든 .py든 신경쓰지 않고, 바로 장바구니에 접근할 수 있음
  • 인 메모리 저장소이므로 빠른 update를 기대할 수 있음
  • 우리는 아직 작은 서비스이므로, 메모리 용량에 대한 부담이 적음
  • 다양한 읽기+쓰기의 조합이 가능하므로, 우리의 필요대로 장바구니의 중간진행사항은 바로 Redis에서 처리하고 최종 장바구니 상황만 결제하기 버튼 클릭시 PostgreSQL의 order table에 전달해주고, Redis는 clear해주면 됨
  • Redis를 사용하면 DB를 여러번 찌를 필요가 없고, "cart(장바구니)"와 관련해서는 모두 Redis로 전담해줄 수 있음