[Multiple Database Banking Simulation] 6. Flask

dbdbdeep·2025년 10월 3일
post-thumbnail

Flask를 이용해 BE를 구성할 것이다.

세팅

현재 dev,server 환경에서 모두 Flask를 올려서 사용한다. 동일한 환경을 보장하기위해 docker로 세팅하였다. 다만 차이점이 있다면 DB 접속정보가 달라진다.

Server -> DB는 localhost나 docker 컨테이너로 접속해서 정보를 가져올 수 있으나
Dev -> DB는 무조건 Server IP로 접속해서 정보를 가져와야한다.

그래서 환경에 대한 설정을 Dev, Server 별로 따로 설정하였다.

.env file
APP_PROFILE=dev <- 서버에서는 "server"로 되어있다.

그리고 Docker를 올릴 때 dev에서는 ~_dev.yml를 사용한다. 안에 값을 보면
env_file: ../BE/.env.dev # 여기에 기본값들 (.env.dev)
가 있다. server에서는 .env.server파일을 참고하게되어있다.

.env.dev와 .env.server를 보면 각 DBMS를 접속할 때 필요한 IP/Port가 적혀있다.

docker-compose -f docker-compose_dev.yml up -d api 로 실행


정상적으로 연결이 된다.

구조설계

항상 이런 프로젝트를 진행할 때 시간이 지날때마다 후회가 된다. 이유는 초반에 구조를 잘못잡아 파일을 수정할 때 이 파일이 뭐였는지 기억도 잘 안나고 내가 그 파일을 어디에 두었는지 잘 기억이 안난 경우가 많았다.
그래서 백엔드를 개발하기 전에 구조를 먼저 잡고 들어갔다.

엑셀로 내가 필요한 기능들을 정리했고 폴더화 시켜서 구조를 잡았다.
아래는 현재 Flask를 기동할 때 사용하는 파일/폴더의 구조이다.

이 프로젝트는 BE 자체가 중요한 프로젝트가 아니다보니 간략하게 설명만 하고가면
기본적으로 이 프로젝트는 Flask에서 4개의 DBMS를 접속해야한다. 그리고 SQL도 실행해야하지만 대부분은 Procedure형태의 명령어를 실행한다.

SQL 실행

SQL을 실행하면 /sql 폴더 안에서 DBMS별로 실행하면된다.
정확히는 SQL을 실행할 때 /db/file/sql에 접근한다.

파라미터를 넘길때 어떤 dbms인지 선택하고 어떤 sql을 선택해서 실행할지 정한다. 그러면 해당 sql에 parms에 넘긴 값으로 실행이 된다.

mongo 데이터 조회

mongo는 RDB가 아니고 SQL도 쓰지않는다. 그래서 따로 엔드포인트를 지정해서 실행 해주고있다.

Procedure 실행

프로시저의 경우 /proc/exec 라는 엔드포인트를 지정해서 args에 값을 넣어 넘기면된다.

mongo 프로시저

mongoDB에는 따로 procedure가 없다. 그래서 mongo_tx_service.py 파일에 flask로 절차를 진행하는 코드를 작성해놓고 mongo_proc/ 엔드포인트 뒤에 구분자를 통해 각 엔드포인트에서 mongo_tx_service.py 파일에 명시한 함수를 실행하는 방법을 사용하고 있다.

profile
DB관련 공부를 합니다.

0개의 댓글