반응형
DB replica 를 사용할 때 읽기전용으로 replica를 사용하고, 쓰기전용으로 main(master) DB를 사용하도록 하는설정
replica_1, replica_2 를 settings.py의 DATABSES 에 선언했다고 가정
import random
class DBRouter(object):
def db_for_read(self, model, **hints):
return random.choice(["replica_1", "replica_2"])
def db_for_write(self, model, **hints):
return "default"
def allow_relation(self, obj1, obj2, **hints):
return True
def allow_migrate(self, db, app_label, model_name=None, **hints):
return True
settings.py 에서
DATABSE_ROUTERS = ['path.to.DBRouter']
테스트할 때 replica_1, replica_2 의 데이터 싱크가 되지 않으므로 BaseTest 에서 아래와 같이 설정
from django.db import databases
class BaseTestCase(TransactionTestCase):
databases = ["default", "replica_1", "replica_2"]
@classmethod
def setUpClass(cls):
connections["replica_1"]._orig_cursor = connections["replica_1"].cursor
connections["replica_1"].cursor = connections["default"].cursor
connections["replica_2"]._orig_cursor = connections["replica_2"].cursor
connections["replica_2"].cursor = connections["default"].cursor
super().setUpClass()
@classmethod
def tearDownClass(cls):
connections["replica_1"].cursor = connections["replica_1"]._orig_cursor
connections["replica_2"].cursor = connections["replica_2"]._orig_cursor
super().tearDownClass()
....
반응형
'개발 이야기 > Django' 카테고리의 다른 글
Django 에서 GROUP_CONCAT 커스텀 사용 시 order_by, separator 추가하기 (0) | 2024.02.27 |
---|---|
Gunicorn 에서 print() output 이 로깅 되지 않을 때 해결법 (0) | 2023.11.22 |
uwsgi processes, threads 값을 조정하여 서버 성능 향상하기 (0) | 2021.01.13 |
Request with Signature, Nonce by Using API Key & Secret pair & Validate Request (0) | 2020.12.30 |
Django Custom User Model & Custom Authentication (0) | 2020.12.30 |
댓글