-
Notifications
You must be signed in to change notification settings - Fork 2
Closed
Labels
BE백엔드 이슈백엔드 이슈
Description
📝 현재 문제점
- 현재는 단순히 유저의 포인트 잔액을 업데이트하는 방식으로 포인트 시스템이 구성되어 있어, 시스템 장애나 오류 발생 시 이력을 추적하거나 복구하기 어렵습니다.
- 사용자별 포인트 흐름이나 통계를 제공하는 데 필요한 기반 데이터가 부족합니다.
🛠️ 해결 방안 / 제안 기능
- 실제 금융 시스템처럼 복식부기(Double-entry bookkeeping) 방식의 원장 시스템을 도입합니다.
- 포인트의 이동 경로와 사유를 모두 기록하여 시스템의 신뢰성과 추적 가능성을 확보합니다.
- 모든 포인트 이동은 거래(Transaction) 단위로 기록하고, 각 거래는 2개 이상의 분개(LedgerEntry)로 구성되어 잔액 변화의 무결성을 보장합니다.
- 모든 거래의 분개 합계는 항상 0이어야 합니다.
- 유저 베팅 히스토리, 통화량 분석, 수익성 통계 등의 통계 데이터 기반이 될 수 있습니다.
⚙️ 작업 내용
- DB 설계 및 테이블 생성
Account: 계정 정의 (SYSTEM, PLATFORM, USER)PointTransaction: 포인트 이동의 거래 단위LedgerEntry: 각 거래에 따른 분개 기록
- Enum 타입 정의
- 계정 타입 (SYSTEM, PLATFORM, USER)
- 거래 사유 (ATTENDANCE, BETTING_STAKE, BETTING_REWARD, CANCEL 등)
- 분개 타입 (DEBIT, CREDIT)
- 출석 체크, 베팅 참여/취소, 보상 지급에 대한 트랜잭션 및 분개 로직 구현
- 낙관적 락을 위한
version컬럼 도입 - 마이그레이션 로직 작성
- 기존 users 테이블의 point를 기준으로 SYSTEM_ISSUANCE에서 USER_ACCOUNT로 이전 트랜잭션 생성
- 스케줄러 구현
- 매일 자정 모든 분개의 합계가 0인지 확인하여 오류 감지
- 모의트레이딩의 각 베팅 라운드 종료 후 통계 기반 정산 로직
-> 해당 이슈에서는 통계 등 부가 기능은 제외하고 기본 기능을 구현합니다.
🙋♂️ 담당자
- 백엔드: @Yooonjeong
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
BE백엔드 이슈백엔드 이슈