지금으로부터 몇 일 전에 Vercel의 storage 관련 발표가 있다는 메일을 받았다.
기존엔 config 정도만 저장할 수 있게 해줬는데
KV(Redis), Postgres, Blob(Object storage) 까지 자체적으로 지원하려는 것 같다.
KV: Upstash의 Redis를 백엔드로 두고있음
Postgres: Neon의 Postgres를 백엔드로 두고있음
Blob: Cloudfront의 R2를 백엔드로 두고있음
Cloudfront의 R2의 이름은 AWS의 S3보다 우위를 점하기위한 이유로 지어졌다고 한다...
기존에도 개인 사용자에게는 Hobby 플랜이라는 명목으로 그냥 쓸 수 있게 풀어놓았는데 이번에도 그런 듯 보인다.
이 부분에서는 제공되는 가이드를 토대로 가볍게 훑고 넘어간다.
Next.js와 Svelte를 예시로 작성된 가이드가 제공되고있다.
여기까지만 보면 패키지가 제공되고, 프론트엔드 개발자들이 가져다 쓰면 된다. 정도만 알 수 있긴한데
redis-cli --tls -u redis://****@inviting-horse-31835.kv.vercel-storage.com:31835
이런식으로 redis 클라이언트로 직접 접속할 수 있다.
서드파티 애플리케이션으로 관리하거나 백엔드 서비스에 붙여서 쓰면 될 것 같다.
REST 방식으로{Key : Value}
를 SET 할 수 있어보이는데..
POST가 아닌 GET 요청을 날려줘야한다.
Header의 Bearer 토큰이 노출되기 때문에 웹페이지에서 사용하게된다면 사용자가 임의로 특정 키에 대한 값을 변경할 가능성이 열려있다.
왠만하면 서버사이드에서 처리하는게 좋겠다.
그래도 사용해야한다면 html 페이지에서 요청할 수 있는 예제는 여기에서 확인
Vercel의 KV는 Upstash의 Redis에 요청을 보내기위해 프록시 역할을 하고있는데
@upstash/upstash-redis는 대부분의 기능을 지원하는 반면
@vercel/kv는 scan 기능만 지원합니다.
@vercel/kv 패키지에 구현된 코드를 보니 단순히 Upstash로 요청을 보내기위한 프록시 역할을 하고있는데 scan만 가능하도록 구현되어있음
L12, L27, L45, L63에 작성된 scanIterator 참조
@vercel/kv가 의존하고있는 @upstash/upstash-redis에는 대부분의 커맨드가 구현되어있다. L2~L146의 커맨드 목록 참조
아무래도 FE 환경에서 KV에 저장된 값만 빼서 쓰도록 하는게 목적으로 보임
@upstash/upstash-redis 에서는 redis를 제어하는 API에 POST메서드로 json 바디를 넘기는 식으로 구현되어있음
@upstash/upstash-redis: pkg.redis.ts#L326 -> @upstash/upstash-redis: pkg.http.ts#L174
@vercel/postgres: index.ts#L21
@vercel/postgres: sql-template.test.ts
get Proxy만 작성되어있고 테스트코드도 SELECT에 대한 케이스만 작성되어있다.
Object storage와 Postgres도 조만간 사용해봐야겠다