반응형

 

Edge Function 은 Supabase 기반의 serverless api  솔루션입니다.

AWS Lambda 나 Google Cloud Function 과 같은 서비스라고 보시면 됩니다.

 

 

1. 사용 환경 만들기

EdgeFunction 을 어떻게 개발하지? 코드를 작성해서 클라우드에 올리나? 그럼 코드는 어떻게 확인하지.. 와 같은 의문이 들건데요.

간단히 결론부터 말하면 supabase 에서 cli(command line interface) 기반으로 Edge Function 을 개발할 수 있는 환경을 제공합니다.

이를 이용해서 로컬에서 개발하고 테스트 해볼 수 있습니다.

 

EdgeFunction을 작성하기 위해서는 PC에 개발 환경을 먼저 구축 해야 겠죠?

아래 가이드를 살펴보면서 작성하시면 좋겠습니다.

 

https://supabase.com/docs/guides/local-development?queryGroups=package-manager&package-manager=npm

 

Local Development & CLI | Supabase Docs

Learn how to develop locally and use the Supabase CLI

supabase.com

 

CLI install 하고 실행하기

1. install
npm install supabase --save-dev
2. init
npx supabase init
3. start
npx supabase start

//brew 에서는 
1. install
brew install supabase/tap/supabase
2. init
supabase init
3. start
supabase start

 

[결과 화면]
         API URL: http://127.0.0.1:54321
     GraphQL URL: http://127.0.0.1:54321/graphql/v1
  S3 Storage URL: http://127.0.0.1:54321/storage/v1/s3
          DB URL: postgresql://postgres:postgres@127.0.0.1:54322/postgres
      Studio URL: http://127.0.0.1:54323
    Inbucket URL: http://127.0.0.1:54324
      JWT secret: super-secret-jwt-token-with-at-least-32-characters-long
        anon key: ----dfasdfasdf----------
service_role key: -----asdfasdxx---------
   S3 Access Key: ----asdf90as8d0f98asdf--------
   S3 Secret Key: -----234hjk35h2k34j5h--------
       S3 Region: local

 

 

 

 

 

 

2. CLI와 project 연결하기

npx supabase link --project-ref [project name]

 

1. npx supabase login

 첫 로그인을 시도하려고 하면 아래와 같은 에러가 발생합니다.

~/supabase$ npx supabse login
npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmjs.org/supabse - Not found
npm ERR! 404 
npm ERR! 404  'supabse@*' is not in this registry.
npm ERR! 404 
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/netplant/.npm/_logs/2024-12-16T07_31_12_169Z-debug-0.log
netplant@netplant01:~/supabase$ npx supabase login
Hello from Supabase! Press Enter to open browser and login automatically.

 

엔터를 치면, 

브라우저가 뜨고  supabse 에 로그인 화면이 나타납니다.

로그인을 합니다.

 

2. 로그인 하고나면, 

 

supabase verify 코드가 보이게 됩니다.

 

3.이 코드를 가지고 terminal에 입력합니다.

- Enter your verification code: f16d4f38 

 

 

3.. 함수 개발해보기

함수를 하나 만들어보자.

 

Edge function을 개발하기 위해서는 Cli를 이용해서 Edge Function을 만들어 줍니다.

supabase functions new my-function --no-verify-jwt
또는
npx supabase functions new my-function --no-verify-jwt

테스트를 위한 것이니 --no-verify-jwt 를 옵션으로 입력했습니다.

그러면 간단한 샘플코드와 함께 함수 폴더가 만들어 집니다.

supabase 밑에 functions 라는 폴더가 생기고, 그 아래 my-function이라는 폴더가 만들어 지죠.

 

폴더 위치 : supabase/functions/my-function

생성된 예제 코드

import "jsr:@supabase/functions-js/edge-runtime.d.ts"

console.log("Hello from Functions!")

Deno.serve(async (req) => {
  const { name } = await req.json()
  const data = {
    message: `Hello ${name}!`,
  }

  return new Response(
    JSON.stringify(data),
    { headers: { "Content-Type": "application/json" } },
  )
})



/* To invoke locally:

  1. Run `supabase start` (see: https://supabase.com/docs/reference/cli/supabase-start)
  2. Make an HTTP request:

  curl -i --location --request POST 'http://127.0.0.1:54321/functions/v1/my-function' \
    --header 'Authorization: Bearer -sdjfklsdfjskldf-sdlfkasm23324l234dsdfk' \
    --header 'Content-Type: application/json' \
    --data '{"name":"Functions"}'

*/

 

