사용자 DB 인스턴스를 어떻게 관리해야 할지?
구상한 기획
- 로그인 O
- 컨테이너를 풀 형태로 관리하여 동적으로 할당
- 저장공간이 큼 (많은 데이터 삽입 가능)
- 쉘 저장가능
- 세션 만료시 dump시켜 이전 테이블 정보 유지 or 배치작업으로 유저가 접속한지 일정기간이 지났을 경우 drop database
- 로그인 X
- 하나의 쿼리 DB 서버에 각자 database로 공간 분리
- 저장 공간이 작음
- 쉘 저장 안함
- 세션 만료시 database삭제
단순하게 컨테이너를 나누면 다른 사용자에 대한 영향을 안받으니 성능이 무조건 좋을 것이라 생각했었습니다.
하지만 다음과 같은 문제가 있는 것 같습니다.
- 여러 컨테이너를 관리해야하는 리소스
- 컨테이너 개수의 한계
- 16GB의 서버에 컨테이너를 4개를 구상하고 이를 각각 제공.
- 8GB의 db서버를 4명의 유저가 사용
- 과연 1번 방법이 빠르다고 보장할 수 있을까??
- 빠르다 해도 1번 방법은 4명의 사용자 밖에 못받는다.
제가 생각한것이 맞을까요? 만약 그렇다면 성능을 개선하기 위해선 어떤 부분을 개선할 수 있을까요?
현재는 DB서버를 한대 두고 유저가 쿼리를 요청할때 마다 커넥션을 연결하고 끊는 방식으로 하고 있습니다.
→ 커넥션풀을 사용하려 하였지만, use database를 mysql2/promise
에서 지원하지 않아 실패하였습니다.
멘토님 답변
- 컨테이너를 나누어 관리하는게 더 이상적인건 맞지만 구현 난이도가 높을 것 같다.
- 여러 사용자가 하나의 db서버를 사용하는 것 자체가 너무 위험하다.
- 다른 사용자의 쿼리가 느려서 내가 쿼리를 못 날리는 상황이 발생하는 서비스는 안 될 것 같다.
- 일단 사용자마다 각각의 DB서버를 가져야 할 것 같다.