Skip to content

저장소 서비스

쿨다운 및 노출 추적을 위한 영속성 레이어입니다.

저장소 타입

저장소목적
NudgeCooldownStorage마지막 노출 타임스탬프
NudgeExposureLogStorage노출 히스토리 로그
EventLogStorage이벤트 추적 히스토리

Web (localStorage)

typescript
const coordinator = startCoordinator({
  cooldownStorage: new NudgeCooldownStorage({
    storage: localStorage,
  }),
  exposureStorage: new NudgeExposureLogStorage({
    storage: localStorage,
  }),
});

React Native (MMKV)

typescript
import { MMKV } from 'react-native-mmkv';

const storage = new MMKV();

class MMKVStorageAdapter {
  get(key) {
    const value = storage.getString(key);
    return value ? JSON.parse(value) : undefined;
  }
  set(key, value) {
    storage.set(key, JSON.stringify(value));
  }
  delete(key) {
    storage.delete(key);
  }
}

const mmkvStorage = new MMKVStorageAdapter();

const coordinator = startCoordinator({
  cooldownStorage: new NudgeCooldownStorage({ storage: mmkvStorage }),
  exposureStorage: new NudgeExposureLogStorage({ storage: mmkvStorage }),
});

인메모리 (테스트용)

typescript
const coordinator = startCoordinator({
  cooldownStorage: new NudgeCooldownStorage(),
  exposureStorage: new NudgeExposureLogStorage(),
});

커스텀 저장소

백엔드 동기화를 위한 IKeyValueStorage 구현:

typescript
class BackendStorage implements IKeyValueStorage {
  async get<T>(key: string): Promise<T | undefined> {
    const response = await fetch(`/api/storage/${key}`);
    return response.ok ? response.json() : undefined;
  }

  async set<T>(key: string, value: T): Promise<void> {
    await fetch(`/api/storage/${key}`, {
      method: 'POST',
      body: JSON.stringify(value),
    });
  }

  async delete(key: string): Promise<void> {
    await fetch(`/api/storage/${key}`, { method: 'DELETE' });
  }
}

const coordinator = startCoordinator({
  cooldownStorage: new NudgeCooldownStorage({
    storage: new BackendStorage(),
  }),
});

저장소 선택

영구 저장 (localStorage/MMKV): 앱 재시작 후에도 유지

typescript
cooldownStorage: new NudgeCooldownStorage({ storage: localStorage });

세션 범위 (sessionStorage): 세션 종료 시 삭제

typescript
eventLogStorage: new EventLogStorage({ storage: sessionStorage });

다음 단계

Released under the MIT License.