2023.07.31 - [프로젝트/회비관리 메신저 서비스 (07.28~)] - 회비 관리 메신저 서비스 - 와이어프레임, ERD, API, 브런치

 

회비 관리 메신저 서비스 - 와이어프레임, ERD, API, 브런치

대용량 트래픽을 처리하는 MSA기반 회비관리 메신저 서비스 2023.07.31 - [프로젝트/회비관리 메신저 서비스] - 메신저 서비스 프로젝트 ERD, API 설계 라이브 음성/화상은 성능향상을 위한 포인트를

cornpip.tistory.com

ERD, 와이어 프레임, API 링크는 기존 포스팅에서 볼 수 있다.

회비관리 관련 API

현재 ERD는 위와 같고 Wallet은 @Inheritance(strategy = InheritanceType.JOINED) 을 사용한 슈퍼타입이고 GroupWallet, PersonalWallet 과는 서브타입 관계이다.

 

User는 하나의 PersonalWallet을 개설할 수 있고 여러개의 GroupWallet을 개설할 수 있다.

참여한 GroupWallet은 UserGroupWallet 으로 확인할 수 있다.

 

Transaction(거래) 에는 wallet <-> wallet 사이의 모든 거래가 기록된다.

거래는 4가지 경우를 생각할 수 있다.

  • PersonalWallet -> PersonalWallet
  • PersonalWallet -> GroupWallet
  • GroupWallet -> PersonalWallet
  • GroupWallet -> GroupWallet

GroupWallet에서 송금을 한다면 GroupWallet 에 권한이 있는 어떤 유저가 송금을 했는지 GroupSpendDetail에 insert 된다.

 

Transaction은 transferType을 가지고 있고 2가지 타입이 있다.

  • SEND
  • RECEIVE 

송금을 하면 Transaction에는 SEND와 RECEIVE 2개의 row가 insert된다.

  • A가 B에게 5만원 SEND
  • B가 A로부터 5만원 RECEIVE

송금시 고려해야할 상황은 다음과 같다.

  1. 적절한 User인가 - wallet 주인이거나 groupWallet 이라면 authority가 적절한 구성원이여야 한다.
  2. 송금 가능한 금액을 보유하고 있는가

예약시 고려할 상황은 다음과 같다.

  1. 동시간대 예약의 경우 우선 순위
  2. 예약 성공/실패시 알맞는 update

진행

가장 큰 도메인은 user, channel, wallet 이다.

나는 reservation을 제외한 wallet 을 구성했고 다른 팀원분들이 user, channel 를 구성했다.

큰 도메인은 어느 정도 구성되었고 채팅도 거의 구현됐다.

 

이번주 MVP는 적당한 클라이언트 기능 수행까지 목표로 나는 오늘부터 React 작업에 들어간다.

클라이언트 작업이 빠르게 마칠수록 MSA, 대용량 트래픽, 동시성 등 챌린징 포인트에 빨리 도달할 수 있다.

클라이언트 작업은 오늘 내일로 마치는 것을 목표로 하고 시간이 과하게 든다 판단되면 다른 대안들을 선택하고자 한다.