본문 바로가기

trouble-shooting

데이터 관리 인터페이스 회고

크롬 익스텐션을 개발하면서 데이터는 로컬 스토리지에 저장했다. 데이터는 당연히 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이라도 만들어서 해결해야했다.