Vercel의 storage 패키지는 어떻게 작동하는가? r/ KV

d3fau1t·2023년 5월 6일
0

뻘짓

목록 보기
9/9

얼마전에 메일을 받았는데..

지금으로부터 몇 일 전에 Vercel의 storage 관련 발표가 있다는 메일을 받았다.

기존엔 config 정도만 저장할 수 있게 해줬는데
KV(Redis), Postgres, Blob(Object storage) 까지 자체적으로 지원하려는 것 같다.

KV: Upstash의 Redis를 백엔드로 두고있음
Postgres: Neon의 Postgres를 백엔드로 두고있음
Blob: Cloudfront의 R2를 백엔드로 두고있음

Cloudfront의 R2의 이름은 AWS의 S3보다 우위를 점하기위한 이유로 지어졌다고 한다...

관심을 안가질 수 없잖아?

기존에도 개인 사용자에게는 Hobby 플랜이라는 명목으로 그냥 쓸 수 있게 풀어놓았는데 이번에도 그런 듯 보인다.

어떻게 사용함?

이 부분에서는 제공되는 가이드를 토대로 가볍게 훑고 넘어간다.

Getting started

Next.js와 Svelte를 예시로 작성된 가이드가 제공되고있다.

여기까지만 보면 패키지가 제공되고, 프론트엔드 개발자들이 가져다 쓰면 된다. 정도만 알 수 있긴한데

CLI

redis-cli --tls -u redis://****@inviting-horse-31835.kv.vercel-storage.com:31835

이런식으로 redis 클라이언트로 직접 접속할 수 있다.
서드파티 애플리케이션으로 관리하거나 백엔드 서비스에 붙여서 쓰면 될 것 같다.

REST

REST 방식으로{Key : Value}를 SET 할 수 있어보이는데..
POST가 아닌 GET 요청을 날려줘야한다.

Header의 Bearer 토큰이 노출되기 때문에 웹페이지에서 사용하게된다면 사용자가 임의로 특정 키에 대한 값을 변경할 가능성이 열려있다.

왠만하면 서버사이드에서 처리하는게 좋겠다.

그래도 사용해야한다면 html 페이지에서 요청할 수 있는 예제는 여기에서 확인

npm에 배포된 KV 패키지는 어떻게 작동하는가?

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

Postgres도 마찬가지로 read 기능만 지원하는듯

@vercel/postgres: index.ts#L21

@vercel/postgres: sql-template.test.ts

get Proxy만 작성되어있고 테스트코드도 SELECT에 대한 케이스만 작성되어있다.


결론

  • Vercel이 Postgres, Redis, Object Storage 다 지원해준다.
    • 다른 클라우드 서비스에 의존하지 않아도 된다.
    • 제공되는 Storage 패키지가 FE 환경에서 사용하기 편하다.
      - 다만 패키지를 사용할 경우 Read 작업만 가능하다.
      • Write 작업은 REST 방식으로 처리할 수 있다.
        • 다만 GET 요청으로 Header의 Bearer Token의 노출될 수 있다.
        • 왠만하면 서버에서 처리하는걸 권장
      • 이 외엔 CLI로 접근하거나 제공되는 연결정보를 서드파티 애플리케이션에 입력하여 활용
  • 개인 프로젝트 진행할 때 Hobby 플랜으로 활용할 수 있다.

Object storage와 Postgres도 조만간 사용해봐야겠다

profile
웹 백엔드 합니다.

0개의 댓글