SpringBoot

주문내역을 내려줄 때 가격 멱등성에 대한 고민

코카멍멍 2023. 10. 29. 21:11
반응형

🤔 Problem

 

기존 제육 1000원

제육 가격 2000원으로 인상

결제했을 때와 주문내역 불일치

메뉴 내역을 내려줄 때 현재 연결되어 있는 메뉴와 옵션을 참조하고 있습니다.

그렇다면 기존의 메뉴의 정보를 변경했다면 어떤 결과가 발생될까 생각이 들었습니다.

주문한 메뉴의 가격을 내려줄 때 메뉴의 가격을 변경하지 않았다면 1000원을 반환했을 겁니다. 하지만 나중에 물가가 오르고 사장님이 메뉴의 가격을 인상했을 때 2000원으로 올리고 손님이 주문내역을 확인하면 2000원으로 나온다는 문제점이 있었습니다.

😃 Solution

저는 이 문제를 해결하기 위해서 2가지 방법을 고안했습니다.

1. 주문내역을 저장하는 메뉴, 옵션 히스토리 테이블을 하나 더 만들어 관리

주문했을 당시의 메뉴와 옵션들의 정보를 저장하는 테이블을 만들어 관리하여 기존의 메뉴를 PATCH 방식으로 부분 수정을 해도 주문 정보를 내려줄때는 메뉴 히스토리와 옵션 히스토리를 참조하여 반환합니다.

2. 메뉴를 PATCH 방식이 아닌 PUT 방식으로 관리

기존의 PATCH 방식의 부분 데이터 변경이 아닌 PUT 방식의 메뉴 변경을 구현했습니다. 그래서 메뉴의 변경전의 정보를 참조하고 있기 때문에 메뉴의 정보를 변경해도 변경 전의 메뉴를 참조하고 있어 주문내역의 일관성을 가질 수 있습니다.

저는 위에 2가지 방식중에 2번째 방식을 선택했습니다. 주문이 발생되는 횟수와 사장님이 메뉴를 변경하는 횟수를 고려해봤을 때 2번째 방식이 레코드를 덜 생성하기 때문입니다.

 
 

 

 

반응형