회원 지갑
회원 지갑은 회원이 카페 서비스에 대해 선불 결제할 수 있는 금전적 잔액 시스템입니다. 각 세션마다 현금으로 결제하는 대신 회원이 지갑에 잔액을 충전하면 PC, 콘솔 사용 또는 상품 주문 시 시스템이 해당 잔액에서 자동으로 차감합니다.
크레딧 기반 아키텍처
지갑은 단일 잔액이 아닌 크레딧 시스템을 사용합니다. 회원의 지갑에 잔액이 추가될 때마다 시스템이 새로운 지갑 크레딧을 생성합니다. 각 크레딧 항목은 자체 잔액, 출처, 만료일, 기기 제한을 가진 독립적인 레코드입니다. 이 설계는 다음을 제공합니다.
- 각 잔액 단위의 출처에 대한 완전한 추적성
- 크레딧 항목별 독립적인 만료일
- 기기별 제한(일부 크레딧은 PC에서만, 다른 크레딧은 콘솔에서만 사용 가능)
- 유료 잔액과 프로모션 보너스의 명확한 분리
회원의 총 지갑 잔액은 모든 활성 크레딧 항목의 잔여 값 합계입니다.
크레딧 유형
각 지갑 크레딧에는 잔액이 시스템에 유입된 방법을 식별하는 크레딧 유형이 있습니다.
| 크레딧 유형 | 설명 |
|---|---|
| 유료 | 회원이 이 잔액을 결제했습니다(현금, 카드 또는 기타 결제 수단). 금액 기반 캠페인 패키지 구매 시 생성됩니다. |
| 보너스 | 패키지 구매의 일부로 지급된 프로모션 잔액입니다. 예: "100분 결제 시 20분 상당의 보너스 크레딧 지급" |
| 수동 | 캐셔 또는 관리자가 수동으로 충전했습니다. 호의 크레딧 또는 특별 약정에 사용됩니다. |
| 수정 | 회원 잔액의 오류를 수정하기 위한 관리 조정입니다. |
| 마이그레이션 | 데이터 마이그레이션 중 레거시 시스템에서 가져온 잔액입니다. |
| 환불 취소 | 이전에 발행된 환불이 취소될 때 복원된 잔액입니다. |
크레딧 유형은 생성 시 설정되며 이후 변경할 수 없습니다. 영구적인 감사 추적의 역할을 합니다.
크레딧 상태
각 지갑 크레딧은 상태로 추적되는 수명주기를 거칩니다.
- 활성: 잔여 잔액이 있고 만료되지 않았습니다. 이 크레딧에서 잔액을 소비할 수 있습니다.
- 만료됨: 크레딧의 만료일이 지났습니다. 잔여 잔액은 더 이상 사용할 수 없습니다.
- 소진됨: 정상적인 소비를 통해 잔여 잔액이 0에 도달했습니다.
- 취소됨: 관리자가 수동으로 크레딧을 취소하여 잔여 잔액이 무효화되었습니다.
지갑 소비
회원의 지갑에서 차감(세션 시간, 주문 또는 기타 청구 이벤트)이 발생하면 시스템은 특정 크레딧 항목에 연결되는 지갑 소비 레코드를 생성하여 정확한 차감 금액을 기록합니다.
각 소비 레코드에는 차감을 유발한 원인을 식별하는 컨텍스트가 포함됩니다.
| 컨텍스트 | 설명 |
|---|---|
| 세션 사용 | 세션 사용 시간 결제를 위해 소비된 잔액입니다. 세션이 진행되는 동안 시스템이 지갑에서 차감합니다. |
| 지갑 결제 | 지갑에서 직접 결제한 것입니다(예: 회원이 지갑 잔액으로 상품 주문을 결제하는 경우). |
| 주문 | 카페 카운터 또는 회원 PC로 배달된 상품 주문 결제를 위해 소비된 잔액입니다. |
| 환불 | 환불 처리 시 생성되는 음수 조정으로, 크레딧 항목에 잔액을 반환하기 위해 소비를 감소시킵니다. |
각 소비 레코드는 원인이 된 특정 세션, 주문 또는 거래에 연결되어 완전한 감사 추적이 가능합니다.
잔액 로그
크레딧 수준의 소비 레코드 외에도 시스템은 회원의 전체 지갑 잔액을 변경하는 모든 이벤트를 기록하는 회원 잔액 로그를 유지합니다.
| 이벤트 유형 | 설명 |
|---|---|
load |
지갑에 잔액이 추가되었습니다(새 크레딧 항목 생성 또는 기존 항목 충전). |
spend |
지갑에서 잔액이 소비되었습니다(세션 결제, 주문 결제). |
refund |
지갑에 잔액이 반환되었습니다(주문 환불, 세션 환불). |
adjustment |
잔액에 관리 변경이 이루어졌습니다(수정, 상각). |
각 잔액 로그 항목은 변동 금액과 결과 잔액을 기록하므로 로그를 시간순으로 읽어 특정 시점의 회원 잔액을 재구성할 수 있습니다.
기기 제한
각 지갑 크레딧에는 어떤 유형의 기기에서 소비할 수 있는지를 제어하는 기기 제한이 있습니다.
| 제한 | 의미 |
|---|---|
| 클라이언트 | 클라이언트 PC에서 사용 가능합니다. 크레딧이 명시적으로 제한되지 않는 한 콘솔에서도 사용 가능합니다. |
| 콘솔 | 게임 콘솔에서 사용 가능합니다. 명시적으로 제한되지 않는 한 PC에서도 사용 가능합니다. |
| PC 전용 | 클라이언트 PC에서만 사용 가능합니다. 콘솔 세션에서는 소비할 수 없습니다. |
| 콘솔 전용 | 게임 콘솔에서만 사용 가능합니다. PC 세션에서는 소비할 수 없습니다. |
| 모두 | 제한 없이 모든 기기 유형에서 사용 가능합니다. 기본값입니다. |
시스템이 회원의 지갑에서 차감해야 할 때 기기 제한을 기준으로 사용 가능한 크레딧을 필터링하여 적격한 크레딧만 차감합니다.
지갑 카테고리 및 교차 카테고리 사용
지갑 크레딧에는 지갑 카테고리(예: "게이밍" 또는 "일반")를 태그할 수 있습니다. 이를 통해 특정 상황에서만 사용할 수 있는 분리된 잔액 풀을 만들 수 있습니다.
각 크레딧의 교차 카테고리 사용 옵션은 지정된 카테고리 외부에서 잔액을 사용할 수 있는지를 제어합니다.
- 비활성화(기본값) 시, 크레딧은 자신의 카테고리에서만 소비할 수 있습니다.
- 활성화 시, 크레딧은 다른 카테고리의 거래에서도 소비할 수 있습니다.
크레딧에 지갑 카테고리가 할당되지 않은 경우 범용 크레딧으로 취급되어 카테고리에 관계없이 모든 거래에서 소비할 수 있습니다.
충전 작동 방식
다음과 같은 방법으로 지갑 잔액을 추가할 수 있습니다.
캠페인 패키지 구매: 회원이 캠페인에서 금액 기반 패키지를 구매하면 시스템이 패키지 정의에 따라 자동으로 지갑 크레딧을 생성합니다. 단일 패키지 구매로 여러 크레딧(유료 부분과 보너스 부분 각각)이 생성될 수 있습니다.
수동 충전: 캐셔가 회원 상세 패널에서 회원의 지갑에 수동으로 잔액을 추가할 수 있습니다. 이때 "수동" 크레딧 유형으로 크레딧 항목이 생성됩니다.
마이그레이션: 시스템 설정 시 이전 시스템의 기존 잔액을 "마이그레이션" 크레딧 유형의 크레딧 항목으로 가져올 수 있습니다.
세션 중 지갑 소비 방식
지갑 잔액이 있는 회원이 세션을 시작하면 시스템이 자동으로 지갑에서 세션 비용을 결제할 수 있습니다.
- 세션 요금 엔진이 활성 요금 슬롯과 적용 가능한 등급 할인에 따라 분당 비용을 계산합니다.
- 세션이 진행되는 동안 시스템이 누적된 비용을 회원의 적격 지갑 크레딧에서 주기적으로 차감합니다.
- 크레딧은 만료일 순서(가장 빨리 만료되는 크레딧 우선)로 소비되어 만료로 인한 낭비를 최소화합니다.
- 세션 종료 전에 지갑 잔액이 소진되면 잔여 비용은 세션 종료 시 현금으로 청구됩니다.
- 각 차감 시 세션에 연결된 "세션 사용" 항목으로 소비 레코드가 생성됩니다.