[SQL/캡스톤디자인] 데이터베이스 과제 2주차
두 번째 주차에서는 백엔드 Flask API에서 MYSQL과 MongoDB를 함께 사용하는 구조를 설계 이후, 이를 기반으로 사용자 활동로그 및 AI학습 피드백 로그를 저장할 방안을 구체화 할 예정이었다. MongoDB에 저장될 document 구조의 초안을 작성한 후, 노트에 저장 및 검색 방법을 탐색하였다.병행하여, Flask에서 두가지 DB를 병렬 운용할때의 주의사항, 두 개의 쿼리의 트레이드오프(Tradeoff)의 대한 고민,AI피드백 데이터를 어떤방식으로 구조화하여 저장하는 방법의 대한 고찰을 하였다. 이번 주는 개인적인 DB연동 테스트를 위해, DB두 개(MYSQL,mongodb)를 동시에 연결하는 구조를 설계를 해보았고, 구현단계에서 DB를 늦지 않은 속도로 구현을 해봐야하기 때문에, 사전 확인 작업을 하였다. MYSQL은 ORM을 1차적으로 활용하여 Flask앱과 연계하고 MongoDB는 python의 pyMongo를 이용하여 연결하는 방향으로 1차 테스트 구현을 시도하였다. Flask앱 설정에서, 각 DB의 정보를 추가하고, 앱 초기화 단계에서 DB를 모두 연동하는 구조로 그렸다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_pymongo import PyMongo
app = Flask(__testDB__)
# MySQL
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://user:admin@localhost/test'
db_sql = SQLAlchemy(app)
# MongoDB
app.config['MONGO_URI'] = 'mongodb://localhost:27017/test'
mongo = PyMongo(app)
Flask에서 다중 DB를 운용할 때 별도의 커넥션 관리가 필요하다는 것을 확인했다. 이 사항에 대해서는 좀 더 개별 연구가 필요해 보인다. 만약 user의 요청을 한다면 mysql과 mongodb 둘다 처리된다는 점을 인지했고, 두 개의 DB에 모두 기록이 필요하다면, 원자적으로 묶이지 않아, 한쪽이 실패한다면, 다른 한쪽에 수동으로 처리해야할 수 있다는 것을 확인했다. 따라서 해당 방식을 어떻게 처리할지의 대해서 고민을 조금 더 해봐야 할 것 같다. 두 DB는 서로간의 join함수를 사용하기 어렵기 때문에(불가능) 공통 키를 만들어 하나의 레벨에서 데이터를 조합하는 방식을 사용해야할 것 같다. 해당 방식 역시 아직 구현을 하지 못하여, 시간을 들여 구현을 해봐야할 것 같다. 일차적으로 mongodb에 저장되는 문서를 mysql의 user_id,note_id등 주요한 문서(db)들을 저장하여, Flask에서 테이블 매칭하는 방법을 찾긴 했지만, 아직 더 연구가 필요해보이며, 개인적 숙련도가 매우 낮은편에 속한다고 생각하므로, 여러 케이스를 찾아보고, 해당 db방식을 구현해보고 이해해볼 필요가 있어보인다.
다음주엔 이번주의 오류방식을 먼저 수정을 해본 후 mongoDB 구조를 구체적으로 생각해보고 구현해볼 예정이고, 만약 오류를 해결하지 못한다면 오류의 대해서 심층적으로 더 작성해볼 예정이다.