본문 바로가기

데이터베이스/Mongo DB

MongoDB와 Django 연결하기

이번 프로젝트에서 우리 팀은 MongoDB와 Django를 이용하여 웹페이지를 구축하기로 하였습니다. 이를 위해 Django프로젝트를 생성 할 때 기본으로 설정이 되어있는 SQLite3가 아닌 MongoDB를 연결을 해야 했기 때문에 MongoDB와 Django의 연결 방법에 대해서 글을 남깁니다.

 

장고에 대한 아무런 사전 지식이 없는 상태에서 DB를 정해  MongoDB를 사용하기로 하여 MongoDB를 연결했지만 장고와 가장 궁합이 좋은 DB는 PostgreSQL이라고 합니다. 혹시 MongoDB를 사용해야 하는 이유가 있는것이 아니라면 PostgreSQL이 더 좋은 선택이 될 수 있을 것 같습니다.

MongoDB의 공식 문서에서는 Django와 MongoDB를 연결하는 방법을 3가지 소개하고 있습니다.

 

  • 첫번째 방법으로는 PyMongo를 이용하는 방법입니다.

PyMongo는 MongoDB와 Django를 상호작용하게 하는 표준드라이버 입니다. Python으로 몽고DB를 사용할때 가장 선호되는 공식적인 방법입니다. PyMongo는 검색,삭제, 업데이트 및 삽입과 같은 모든 데이터베이스 작업을 수행하는 기능을 제공합니다. Pymongo는 pip 명령을 사용하여 빠르게 설치가 가능하고 PyPl과 함께 사용할 수 있습니다.

  • 두번째 방법으로는 MongoEngine를 이용하는 방법입니다.

MongoEngine은 Python Object-Document-Mapper입니다. 관계형 데이터베이스의 Object-Relational-Mapper와 유사합니다. MongoEngine은 배우고 사용하기 쉬운 declarative API가 있습니다.

  • 세번째 방법으로는 Djongo를 이용하는 방법입니다.

SQL과 같은 관계형 데이터베이스를 사용중이고, MongoDB로 마이그레이션(migration)하려는 경우 Djongo를 사용할 수 있습니다. Djongo는 Django ORM을 변경하지 않고 모든 SQL 쿼리를 MongoDB 구문 퀴리로 변환합니다.

이 세가지 방법중에 제가 선택한 방법은 세번째 방법입니다.

 

세번째 방법을 선택한 이유는,

첫번째 방법은 표준적인 방법이라고는 하지만 방법이 복잡해보여서 제외했습니다.

두번째 방법은 MongoEngine이 Django의 default ORM과 비슷하기는 하지만 다른 부분이 있어 나중에 헷갈려 문제가 생길 수 있을 것이라는 생각입니다.

 

따라서 저는 세번째 방법인 Djongo를 사용하여 Django와 MongoDB를 연결하는 방법을 소개하겠습니다.

Djongo는 개발자 긴 쿼리를 작성할 필요가 없다는 점에서 PyMongo보다 개선되었습니다. Python 객체를 MongoDV문서, 즉 ODM(Dbject Document Mapping)에 매핑합니다. Djongo는 깨끗한 데이터만 데이터베이스에 입력되도록합니다. Djongo로 무결성 검사, 유효성 검사 적용 등을 수행하면 기존 Django ORM을 수정할 필요가 없습니다.

djongo를 설치합니다:

pip install djongo

그 다음으로 Django 프로젝트의 setting.py를 엽니다. DATABASES 항목을 찾아 이를 다음과 같이 수정합니다.

밑의 코드는 일반적으로 Django프로젝트를 생성했을 때의 DATABASES 항목의 모습입니다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

위의 DATABASES를 지워주고 다음의 코드로 대체합니다.

DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'ENFORCE_SCHEMA': True,
        'LOGGING': {
            'version': 1,
            'loggers': {
                'djongo': {
                    'level': 'DEBUG',
                    'propogate': False,                        
                }
            },
         },
        'NAME': '원하는 데이터베이스의 이름을 넣어주세요',
        'CLIENT': {
            'host': '127.0.0.1',
            'port': 27017,
            'username': '몽고DB 사용자 계정을 넣어주세요',
            'password': "몽고DB 사용자 비밀번호 넣어주세요",
            'authSource': 'admin',
            'authMechanism': 'SCRAM-SHA-1'
        }
    }
}

이렇게 연결이 끝나면 Django를 사용하여 MongoDB에 데이터가 들어가는 것을 확인할 수 있습니다.

import requests
from pymongo import MongoClient

db = client.my_db #my_db에 자신의 데이터베이스 이름을 넣어줍니다.


post = {
    "관측소 명" : "울산",
    "관측 시간" : "2021-07-07 15:00:00",
    "조위" : "61.0",
    "수온" : "21.5",
    "염분" : "30.3",
    "기온" : "23.5",
    "기압" : "1007.7",
    "풍향" : "272.0",
    "풍속" : "0.6",
    "돌풍" : "1.2"
}

posts = db.weather # weather가 내가 원하는 콜렉션 이름
post_id = posts.insert_one(post)

위의 코드를 이용하여 데이터를 3번 넣으면,

ROBO 3T를 통해 MongoDB에 데이터가 들어간 것을 확인한 모습입니다.

ROBO 3T를 통해 몽고DB에 데이터가 3번 들어간 모습을 볼 수 있습니다.