-
230308 TILTIL 2023. 3. 8. 20:22
오늘은 프로젝트에서 예매 변경 관련해서 범준 튜터님께 조언을 구했다
예매한 티켓의 좌석을 변경하는 기능에 대한 질문이었따
seatsBefore: Array<string>
seatsAfter: Array<string>
seatsAfter: ["A1", "A2", "A3", ....] 이런식으로 좌석 번호를 받는다.
고려해야 하는 점은변경되는 좌석의 번호,
좌석 갯수가 달라질 때,두가지이다.
대충 정리해본 3가지 방안
1. seatsAfter, seatsBefore 배열끼리 비교, 달라진 좌석 찾아서 추가 or 변경
-> 좌석비교와, 추가 or 변경 or 삭제 결정할 알고리즘 실행되는 시간 + DB 상호작용 시간
2. 먼저 좌석 갯수를 맞추고, 일괄 변경
-> 좌석 갯수 비교하는 시간 + DB 상호작용 시간
3. 예약된 좌석 전부 지우고 새로 예약
-> DB상호작용 시간, db index 낭비튜터님께서
3번은 기존 예약의 타임스탬프가 전부 초기화된다는 이슈가 있을거 같다고 하셨다.
3번을 썼을 때 기존 예약의 createdAt 타임스탬프가 전부 초기화되면
고객이 언제 처음 예매를 했는지 알 수 없어진다는 문제는 좀 크다고 생각해서 배제.
1번은 알고리즘을 짜다보니 생각이상으로 너무 복잡해져서 또 배제.. (오늘 머리 안돌아감)
2번으로 하기로 결정했는데,
2번으로 하는것을 생각 하다보니
2번도 결국 예매 변경을 반복하다보면 기존의 타임스탬프가 훼손될 확률이 있는 것이었다.
(좌석 갯수를 줄였다 늘였다 반복하며 좌석을 뒷번호 좌석으로 점차 바꿔가면 처음 예매했던 row가 지워지게 됨)
그럼 기존의 타임스탬프를 먼저 받아온 뒤, createdAt에 기존의 타임스탬프를 박아버리면 되는게 아닌가 하는 생각
그렇다면 3번의 방법이 DB index는 좀 낭비하더라도 가장 깔끔한 방법이 아닐까 생각이 들어버림.
3번으로 최종 결정했다
'TIL' 카테고리의 다른 글
230312 TIL (0) 2023.03.12 230309 TIL (0) 2023.03.10 230307 TIL (0) 2023.03.07 230306 TIL (0) 2023.03.06 230303 WIL (0) 2023.03.04