반응형

Supabase로 작업을 하던 중에 일정한 시간마다 Edge-function을 호출해야하는 상황이 발생했다.

그래서 확인해보니 아주 유용한 확장을 제공하고 있어서 해당 확장들을 활용했고 결과는 성공적이었다.

 

Supabase Edge-function 스케쥴링하기

 

1. Supabase의 사이드 바에서 Database > Extensions로 이동한다.

2. 검색창에서 pg_net을 검색하고 활성화해준다.

💭 pg_cron을 활용하기 위해서는 먼저 net을 활성화해서 http호출을 가능하도록 해줘야 한다.

3. 위와 동일하게 cron을 검색하고 활성화해준다.

4. Supabase의 사이드 바에서 SQL Editor로 이동한 후 아래의 쿼리를 입력한다.

select
cron.schedule(
'invoke-your-edge-function', -- name of cron
'0 11 * * *', -- every day at 11:00
$$
select
net.http_post(
url:='https://project-ref.supabase.co/functions/v1/[your-edge-funtion-name]', -- your edge function
headers:='{"Content-Type": "application/json", "Authorization": "Bearer [your anon key]"}'::jsonb,
body:=concat('{"time": "', now(), '"}')::jsonb
) as request_id;
$$
);

위의 쿼리 중 몇가지 직접 설정 및 입력해줘야하는 값들이 있다.

 

- 'invoke-your-edge-function', -- name of cron:

말 그대로 이 cron 스케쥴에 대한 이름이 될 값.

 

- '0 11 * * *', -- every day at 11:00:

이 값은 주로 코드를 통해 스케쥴을 설정할 때 사용하게 되는데, 헷갈리는 경우가 많아 guru를 통해서 설정하길 추천한다.

guru링크 👉 https://crontab.guru/#*_*_*_*_*

 

Crontab.guru - The cron schedule expression generator

loading... We created Cronitor because cron itself can't alert you if your jobs fail or never start. Cronitor is easy to integrate and provides you with instant alerts when things go wrong. Sign Up Free

crontab.guru

위의 사이트를 활용하면 cron스케쥴을 설정하기 위한 시간을 쉽게 수정하고 확인 및 적용이 가능하다.

위의 이미지는 매 분 마다 실행됨을 의미

 

- url:='https://project-ref.supabase.co/functions/v1/[your-edge-funtion-name]', -- your edge function:

실제 edge function을 호출하는 url

 

- headers:='{"Content-Type": "application/json", "Authorization": "Bearer [your anon key]"}'::jsonb,:

여기서는 다른값은 수정하지 않고 [your anon key]만 바꿔주면 되는데, Supabase의 사이드 바의 Project Setting > API에서 찾을 수도 있고 다른 곳에서도 찾을 수 있다.

 

5. 여기까지 완료했다면 Table의 cron Schema에서 생성 된 스케쥴을 확인할 수 있다.

 

생성 된 스케쥴은 설정 된 시간에 실행되고 결과는 job_run_details에 기록된다.

만약 생성 된 스케쥴을 취소하고 싶다면 아래의 쿼리를 활용할 수 있다.

select cron.unschedule('name of cron');

 

참고로 cron schema의 값들은 read only라서 직접 UI로 수정 및 삭제가 불가능하다.

그래서 변화를 주고 싶다면 위와같이 쿼리를 통해서만 가능하다.

 

Supabase pg_cron docs

https://supabase.com/docs/guides/database/extensions/pg_cron

 

pg_cron: Job Scheduling | Supabase Docs

pgnet: a simple cron-based job scheduler for PostgreSQL that runs inside the database.

supabase.com

 

 

반응형

+ Recent posts