philosucker / Text_Holdem

Texas Holdem Application with AI agents
Apache License 2.0
3 stars 0 forks source link

[06.18.2024] 아키텍쳐 질문 #2

Open philosucker opened 2 months ago

philosucker commented 2 months ago

1. 두개의 DB를 사용하려는 계획에 대한 의문 질문1 : 지금 개발중인 애플리케이션에서 MongoDB와 MySQL 두 개의 DB를 씀으로써 발생하게 될 복잡도를 상쇄하고 남을 만큼의 이득이 서로 다른 종류의 DB를 하나의 애플리케이션에 연동시켜 운용해보는 경험 외에 더 있는가?

philosucker commented 2 months ago

트랜잭션의 핵심 개념 원자성(Atomicity): 트랜잭션 내의 모든 작업이 모두 성공하거나 모두 실패 일관성(Consistency): 트랜잭션이 실행된 후 데이터베이스는 일관된 상태를 유지 고립성(Isolation): 동시에 실행되는 트랜잭션들이 서로의 중간 결과를 볼 수 없음 지속성(Durability): 트랜잭션이 커밋된 후에는 시스템 오류가 발생하더라도 해당 변경 내용이 영구적으로 유지

MySQL

  1. 정형 데이터 - 스키마 제약
  2. 복잡한 JOIN 연산, 다중 테이블 간의 관계를 활용한 쿼리에서 성능이 더 좋을 수 있습니다
  3. 다중문서 트랜잭션시 강력한 ACID 보장 여러 문서에 대해 여러 작업(삽입, 업데이트, 삭제 등)을 하나의 트랜잭션 단위로 묶어서 모든 작업이 성공할 때만 커밋(commit), 하나라도 실패하면 롤백(rollback)하는 기능을 제공

MongoDB

  1. 비정형 데이터 - 유연한 스키마(스키마리스)
  2. 인덱스가 잘 설계되어 있는 경우, 빠른 읽기/쓰기 가능 (실시간 읽기/쓰기, 대규모 데이터 읽기/쓰기, 단일 문서에 대한 읽기/쓰기)
  3. 최신 버전에서는 다중 문서 트랜잭션 지원, RDBMS(MySQL)만큼 강력하지 않음 MongoDB는 기본적으로 단일 문서 트랜잭션에 최적화

결국 홀덤 애플리케이션의 백엔드에서 DB에 어떤 테이블을 몇개 만들어 어떻게 쓸건지를 정해야 어떤 DB를 선택할 지 결정할 수 있다.

MySQL FastAPI Manager Class 에서 관리: 사용자 계정 생성(고유 ID, 이메일, 비밀번호, 닉네임, 스택사이즈 초기화-싱글/멀티 분리) 로그인 관리(JWT 토큰 발급, 멀티의 스택사이즈 100 미만이면 싱글 플레이만 가능)

   **MySQL 선택 이유 :** 
        사용자 계정정보의 데이터 무결성, 일관성 중요 
        상대적으로 고정된 스키마.
        추후 mongoDB에서 mySQL로 게임 데이터를 이관하여 다중 테이블로 분산시켜 저장 및 관리

MongoDB FastAPI Floor Class에서 관리: 게임룸 생성 및 상태 관리 FastAPI Dealer Class에서 관리: 게임 액션 정보 기록 및 관리

    **MongoDB 선택 이유**:
        게임방의 정보는 자주 변경되고, 각 게임방에 대한 실시간 업데이트가 필요
        게임 중에 각 유저의 액션 리스트를 실시간으로 기록하고 조회하는 작업은 빠른 읽기/쓰기 성능과 인덱스 설계로 최적화가능