반응형
Django 프로젝트에서 MongoDB를 사용하기 위해 `djongo` 를 설치하려고 했을 때 발생한 문제와 그 해결방법에 대해 알아보자.
프로젝트의 초기 toml 파일은 다음과 같았다.
[tool.poetry.dependencies]
python = "^3.10"
djangorestframework-simplejwt = "^5.2.2"
mysqlclient = "<2.2.*"
drf-yasg = "^1.21.5"
django = "<4.2.*"
djangorestframework = "<3.14.*"
gunicorn = "^20.1.0"
boto3 = "^1.26.129"
django-cors-headers = "^3.14.0"
drf-user-activity-tracker = "^1.0.1"
drf-api-logger = "^1.1.12"
pytz = "^2023.3"
pillow = "^9.5.0"
django-filter = "^23.2"
coreapi = "^2.3.3"
factory-boy = "^3.3.0"
cryptography = "^41.0.3"
이 상태에서 djongo
설치를 시도했다.
❯ poetry add djongo
Using version ^1.3.6 for djongo
Updating dependencies
Resolving dependencies... (2.4s)
Writing lock file
Package operations: 4 installs, 1 update, 0 removals
• Updating sqlparse (0.4.4 -> 0.2.4)
• Installing dnspython (2.4.2)
• Installing dataclasses (0.6)
• Installing pymongo (4.5.0)
• Installing djongo (1.3.6)
설치를 완료하고 연결을 위해 로컬 mongodb를 생성하고, 생성된 정보를 나의 development.py
의 데이터베이스 설정과 연결해주었다.
# 개발 환경에서의 데이터베이스 설정
if "test" not in sys.argv:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": secrets["LOCAL_MYSQL_NAME"],
"USER": secrets["LOCAL_MYSQL_USER"],
"PASSWORD": secrets["LOCAL_MYSQL_PASSWORD"],
"HOST": secrets["LOCAL_MYSQL_HOST"],
"PORT": secrets["LOCAL_MYSQL_PORT"],
},
"mongodb": {
"ENGINE": "djongo",
"NAME": secrets["LOCAL_MONGODB_NAME"],
"CLIENT": {
"host": "localhost",
"port": 27017,
"username": secrets["LOCAL_MONGODB_USER"],
"password": secrets["LOCAL_MONGODB_PASSWORD"],
"authSource": "admin",
"authMechanism": "SCRAM-SHA-256",
},
},
}
그리고 나서 Django 서버를 재실행 해보았더니 다음과 같은 에러를 마주했다.
version_info, _mysql.version_info, _mysql.__file__
NameError: name '_mysql' is not defined
_mysql
모듈이 정의되지 않았다는 오류가 발생했는데..
찾아보니 mysqlclient
의 버전 또는 호환성 문제로 보였다.
현재 나의 프로젝트에서는 다음과 같은 mysqlclient
버전을 사용하고 있었다.
mysqlclient = "<2.2.*"
해당 라이브러리에 버전이 낮아서 발생하는 것 같아서 다음과 같은 명령어로 mysqlclient
최신 버전으로의 업데이트를 시도했다.
❯ poetry add mysqlclient@latest
Using version ^2.2.0 for mysqlclient
Updating dependencies
Resolving dependencies... (0.5s)
Writing lock file
Package operations: 0 installs, 1 update, 0 removals
• Updating mysqlclient (2.1.1 -> 2.2.0): Failed
ChefBuildError
하지만 mysqlclient
또한 업데이트에 실패했다.
해당 업데이트에 필요한 라이브러리와 헤더 파일이 없었기 때문이었다.
다음과 같은 명령어로 필요 라이브러리와 헤더 파일을 설치해주었다.
❯ brew install mysql
이후 mysqlclient
업데이트를 재시도하니 성공했다!
❯ poetry add mysqlclient@latest
Using version ^2.2.0 for mysqlclient
Updating dependencies
Resolving dependencies... (0.2s)
Package operations: 0 installs, 1 update, 0 removals
• Updating mysqlclient (2.1.1 -> 2.2.0)
그리고 나서 나의 최종 pyproject.toml
파일은 다음과 같이 변경되었다.
[tool.poetry.dependencies]
python = "^3.10"
djangorestframework-simplejwt = "^5.2.2"
mysqlclient = "^2.2.0"
drf-yasg = "^1.21.5"
django = "<4.2.*"
djangorestframework = "<3.14.*"
gunicorn = "^20.1.0"
boto3 = "^1.26.129"
django-cors-headers = "^3.14.0"
drf-user-activity-tracker = "^1.0.1"
drf-api-logger = "^1.1.12"
pytz = "^2023.3"
pillow = "^9.5.0"
django-filter = "^23.2"
coreapi = "^2.3.3"
factory-boy = "^3.3.0"
cryptography = "^41.0.3"
djongo = "^1.3.6"
만약 프로젝트에서 MongoDB만 사용한다면 겪지 않을 문제이지만, 이미 MySQL을 프로젝트에서 연결해서 사용중이고 DB를 추가하기 위해서 djongo
설치 한다고 했을 때 그 과정에서 발생할 수 있는 문제점에 대해서 알아보았다.
반응형
'🌈 프로그래밍 > Django' 카테고리의 다른 글
테스트 자동화 하기 (0) | 2024.04.29 |
---|---|
unmanaged table에 대한 django test 하는 방법 (0) | 2023.09.23 |
[ Django ] select_related()와 prefetch_related() (0) | 2023.02.20 |
Django Session Cookie Age 알아보고 커스텀하기 (0) | 2023.02.20 |
[ django ] AWS lambda raw sql 에서 django raw sql로 TypeError: not enough arguments for format string 에러 (2) | 2022.11.30 |