0.1.0 버전 부터 공유 기능을 추가함으로써 Sub Thread도 DB로부터 공유 데이터를 갖고오기 위해 DB에 접근을 하기 시작합니다.
MySQL, MariaDB 버전은 아무런 문제가 없으나 내부 데이터베이스인 SQLite 버전에서는 문제가 생기기 시작합니다. 다른 쓰레드로 부터 동시 접근 과정에서 SQLite의 데이터는 db파일로 관리되기 때문에 결국 한쪽 쓰레드는 데이터를 받지만, 받는 동안 파일이 잠기게 되 다른 쓰레드가 접근을 못하게 되고 이로 인해 DJango 자체 내에서 Table Lock Error가 발생하게 됩니다. 이걸 조금이나마 해결할 수 있는 솔루션이 필요해 보입니다.
실제 Production에서는 Sub Thread의 DB Access간격이 1일 이상이기 때문에 충돌 가능성은 적지만 TDD를 진행할 때 만료된 데이터를 확인하기 위해 DB Access 간격을 0.5sec로 설정하고 테스트를 합니다. 이러한 짧은 간격으로 인해 DB 접근 관련 에러가 발생하고 있습니다.
InternalDatabaseConcurrencyManager
특징
SQLite 접근 시 순차적으로 접근할 수 있게 Access 조절해주는 클래스 입니다. 주로 Decorator Method로 작동합니다. 하지만 MySQL/MariaDB에서는 해당 기능이 작동되지는 않고 무시됩니다.