json을 기반으로 한 데이터 카드 모델과 enum.Enum을 활용한 데이터 타입 모델을 함께 구성하면 다음과 같이 만들 수 있습니다. 이 구조는 예: 문학관 콘텐츠 시스템(PoemTree)에서 시, 수필, 댓글, 메타정보 등을 저장할 때 사용할 수 있습니다.
✅ 1. Enum 기반 데이터 카드 타입 모델
from enum import Enum
class DataCardType(Enum):
CONTENT = "content" # 시, 수필 등 주요 콘텐츠
META = "meta" # 작성자, 날짜, 길이 등 메타정보
COMMENT = "comment" # 댓글 정보
RATING = "rating" # 평점 정보
HISTORY = "history" # 수정 내역
TAG = "tag" # 태그 목록
CONFIG = "config" # 설정 정보
INTERACTION = "interaction" # 사용자 반응 (좋아요, 즐겨찾기 등)
STAT = "stat" # 통계 정보 (조회수, 댓글 수 등)
MULTIMEDIA = "multimedia" # 이미지, 오디오, 영상 등 첨부 자료
USER = "user" # 사용자 정보 카드
✅ 2. JSON 기반 데이터 카드 기본 구조
Python 객체로 JSON 직렬화가 가능한 구조이며, dataclasses와 함께 사용하면 깔끔하게 표현할 수 있습니다.
from dataclasses import dataclass, field, asdict
from datetime import datetime
from typing import List, Dict, Optional, Any
import json
import uuid
@dataclass
class DataCard:
id: str
card_type: DataCardType
data: Dict[str, Any]
created_at: str = field(default_factory=lambda: datetime.utcnow().isoformat())
updated_at: Optional[str] = None
metadata: Dict[str, Any] = field(default_factory=dict)
def to_json(self) -> str:
# Enum은 value로 변환해서 JSON 직렬화
dict_data = asdict(self)
dict_data["card_type"] = self.card_type.value
return json.dumps(dict_data, ensure_ascii=False, indent=2)
@staticmethod
def from_json(json_str: str) -> 'DataCard':
obj = json.loads(json_str)
return DataCard(
id=obj["id"],
card_type=DataCardType(obj["card_type"]),
data=obj["data"],
created_at=obj.get("created_at", datetime.utcnow().isoformat()),
updated_at=obj.get("updated_at"),
metadata=obj.get("metadata", {})
)
✅ 3. 예제: 콘텐츠 카드 생성 및 JSON 출력
# 시 콘텐츠 카드 예시 생성
poetry_card = DataCard(
id=str(uuid.uuid4()),
card_type=DataCardType.CONTENT,
data={
"title": "그대 떠난 자리에",
"author": "이상",
"content": "바람이 불어오는 자리에 당신의 이름이 있었습니다."
},
metadata={
"language": "ko",
"length": 34
}
)
# JSON 출력
print(poetry_card.to_json())
✅ 4. 활용 포인트
- DB 저장 시에는 card_type, data, created_at 필드만 JSON 컬럼 하나로 저장해도 충분합니다.
- 데이터 필터링 시에는 card_type을 기준으로 분류하면 됩니다.
- 확장이 용이하며, 데이터 카드 자체를 API 응답 포맷으로도 바로 사용할 수 있습니다.
필요하다면 이 구조를 기반으로 Flask/FastAPI CRUD 연동, SQLAlchemy JSON 필드 매핑, 검색 인덱싱 전략까지도 설계해드릴 수 있습니다. 요청 주세요!
'데이터 카드 자료구조' 카테고리의 다른 글
[데이터 카드 자료구조] 데이터카드, 메타카드, 히스토리카드, 통계카드 등 다양한 카드 타입을 카드 콜렉션(Card Collection) (0) | 2025.04.14 |
---|---|
[데이터 카드 자료구조] 통계 분석, 데이터 공유, 메타데이터 관리를 위한 데이터 요약 카드 (0) | 2025.04.14 |
[데이터 카드 자료구조] 메타클래스 기반 사용자 정의 예외 클래스 (1) | 2025.01.08 |
[데이터 카드 자료구조] 푸터 카드를 생성하기 위한 메타클래스 (1) | 2025.01.07 |
[데이터 카드 자료구조] 헤더 카드를 생성하기 위한 메타클래스 (0) | 2025.01.07 |