크롬 익스텐션을 개발하면서 데이터는 로컬 스토리지에 저장했다. 데이터는 당연히 key-value 구조로 저장된다.
키 값은 {table}:{primaryKey} 와 같이 구성했다. 예를들면 student:INU201500000 와 같은 형태이다.
정말 간단히 table네임을 키값으로 두고 하나에 객체 구조로 저장해도 됐지만 최대한 동시 수정 상황을 피하고 싶었다.
// 간단한 구조
{
student: {
INU201500000: {...},
INU201500001: {...},
}
}
// 채택한 구조
{
student:INU201500000: {...},
student:INU201500001: {...},
}
이런 커스텀한 키 관리 규칙 때문에 따로 ORM 라이브러리를 쓰지 않았다. 그런데 이로인해 다른 스토리지를 사용해야할 때 문제가 생겼다.
문제를 재현해보자면 아래와 같다. 데이터를 가져오는 유틸코드를 작성해뒀다.
const getStudent = async (id) => {
const key = `student:${id}`
const results = await chrome.storage.local.get(key)
return results[key]
}
만약 로컬 스토리지가 아니라 세션 스토리지에서 동작이 필요하다면? 또는 로그인한 계정과 연동되는 chrome.storage.sync가 필요하다면? 또한 테스트코드에서 동작시키기 위해 크롬의 storage대신 메모리를 이용하고 싶다면?
따라서 storage를 교체할 수 있도록 간단하게 커스텀한 ORM이라도 만들어서 해결해야했다.
'trouble-shooting' 카테고리의 다른 글
python에서 모듈 import 할 때 헷갈린다면? (0) | 2025.02.09 |
---|---|
vue app 외부에서 메소드 호출하기 (3) | 2024.12.21 |
크롬 익스텐션 sendResponse 응답값 전달 안 되는 문제 (0) | 2024.12.06 |
크롬익스텐션 content_script의 world속성 (0) | 2024.12.05 |
Firestore를 Python에서 사용할때 주의할점 (0) | 2024.12.04 |