개발 Q&A

제목 포인트 적립과 차감, 유효기간을 어떻게 하는게 좋을까요?
카테고리 기타
글쓴이 마PD 작성시각 2019/05/08 09:47:01
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 828   RSS

단순하게만 만들어오던 적립금을 조금 복잡하게 만들어보려고 하니,

설계 단계에서 어떻게 하는게 좋은 방법일까 싶어지네요. ㅎㅎ

 

요즘 쇼핑몰들에서 적립금(현금성) 혹은 포인트(비현금성) 등을 지급해주는데...

이전에는 유효기간 같은게 없었지만, 지금은 현금/비현금 모두 유효기간을 두고 그 기간이 지나면 소멸시키는게 많아졌더라구요.

 

그러던 중 사용과 소멸이 겹치는 경우가 나올텐데, 로직을 어떻게 짜 놨을지 궁금해집니다.

 

사례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

엽토군/ 맞는 말씀입니다. 정책이기 때문에 결정되어서 넘어와야 하는게 맞는데 그렇지 못한 환경이 많습니다. ^^;;