Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/nyh365 step1 #25

Open
wants to merge 17 commits into
base: base/nyh365
Choose a base branch
from
Open

Feature/nyh365 step1 #25

wants to merge 17 commits into from

Conversation

nyh365
Copy link

@nyh365 nyh365 commented Feb 7, 2025

구현 요구 사항

  • 회원 등록 시, 본인의 "메인 계좌" 가 생성이 됩니다.
    • 이 계좌는 외부 계좌에서 돈을 가져오는 기능이 주 기능이므로, 금액 추가가 가능합니다.
    • 다만, 인당 1일 출전 한도는 3,000,000원 입니다.
  • 추가적으로, "적금 계좌" 를 생성할 수 있습니다.
    • 이 계좌는 메인 계좌에서 돈을 인출할 수 있으며, 메인 계좌의 돈이 없으면 인출할 수 없습니다.

구현

  • 메인 계좌, 적금 계좌 생성

    • 메인 계좌를 관리하는 테이블과 적금 계좌를 관리하는 테이블로 분리해서 관리하도록 구현했습니다.
    • 각 회원의 메인 계좌 관리를 위해 User 테이블에 메인 계좌 필드를 추가했습니다.
  • 일일 충전 한도

    • 일일 충전 한도를 0시 0분에 초기화 하면 필요하지 않은 모든 계좌들의 상태도 변경되기 때문에 비효율적이라고 생각했습니다. 따라서 계좌 충전 시 초기화 하도록 구현했습니다. 계좌를 충전한 시간을 관리하는 필드를 추가하여 계좌를 충전한 시간이 요청 전날이라면 초기화 하도록 했습니다.
  • 메인 계좌에서 적금 계좌로 입금

    • 메인 계좌 -> 적금 계좌 입금 시 메인 계좌 잔액 확인 -> 메인 계좌 잔액 감액 -> 적금 계좌 잔액 증액의 과정을 거치게 됩니다. 이때 A 메인 계좌 -> B 적금 계좌로 입금, A 메인 계좌 -> C 적금 계좌로 입금이 동시적으로 일어난다면 lost update에 의해 데이터 정합성 문제가 발생한다고 생각했습니다. 따라서 비관적 락을 이용해서 이 문제를 해결하고자 했습니다.
    • 해당 기능에서 데이터 일관성 및 무결성을 지키는게 중요하다고 생각해서 트랜잭션 격리 수준은 Repeatable read로 설정했습니다.

+관련 스터디를 하면서 read committed로 하더라도 데이터 일관성 문제가 발생하지 않을 것이라 생각해서 이후 변경을 고려 중에 있습니다.
+메인 계좌 -> 적금 계좌로 입금하는 기능에서 적금 계좌 조회 시 락을 안걸고 처리했는데 step2에서 수정하여 반영하였습니다.
+테스트 코드는 아직 작성하지 못했습니다. 빠른 시일 내에 추가하도록 하겠습니다.

@nyh365 nyh365 self-assigned this Feb 7, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant