제목 | 포인트 적립과 차감, 유효기간을 어떻게 하는게 좋을까요? | ||
---|---|---|---|
카테고리 | 기타 | ||
글쓴이 | 마PD | 작성시각 | 2019/05/08 09:47:01 |
|
|||
단순하게만 만들어오던 적립금을 조금 복잡하게 만들어보려고 하니, 설계 단계에서 어떻게 하는게 좋은 방법일까 싶어지네요. ㅎㅎ
요즘 쇼핑몰들에서 적립금(현금성) 혹은 포인트(비현금성) 등을 지급해주는데... 이전에는 유효기간 같은게 없었지만, 지금은 현금/비현금 모두 유효기간을 두고 그 기간이 지나면 소멸시키는게 많아졌더라구요.
그러던 중 사용과 소멸이 겹치는 경우가 나올텐데, 로직을 어떻게 짜 놨을지 궁금해집니다.
사례1 + 5천원 적립 (유효기간 3일) + 1천원 적립 (유효기간 1일) - 3천원 사용 => 잔여 적립금 3천원 ※ 유효기간이 짧은 1천원 우선 사용. 남은 3천원은 가장 긴 유효기간인 3일 적용
사례2 + 5천원 적립 (유효기간 1일) + 1천원 적립 (유효기간 3일) - 3천원 사용 => 잔여 적립금 3천원 ※ 유효기간 짧은 5천원 우선 사용. 남은 3천원 중 2천원은 1일 후 소멸되고, 1천원은 3일 후 소멸
대개 유효기간이 있을 경우 소멸시점을 우선순위로 따져서 차감되는거 같더라구요.
이걸 DB 테이블로 만들려면.... 어떻게 해야할까가 고민 지점 입니다. ㅎㅎ
방법1. 사용자 테이블 : 현재 보유 포인트 표시 포인트 로그 테이블 : 적립, 차감, 유효기간 표시 => 유효기간에 따른 우선 사용을 어떻게 구분하지?
방법2. 사용자 테이블 : 포인트 표시 X 포인트 로그 테이블 : 적립, 차감, 유효기간 표시 => 사용할때마다 잔여 포인트 계산해서 유효기간에 따른 포인트 우선 사용 ==> 그냥 생각해봐도 조금 더 복잡해보이고, 보유 포인트를 알려면 계산을 해야하나...??
방법3. 포인트 적립 테이블 : 적립, 유효기간, 사용여부, 부분사용시 잔여 포인트 포인트 사용 테이블 : 사용에 대한 것만 표기 => 적립 테이블에서 유효한 적립 내역들만 불러와서 사용. 사용시 사용여부에 체크. 잔돈(?)이 남을시 잔돈 별도 표기 ==> 보유 포인트를 알고 싶으면 적립 테이블에서 유효 리스트 불러와서 합산 ==> 사용시 사용테이블에 로그형태로 남김
상상력이 부족하네요. ㅜㅜ. 어떤식으로 프로세스를 짜야 더 훌륭한 방법일까요? 다양한 사유로 적립, 차감이 발생하는데. 각 포인트마다 유효기간이 다르고. 사용할땐 유효기간이 짧은걸 우선 차감 하려면.... 뭐가 나은 방법인지 애매하네요. 다른분들은 이런 상황이면 어떻게 만드시나요? |
|||
다음글 | 제이쿼리 반복문 관련해서 특정 div만 반복을 안하고 ... (2) | ||
이전글 | 단순히 서버 증설만 하면 되는 문제일까요?? (3) | ||
변종원(웅파)
/
2019/05/08 10:24:38 /
추천
0
|
마PD
/
2019/05/08 16:49:34 /
추천
0
음... 역시 다른 방법보다는 가장 전통적인게 나을까요? 결국 사용자 테이블에 있는 총합 포인트와, 로그 테이블에 남는 데이터는 DB가 검증해주는 동기화는 못시키는 거네요? 변작 작업할때마다 트랜잭션을 걸어서 하는 방법 외엔.... |
변종원(웅파)
/
2019/05/09 14:29:50 /
추천
0
액션마다 동기화가 되고 특정 페이지(장바구니 진입시)에서 동기화 등 충분히 가능합니다. 로그를 메모리에 올려서 실시간 계산하는 방법도 있고 동기화, 정합성 문제를 해결할 방식은 많이 있습니다. 기준을 정하고 그 이후에 나오는 문제를 해결하는 형태로 진행하시는게 빠릅니다. |
마PD
/
2019/05/10 11:14:35 /
추천
0
감사합니다 :) 변작 작업이 있을때마다, 포인트 관련된 페이지를 들어갈때마다 점검하도록 해야겠네요! |
kaido
/
2019/05/10 11:20:56 /
추천
0
사실 이게 개발자 입장에서는 그저 숫자중 하나 일뿐인데, 운영 입장에서는 전부 부채 이라서 은근히 민감한 부분이긴 합니다 ㅎㅎ 포인트를 엄청나게 퍼주는 이벤트는 잘하면서 ㅡ,.ㅡ 포인트 10원 이라도 안맞으면 ㅎ 저의 두번째 사수분의 말이 떠오르네요
돈 계산? 틀릴수도 있다. 안맞을 수도있다. 중요한것은 원복 할수 있어야 한다.
그래서 스택을 쌓아두고 sum으로 합산해서 표시 하는 것이죠. 혹시 스택이 틀릴까봐 결재 로그까지 쌓아두고요. |
엽토군
/
2019/05/13 23:58:52 /
추천
0
개인적으로는… 그런 정책적 부분을 왜 개발자가 고민하고 있어야 되나 싶고 그러네요~~ 개발자는 그정책을 실현하는 사람이지 그걸 기획 결정하는 사람이 아닌데 다들 무책임해가지고~~ 물론 넝담ㅎ입니다.
|
변종원(웅파)
/
2019/05/14 11:00:02 /
추천
0
엽토군/ 맞는 말씀입니다. 정책이기 때문에 결정되어서 넘어와야 하는게 맞는데 그렇지 못한 환경이 많습니다. ^^;;
|
유효기간 자체가 정렬기준이죠. 타임스탬프로 처리하시면 될것 같네요.
현재 시점 기준으로 제일 가까운 것을 사용처리하고 모자르면 그 다음것으로 차감....
사용자 테이블에 보유총점 가지고 있고 액션이 일어날때 차감(또는 증가)를 하고 로그를 쌓고 총점 계산해서 사용자 테이블의 총점을 업데이트 하는게 일반적인 구조입니다.