함수에 대한 설정은 config.toml 파일에서 설정 할 수도 있습니다.

 

 

이렇게 코드가 만들어지고 나면 그다음은 함수를 테스트 해봐야 하는데요.

테스트를 위해서 함수를 제공하는 서비스를 실행합니다.

 

supabase functions serve my-function --no-verify-jwt

또는 

npx supabase functions serve my-function --no-verify-jwt

 

그리고 나서 함수를 테스트 하기 위해서 샘플 코드에 주석으로 적혀있는 curl 명령을 실행해봅니다.

  curl -i --location --request POST 'http://127.0.0.1:54321/functions/v1/my-function' \
    --header 'Authorization: Bearer -sdjfklsdfjskldf-sdlfkasm23324l234dsdfk' \
    --header 'Content-Type: application/json' \
    --data '{"name":"Functions"}'

 

이렇게 해서 결과가 나오면 api 를 개발할 수 있는 환경이 완성 된것입니다.

 

5. Edge Function 을 서버에 올리기

함수 개발을 끝내고 나면, 서버에 올리는 일이 남았습니다.

//전체 함수를 서버에 올리기
supabase functions deploy

// 한 함수만 올리기
supabase functions deploy my-function

//JWT 토큰 없이 동작할수 있도록 올리기
supabase functions deploy hello-world --no-verify-jwt

 

이렇게 하면 새로 만든 함수가 supabase 에 등록이 됩니다.

 

 

이제 부터는 실제로 개발할때 유용한 몇가지 팁들을 같이 적어볼까 합니다.

 

5. 팁

 

1. 환경 변수 또는 시크릿(Secret) 다루기 

[환경 변수 파일 .env]

일명 .env 또는 dotenv 라고 부르는 환경 변수 설정을 하는 방법입니다.

api key 또는 token 등 서비스를 구동할때 필요한 인증 키나 값들은 보통 소스코드에서 분리해서 사용하죠.

이럴때 일반적으로 .env를 활용하게 됩니다.

//env 사용하기
Deno.env.get('MY_SECRET_NAME')

그럼 어떻게 확인해 볼 수 있느냐?

supabase functions 서비스를 실행할때 env 파일을 설정해서 테스트 해볼 수 있습니다.

supabase functions serve --env-file ./supabase/.env

 

[시크릿 키 Secret]

Supabase 서버에서는 .env 파일을 그대로 사용할수 없고 ,supabase 에는 secret key를 관리하는 page에서 관리되는 키를 사용해야 합니다.

supabase site -> Project Settings -> Edge Functions -> Edge Function Secrets Management

가 바로 키를 관리하는 곳입니다.

 

CLI에 .env에 등록된 키들을 올리는 기능이 있으니 이를 활용하면 쉽게 올리고 테스트 가능하겠죠.

#.env에 있는 모든 키를 올릴때
supabase secrets set --env-file ./supabase/.env

#특정 키만 올일때
supabase secrets set MY_NAME=Chewbacca

 

 

2. 서버의 db를 로컬에 구축 하기(옵션 - 건너 뛰어도 됨.)

되도록이면 로컬의 환경이 서버의 환경과 동일(또는 유사)한것이 개발 및 테스트시 예외상황을 줄일 수 있습니다.

그래서 서버의 내용을 로컬에 구축하는 작업을 진행해보겠습니다.

1. 서버의 데이터를 모두 로컬에 복사해오면 좋겠지만  오버해드(서버의 데이터 내용이 많으면 많을 수록 문제가 되겠죠)가 큽니다.

그래서 서버의 구조, 즉 db schema 를 로컬에 동일하게 구축하는 것입니다.

2. 로컬에는 기본적인 테스트 가능한 데이터만 입력합니다.

서버의 일부 데이터만 입력하는 방법입니다.

 

 

 

#해피코딩

'Supabase' 카테고리의 다른 글

[supabase] auth hooking  (0) 2025.01.24
[supabase] postgres plv8 활성화  (0) 2025.01.24
[Flutter] supabase database 의 json 내부 query하기  (0) 2024.09.19

+ Recent posts