최근에 프로젝트에 Docker도 조금 문제가 있었고, server도 꺼지고 이런저런 일이 발생해서 처리했다. server가 실제 본가에 있는 pc라 직접가서 켜줘야했다.
그리고 최근에 취업활동을 조금하느라 조금 신경을 못썻다. 그래서 여유가 생겨 일주일정도 서버에 DB연결, Procedure, RDG 프로그램을 개발하였다. RDG는 이제 claude랑 GPT를 이용해서 개발을 하였다.
RDG는 MDBS의 핵심 프로그램이다. 각 DBMS 별로 BE에서 프로시저를 실행시키는 엔드포인트를 지정해놨다.
크게
1. hold 금액 update - 송금 금액 보류
2. 수금준비
3. 출금확정
4. 입금확정
5. 내부이체 확정
내부이체의 경우 1->5로 끝난다. hold 금액을 잡고 난 이후에 같은 은행사이에 일어난 것이기에 바로 확정을 해준다.
여기까지 정리하고 테스트를 진행했다.
Docker 설정파일들이 port가 잘못적혀있어서 postgre가 Flask로 접근이 안되어서 관련파일들도 수정하고 server에 Docker관련 세팅도 조금 추가하였다.
내가 원하는 요구사항은 아래와같다. 원래 내가 가지고있던 생각에다가 MDBS를 예전에 조금 간략하게 진행했을 때 RDG를 만들다보니 종료했을 때 이체 루틴을 진행시키다가 강제로 종료가 되어 데이터가 안맞는 경우가 있었다. 그래서 관련처리도 요구사항이었다.
그래서 1차적으로 RDG를 만들었다. 그리고 데이터를 약 만개정도 생성하고 현재 문제가 무엇이 있는지 분석했다.
링크 : https://github.com/minu0897/MDBS/tree/main/BE/scripts
현재 step 1에서 hold_amount를 update한다. 그리고 step 2로 넘어간다.
그리고 RDG를 분석하니 대부분 step2에서 오류가 났고 Postgres에서 났다. 이유는 return을 내가 하지않아서 RDG에서는 얘를 실패처리를 했고 다음루틴으로 넘어가지않았다. 그러다보니 오류가났을 경우 Hold_amount의 금액은 점점 쌓여갔다. 그래서 실패를 했을 때 hold_amount를 다시 돌려주는 로직을 새롭게 작성했다. Step1 이후에 Step2에서 오류가 나면 Step1에서 update한 hold_amount를 다시 돌리는 Procedure이다. 그래서 Mongo를 제외한 DBMS에 작성을 한 후 RDG에 추가해줬다.
초당 3개의 데이터를 생성하게 설정을 한 후 실행해보았다. 기초 데이터는 현재 mysql,postgre,oracle로 각 은행에 2명에게 1억원씩 넣었다.
그래서 아래 sql을 실행하면 모두 200,000,000 / 0 으로 나온다.
select sum(balance),sum(hold_amount) from MDBS.accounts
select sum(balance),sum(hold_amount) from accounts
select sum(balance),sum(hold_amount) from accounts
2025-11-06 21:35:14 - [INFO] - 종료 시그널 수신: SIGINT
2025-11-06 21:35:14 - [INFO] - ============================================================
2025-11-06 21:35:14 - [INFO] - 경과 시간: 307.47초
2025-11-06 21:35:14 - [INFO] - 전송: 915 | 성공: 1 | 실패: 914
2025-11-06 21:35:14 - [INFO] - 실제 RPS: 2.98 | 성공률: 0.11%
2025-11-06 21:35:14 - [INFO] - ============================================================
2025-11-06 21:35:14 - [INFO] - Random Data Generator v1 종료
데이터는 900개 정도 생성을 하려했는데 성공은 1개를 했다.
성공한 프로세스의 멱등키는 "pp-d85cddf2-3ecb-4ab0-b4fa-326a49817f83"이다. 이걸로 데이터를 한번 확인을 해보면

데이터도 잘 들어갔고 금액도 잘 맞는다. 근데 hold가 2개가 잡혀있다. 그래서 통계 데이터를 확인을 해보니

