파이썬에서 도큐먼트 데이터베이스(Document Database)에 데이터를 저장하려면, JSON과 유사한 형태의 자료구조를 사용하는 것이 가장 일반적입니다. 도큐먼트 데이터베이스는 데이터를 문서(document) 형태로 저장하며, 각 문서는 키-값 쌍으로 이루어진 구조를 가집니다. 이 구조는 매우 유연하며, 일반적으로 MongoDBCouchDB 같은 도큐먼트 데이터베이스에서 사용됩니다.

파이썬에서는 dict 자료구조가 도큐먼트 데이터베이스의 문서와 동일한 형식을 가지며, 파이썬의 pymongo 라이브러리를 사용하면 쉽게 MongoDB와 같은 도큐먼트 데이터베이스에 데이터를 저장하고 관리할 수 있습니다.

1. 도큐먼트 데이터베이스에서의 자료구조 모델

도큐먼트 모델은 보통 다음과 같은 구조를 가집니다:

  • 문서(document): 하나의 레코드에 해당하며, 파이썬의 dict와 유사한 구조.
    • 예: { "name": "John", "age": 30, "skills": ["Python", "MongoDB"] }
  • 컬렉션(collection): 비슷한 타입의 문서들의 모음. SQL의 테이블과 유사.
  • 데이터베이스(database): 여러 컬렉션을 포함하는 단위.

각 문서는 고유의 ID 필드(_id)를 가지며, 이 필드를 기준으로 각 문서를 식별합니다.

2. 예제: 도큐먼트 데이터베이스 저장 모델

MongoDB를 사용한 기본 예제

아래 예제에서는 파이썬 pymongo 라이브러리를 사용해 MongoDB에 데이터를 저장하고 관리하는 예를 보여줍니다.

1. MongoDB 설치 및 PyMongo 설치

먼저 MongoDB가 설치되어 있어야 하며, PyMongo는 파이썬에서 MongoDB와 통신하기 위한 라이브러리입니다. 이를 설치하려면 다음 명령어를 사용하세요.

pip install pymongo

2. MongoDB 연결 및 문서 저장

다음은 MongoDB에 데이터를 저장하는 예제입니다. 우리는 이벤트 로그를 기록하는 데이터를 문서로 만들어 이를 MongoDB 컬렉션에 저장할 것입니다.

from pymongo import MongoClient
from datetime import datetime

# MongoDB 클라이언트 생성 및 데이터베이스 연결
client = MongoClient("mongodb://localhost:27017/")
db = client["event_logs_db"]  # 데이터베이스 선택
collection = db["event_logs"]  # 컬렉션 선택

# 이벤트 로그 문서 생성
event_log = {
    "event_type": "ERROR",
    "description": "Database connection failed",
    "timestamp": datetime.now(),
    "metadata": {"server": "db1", "retry_attempts": 3}
}

# 문서 저장
inserted_id = collection.insert_one(event_log).inserted_id
print(f"새로 추가된 문서의 ID: {inserted_id}")

3. 여러 문서 저장 및 조회

MongoDB는 여러 문서를 한 번에 저장할 수 있으며, 간단한 조회 쿼리도 가능합니다.

# 여러 개의 이벤트 로그 추가
event_logs = [
    {
        "event_type": "WARNING",
        "description": "High memory usage detected",
        "timestamp": datetime.now(),
        "metadata": {"memory_usage": "95%", "threshold": "90%"}
    },
    {
        "event_type": "INFO",
        "description": "Backup completed successfully",
        "timestamp": datetime.now(),
        "metadata": {"duration": "15 minutes", "backup_size": "1GB"}
    }
]

# 여러 문서 한 번에 삽입
result = collection.insert_many(event_logs)
print(f"추가된 문서들의 ID: {result.inserted_ids}")

# 모든 문서 조회
for log in collection.find():
    print(log)

3. 응용: 도큐먼트 데이터베이스 모델 설계

데이터 카드와 같은 개념을 도큐먼트 데이터베이스에 응용할 수 있습니다. 각 데이터 카드는 하나의 문서로 저장되며, name, description, attributes 등의 필드로 구조화할 수 있습니다.

# 데이터 카드 문서 예시
data_card = {
    "card_id": 1,
    "name": "Customer 1",
    "description": "First customer record",
    "created_at": datetime.now(),
    "attributes": {
        "age": 25,
        "location": "New York",
        "purchases": ["laptop", "smartphone"]
    }
}

# 데이터 카드 문서 저장
inserted_id = collection.insert_one(data_card).inserted_id
print(f"데이터 카드 저장 ID: {inserted_id}")

# 데이터 카드 조회 (card_id로 검색)
result_card = collection.find_one({"card_id": 1})
print(f"조회된 데이터 카드: {result_card}")

4. 데이터베이스에서 데이터 업데이트 및 삭제

문서를 업데이트하거나 삭제하는 것도 간단하게 할 수 있습니다.

문서 업데이트:

# card_id가 1인 데이터 카드의 age 속성 업데이트
collection.update_one({"card_id": 1}, {"$set": {"attributes.age": 26}})
print("데이터 카드의 나이가 업데이트되었습니다.")

문서 삭제:

# 특정 문서 삭제 (card_id가 1인 문서)
collection.delete_one({"card_id": 1})
print("card_id가 1인 문서가 삭제되었습니다.")

5. 예제 요약

  • MongoDB와 같은 도큐먼트 데이터베이스에서는 JSON과 유사한 파이썬 dict 자료구조를 사용하여 데이터를 저장할 수 있습니다.
  • 파이썬에서 pymongo 라이브러리를 이용해 MongoDB와 연결하여 데이터를 저장, 조회, 수정, 삭제할 수 있습니다.
  • 데이터 카드를 도큐먼트로 저장하는 구조를 만들어 사용자 데이터, 이벤트 로그 등 다양한 정보를 유연하게 관리할 수 있습니다.

이러한 도큐먼트 데이터베이스 구조는 유연성이 뛰어나고, 정해진 스키마가 없어 데이터의 변화에 매우 유연하게 대응할 수 있습니다. JSON 구조를 기반으로 다양한 데이터를 저장하고 관리할 수 있어 많은 현대 애플리케이션에서 활용됩니다.

+ Recent posts