Skip to content

[기능추가][BE] 복식부기 기반 포인트 원장 시스템 도입 #191

@Yooonjeong

Description

@Yooonjeong

📝 현재 문제점

  • 현재는 단순히 유저의 포인트 잔액을 업데이트하는 방식으로 포인트 시스템이 구성되어 있어, 시스템 장애나 오류 발생 시 이력을 추적하거나 복구하기 어렵습니다.
  • 사용자별 포인트 흐름이나 통계를 제공하는 데 필요한 기반 데이터가 부족합니다.

🛠️ 해결 방안 / 제안 기능

  • 실제 금융 시스템처럼 복식부기(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인지 확인하여 오류 감지
    • 모의트레이딩의 각 베팅 라운드 종료 후 통계 기반 정산 로직
      -> 해당 이슈에서는 통계 등 부가 기능은 제외하고 기본 기능을 구현합니다.

🙋‍♂️ 담당자

Metadata

Metadata

Assignees

Labels

BE백엔드 이슈

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions