KV 저장소 활용하기#
PyQQQ SDK의 KVStore
모듈은 간단한 키-값 저장소 기능을 제공합니다. 이 모듈을 통해 다양한 데이터 타입을 저장하고 불러올 수 있으며 데이터의 지속성을 보장합니다.
기본 사용법#
키-값 저장과 조회#
set
과 get
메서드는 데이터를 저장하고 읽는데 가장 기본적이며 핵심적인 역할을 합니다. 다양한 데이터 타입을 저장하고 읽어보면서 배워봅시다.
from pyqqq.utils.kvstore import KVStore
# KVStore 인스턴스 생성
store = KVStore()
# 1. 문자열 (str) 타입 저장 및 조회
store.set("greeting_message", "Hello, World!")
print(store.get("greeting_message")) # 출력: Hello, World!
# 2. 부울 (bool) 타입 저장 및 조회
store.set("is_user_active", True)
store.set("has_access", False)
print(store.get("is_user_active")) # 출력: True
print(store.get("has_access")) # 출력: False
# 3. 정수 (int) 타입 저장 및 조회
store.set("total_users", 42)
print(store.get("total_users")) # 출력: 42
# 4. 실수 (float) 타입 저장 및 조회
store.set("pi_value", 3.14159)
print(store.get("pi_value")) # 출력: 3.14159
# 5. 딕셔너리 (dict) 타입 저장 및 조회
store.set("user_profile", {"name": "Alice", "age": 30})
print(store.get("user_profile")) # 출력: {'name': 'Alice', 'age': 30}
# 6. 리스트 (list) 타입 저장 및 조회
store.set("prime_numbers", [2, 3, 5, 7, 11])
print(store.get("prime_numbers")) # 출력: [2, 3, 5, 7, 11]
# 7. None 타입 저장 및 조회
store.set("optional_field", None)
print(store.get("optional_field")) # 출력: None
# 추가 예제: 복합 데이터 구조
store.set("dashboard_stats", {
"total_sales": 1500.75,
"is_goal_met": True,
"daily_visits": [120, 95, 130, 110],
"metadata": {"region": "North America", "manager": "Bob"}
})
print(store.get("dashboard_stats"))
# 출력: {'total_sales': 1500.75, 'is_goal_met': True, 'daily_visits': [120, 95, 130, 110], 'metadata': {'region': 'North America', 'manager': 'Bob'}}
데이터 삭제#
더 이상 사용하지 않는 데이터는 delete
메소드로 삭제할 수 있습니다.
from pyqqq.utils.kvstore import KVStore
# KVStore 인스턴스 생성
store = KVStore()
# 1. 키-값 저장
store.set("username", "john_doe")
store.set("is_logged_in", True)
store.set("user_profile", {"name": "Alice", "age": 30})
# 2. 데이터 조회
print(store.get("username")) # 출력: john_doe
print(store.get("is_logged_in")) # 출력: True
print(store.get("user_profile")) # 출력: {'name': 'Alice', 'age': 30}
# 3. 데이터 삭제
store.delete("username") # 'username' 키 삭제
store.delete("non_existing_key") # 존재하지 않는 키 삭제 시도 (에러 없음)
# 4. 삭제 후 데이터 확인
print(store.get("username")) # 출력: None (삭제됨)
print(store.get("is_logged_in")) # 출력: True (삭제되지 않음)
print(store.get("user_profile")) # 출력: {'name': 'Alice', 'age': 30} (삭제되지 않음)
# 5. 여러 키 삭제
store.set("temp_key1", "temp_value1")
store.set("temp_key2", "temp_value2")
store.clear() # 여러 키 삭제
print(store.get("temp_key1")) # 출력: None
print(store.get("temp_key2")) # 출력: None
Important
clear
메소드는 해당 KVStore 인스턴스의 모든 키를 삭제합니다.
컨텍스트를 이용한 데이터 분리#
KVStore
의 컨텍스트 개념을 통해 저장소를 논리적으로 분리시켜 사용할 수 있습니다. 주로, 저장하고자 하는 데이터 성격(유형)에 맞춰 저장소를 구분하여 사용합니다. 코스피 거래 데이터를 KVStore("kospi")
에 저장하고, 코스닥 거래 데이터는 KVStore("kosdaq")
로 구분하여 각각 독립적으로 운용할 수 있습니다.
from pyqqq.utils.kvstore import KVStore
# 1. 기본 KVStore 생성 (컨텍스트 없이)
global_store = KVStore()
global_store.set("app_name", "MyApp")
print(global_store.get("app_name")) # 출력: MyApp
# 2. context_name을 이용한 KVStore 생성
user_store = KVStore(context_name="user_data")
admin_store = KVStore(context_name="admin_data")
# 3. 각 컨텍스트에 데이터 저장
user_store.set("username", "john_doe")
user_store.set("email", "john.doe@example.com")
admin_store.set("username", "admin_user")
admin_store.set("permissions", ["read", "write", "delete"])
# 4. 컨텍스트별 데이터 조회
print(user_store.get("username")) # 출력: john_doe
print(user_store.get("email")) # 출력: john.doe@example.com
print(admin_store.get("username")) # 출력: admin_user
print(admin_store.get("permissions")) # 출력: ['read', 'write', 'delete']
# 5. 다른 컨텍스트 간 데이터 격리 확인
print(global_store.get("username")) # 출력: None (다른 컨텍스트의 데이터)
print(user_store.get("permissions")) # 출력: None (admin_data 컨텍스트 데이터)
# 6. 데이터 삭제 (특정 컨텍스트)
user_store.delete("email")
print(user_store.get("email")) # 출력: None (삭제됨)
print(admin_store.get("username")) # 출력: admin_user (영향 없음)
# 7. 컨텍스트 활용 예제: 사용자별 설정 관리
alice_store = KVStore(context_name="user:alice")
bob_store = KVStore(context_name="user:bob")
alice_store.set("theme", "dark")
bob_store.set("theme", "light")
print(alice_store.get("theme")) # 출력: dark
print(bob_store.get("theme")) # 출력: light
활용 사례#
KVStore를 사용하여 환경변수 대체하기#
import os
import dotenv
from pyqqq.utils.kvstore import KVStore
dotenv.load_dotenv()
store = KVStore("misc")
# 1. 환경변수 읽기
bot_token = os.getenv("TELEGRAM_API_TOKEN")
print(bot_token)
# 2. 환경변수를 KVStore에 저장
if store.get("TELEGRAM_API_TOKEN") === None:
store.set("TELEGRAM_API_TOKEN", bot_token)
# 3. 앞으로 bot_token 읽기
bot_token = store.get("TELEGRAM_API_TOKEN") or os.getenv("TELEGRAM_API_TOKEN")
print(bot_token)