사용자 액션 히스토리를 저장하고 관리하기 위한 데이터 카드 자료구조를 만들어, 사용자 활동을 체계적으로 기록하고 조회할 수 있는 구조를 설계할 수 있습니다. 데이터 카드는 각 사용자 활동을 하나의 카드로 저장하며, 각각의 액션 카드에는 사용자 ID, 액션 유형, 타임스탬프, 메타데이터 등의 필수 정보를 포함합니다. 이를 통해 사용자 액션 데이터를 효율적으로 관리하고 분석할 수 있습니다.

사용자 액션 히스토리 데이터 카드 모델 설명

  1. 데이터 카드 구조:

    • user_id: 사용자 식별 ID
    • action_type: 사용자가 수행한 동작의 유형 (예: 로그인, 로그아웃, 페이지 조회 등)
    • timestamp: 액션이 발생한 시간
    • metadata: 해당 액션에 대한 추가 정보 (예: 페이지 URL, 디바이스 정보, 위치 등)
  2. 데이터 카드 관리 클래스:

    • 데이터를 카드 형식으로 관리하는 클래스입니다.
    • 각 카드에 필요한 필드를 포함하고, 액션 데이터를 필터링하거나 정렬하여 쉽게 조회할 수 있도록 합니다.
  3. 조회 및 필터 기능:

    • 사용자의 특정 시간대나 액션 유형을 기준으로 히스토리를 필터링하는 메서드를 추가하여 유연한 조회를 지원합니다.

예제 코드: 사용자 액션 히스토리 저장을 위한 데이터 카드 구조

다음은 사용자 액션 히스토리를 카드로 관리하는 UserActionHistory 클래스를 정의하고, 액션 추가와 필터링 기능을 구현한 예제입니다.

from datetime import datetime
from typing import List, Dict

# 사용자 액션 히스토리 데이터 카드 모델 정의
class UserActionHistory(list):
    def add_action(self, user_id: str, action_type: str, timestamp: str, metadata: Dict = None):
        # 액션 카드 생성
        action_card = {
            "user_id": user_id,
            "action_type": action_type,
            "timestamp": datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S"),
            "metadata": metadata or {}
        }
        self.append(action_card)  # 리스트에 액션 카드 추가

    def filter_by_user(self, user_id: str) -> List[Dict]:
        # 특정 사용자의 액션만 필터링하여 반환
        return [action for action in self if action["user_id"] == user_id]

    def filter_by_action_type(self, action_type: str) -> List[Dict]:
        # 특정 액션 유형에 해당하는 카드만 필터링하여 반환
        return [action for action in self if action["action_type"] == action_type]

    def filter_by_time_range(self, start_time: str, end_time: str) -> List[Dict]:
        # 특정 시간 범위 내의 카드만 반환
        start = datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S")
        end = datetime.strptime(end_time, "%Y-%m-%d %H:%M:%S")
        return [action for action in self if start <= action["timestamp"] <= end]

# 사용자 액션 히스토리 인스턴스 생성
user_actions = UserActionHistory()

# 액션 추가
user_actions.add_action("user001", "login", "2024-10-21 10:15:00", {"device": "mobile", "location": "Seoul"})
user_actions.add_action("user002", "view_page", "2024-10-21 11:00:00", {"page_url": "/home"})
user_actions.add_action("user001", "logout", "2024-10-21 11:30:00", {"device": "mobile"})
user_actions.add_action("user003", "login", "2024-10-22 09:00:00", {"device": "desktop", "location": "Busan"})

# 필터링 예제: 특정 사용자의 모든 액션
user1_actions = user_actions.filter_by_user("user001")
print("Actions for user001:", user1_actions)

# 필터링 예제: 특정 액션 유형 (페이지 조회)
view_page_actions = user_actions.filter_by_action_type("view_page")
print("View Page Actions:", view_page_actions)

# 필터링 예제: 특정 시간 범위 내 액션
time_filtered_actions = user_actions.filter_by_time_range("2024-10-21 09:00:00", "2024-10-21 12:00:00")
print("Actions between 2024-10-21 09:00:00 and 2024-10-21 12:00:00:", time_filtered_actions)

출력 예시

Actions for user001: [
    {'user_id': 'user001', 'action_type': 'login', 'timestamp': datetime.datetime(2024, 10, 21, 10, 15), 'metadata': {'device': 'mobile', 'location': 'Seoul'}},
    {'user_id': 'user001', 'action_type': 'logout', 'timestamp': datetime.datetime(2024, 10, 21, 11, 30), 'metadata': {'device': 'mobile'}}
]

View Page Actions: [
    {'user_id': 'user002', 'action_type': 'view_page', 'timestamp': datetime.datetime(2024, 10, 21, 11, 0), 'metadata': {'page_url': '/home'}}
]

Actions between 2024-10-21 09:00:00 and 2024-10-21 12:00:00: [
    {'user_id': 'user001', 'action_type': 'login', 'timestamp': datetime.datetime(2024, 10, 21, 10, 15), 'metadata': {'device': 'mobile', 'location': 'Seoul'}},
    {'user_id': 'user002', 'action_type': 'view_page', 'timestamp': datetime.datetime(2024, 10, 21, 11, 0), 'metadata': {'page_url': '/home'}},
    {'user_id': 'user001', 'action_type': 'logout', 'timestamp': datetime.datetime(2024, 10, 21, 11, 30), 'metadata': {'device': 'mobile'}}
]

코드 설명

  • UserActionHistory 클래스: list를 상속하여 사용자 액션 히스토리 카드를 저장하고 관리하는 클래스를 생성합니다.
  • add_action 메서드: 사용자 액션 정보를 포함하는 카드를 생성하고 리스트에 추가합니다.
  • filter_by_user 메서드: 특정 user_id에 해당하는 모든 액션 카드를 필터링합니다.
  • filter_by_action_type 메서드: 특정 action_type에 해당하는 모든 액션 카드를 필터링합니다.
  • filter_by_time_range 메서드: 지정된 시간 범위 내에 발생한 모든 액션 카드를 필터링합니다.

이 구조의 장점

  • 필터링 및 검색 기능 강화: 사용자별, 액션 유형별, 시간대별로 액션을 조회할 수 있어 사용자 행동을 유연하게 분석할 수 있습니다.
  • 확장성: 새로운 필터 조건이 필요할 때 쉽게 추가할 수 있어 확장성이 뛰어납니다.
  • 유연한 관리: metadata 필드를 통해 액션별 추가 정보를 쉽게 저장할 수 있습니다.

이 구조는 사용자 행동 분석, 웹사이트 방문 기록 분석, 사용자 활동 로그 관리 등 여러 상황에 적용할 수 있는 유연한 데이터 카드 모델을 제공합니다.

+ Recent posts