출금확정이 실패했다. -> procedure에 return 순서가 달라서 조정해줬다.
우선 데이터는 다 초기화하고 시작한다.
2025-11-07 03:28:51 - [INFO] - 종료 시그널 수신: SIGINT
2025-11-07 03:28:52 - [INFO] - ============================================================
2025-11-07 03:28:52 - [INFO] - 경과 시간: 1303.61초
2025-11-07 03:28:52 - [INFO] - 전송: 3705 | 성공: 10 | 실패: 3695
2025-11-07 03:28:52 - [INFO] - 실제 RPS: 2.84 | 성공률: 0.27%
2025-11-07 03:28:52 - [INFO] - ============================================================
2025-11-07 03:28:52 - [INFO] - Random Data Generator v1 종료
현재 약 4000명 중 1명에게 돈을 넣어놨다. 그래서 4000개의 데이터를 발생시켜야 10건이 나온다. 다만 1건이 이체 성공시 돈이 있는 사람이 점점 많아져 이체가 성공할수록 성공률은 올라간다. 그래서 3700개의 데이터를 생성하여 10개의 데이터를 성공적으로 만들었다.
로그를 체크하고 데이터를 검증해서 정리한 문제점은 아래와 같다.
1. PostgreSQL 타입 불일치 - 6회
대략 2차시도에서 3500개가 넘는 데이터를 발생시키며 에러를 모두 수정했다. 그래서 이제는 많은 데이터를 가지고 실험을 할 생각이다.
초기데이터 수정
현재 돈을 갖고있는 사람이 1/350의 확률로 가지고 있다. 이것을 조금 높여 이체확률을 높인다.
약 100 중 1명이 돈을 갖고있게 데이터를 수정했다.
많은 데이터 생성
위와 같은 전제로 실행을 해보면,
2025-11-07 05:32:44 - [INFO] - 종료 시그널 수신: SIGINT
2025-11-07 05:32:45 - [INFO] - ============================================================
2025-11-07 05:32:45 - [INFO] - 경과 시간: 3610.59초
2025-11-07 05:32:45 - [INFO] - 전송: 10275 | 성공: 188 | 실패: 10087
2025-11-07 05:32:45 - [INFO] - 실제 RPS: 2.85 | 성공률: 1.83%
2025-11-07 05:32:45 - [INFO] - ============================================================
2025-11-07 05:32:45 - [INFO] - Random Data Generator v1 종료
약 10,000개의 이체를 시도했고 Timeout을 제외한 오류는 없었다. 금액도 잘 맞는다.
RDG는 이제 lOCAL 환경에서는 제대로 돌아가는 것을 확인했다.
에러랑 데이터자체는 문제가 없다고 생각해 4차를 서버에서 실행하는 쪽으로 테스트할 예정이었다. 근데 서버에서 실행하려면 가상 환경을 설치해야해서 그건 이따할 생각으로 RDG 켜놓고 운동이랑 러닝좀 하고오니 2.5만개의 데이터를 생성했다. 문제는 hold_amount가 발생하고 release procedure로 없애는 작업이 안 일어난 것 같다.
timeout이 원인이었다. hold_amount update,transaction까지 insert했는데 timeout이 나서 retunr을 None을 해버렸다. 현재 코드로는 None을 처리를 안해서 처리 후 다시 테스트해야할 것 같다.
코드 수정 후 강제로 release procedure를 실행해줬다.
우선 서버에서 작동시키기위해 venv를 설치하고 시작을 하였다.

AI가 venv 세팅하는 프로그램을 짜줬다. 그리고 실행하니 정상작동한다. 아마 네트워크를 안쓰고 local에서만 돌아가니 조금 더 효율적으로데이터를 생성할 수 있을 것 같다.

간간히 데이터를 체크했는데 데이터의 오류나 결함이 1개 정도 빼고는 없었다. 그래서 계속 켜놓으니 하루에 약 25만 ~ 26만개의 이체 내역을 생성하는 시뮬레이션이 만들어졌다. 굉장히 성공적이다.
데이터는 잘 뽑고 있는데 문제는 이 결과를 현재는 나만 알 수 있다. FE단에 뿌려주고 있지않기에 그래서 남들이 보기엔 이 프로젝트는 아직 아무것도 이룬것이 없어보인다. 그래서 MongoDB는 나중에 하기로하고 우선은 FE를 조금 수정해야할 것 같다.