내배캠 수료
짧다면 짧고 길다면 긴 부트캠프가 내일이면 끝납니다.
til 은 계속 해서 작성할 예정이고
기존에 작성했던 것들은 분류작업을 해보려고 합니다.
시원섭섭합니다.
supabase.rpc
내배캠 막바지에 supabase.rpc 라는 메서드를 사용할 일이 있었습니다.
sql 을 몰라서 생소한 기능이었는데 gpt 쌤에게 물어본 내용을 정리합니다.
Supabase에서 supabase.rpc
메서드는 PostgreSQL의 저장 프로시저(Stored Procedure) 또는 사용자 정의 함수(User-defined Function)를 호출하는 데 사용됩니다. 이를 통해 복잡한 로직을 데이터베이스 내에서 실행하고, 결과를 가져올 수 있습니다.
1. 함수 생성
먼저 PostgreSQL에서 함수를 생성해야 합니다. 예를 들어, 특정 테이블에서 특정 조건에 맞는 데이터를 반환하는 간단한 함수를 작성해 보겠습니다.
CREATE OR REPLACE FUNCTION get_active_users(min_temperature FLOAT)
RETURNS SETOF users AS $$
BEGIN
RETURN QUERY
SELECT * FROM users WHERE temperature > min_temperature;
END;
$$ LANGUAGE plpgsql;
이 함수는 users
테이블에서 temperature
가 min_temperature
보다 높은 사용자를 반환합니다.
2. supabase.rpc
사용법
Supabase 클라이언트를 사용하여 이 함수를 호출할 수 있습니다.
import { createClient } from '@supabase/supabase-js';
// Supabase 클라이언트 초기화
const supabase = createClient('https://your-project.supabase.co', 'your-anon-key');
async function fetchActiveUsers(minTemperature) {
const { data, error } = await supabase.rpc('get_active_users', {
min_temperature: minTemperature
});
if (error) {
console.error('Error fetching active users:', error);
} else {
console.log('Active users:', data);
}
}
fetchActiveUsers(37.5);
3. 파라미터 전달
supabase.rpc
메서드의 두 번째 인자는 함수에 전달할 파라미터의 객체입니다. 파라미터의 이름과 객체의 키가 일치해야 합니다.
const { data, error } = await supabase.rpc('function_name', {
param_name1: value1,
param_name2: value2,
// 기타 파라미터
});
4. 결과 처리
supabase.rpc
는 data
와 error
객체를 반환합니다.
data
: 함수 실행 결과가 들어있는 배열입니다.error
: 함수 실행 중 발생한 오류 정보가 들어있습니다.
5. 비동기 함수 사용
supabase.rpc
는 비동기 함수이므로, await
또는 .then()
을 사용하여 함수 호출 결과를 처리합니다.
6. 예제: 사용자 정의 함수 호출
아래는 또 다른 예제로, 두 날짜 사이에 생성된 사용자를 검색하는 함수입니다:
함수 생성
CREATE OR REPLACE FUNCTION get_users_by_date_range(start_date DATE, end_date DATE)
RETURNS SETOF users AS $$
BEGIN
RETURN QUERY
SELECT * FROM users WHERE created_at BETWEEN start_date AND end_date;
END;
$$ LANGUAGE plpgsql;
함수 호출
async function fetchUsersByDateRange(startDate, endDate) {
const { data, error } = await supabase.rpc('get_users_by_date_range', {
start_date: startDate,
end_date: endDate,
});
if (error) {
console.error('Error fetching users by date range:', error);
} else {
console.log('Users by date range:', data);
}
}
fetchUsersByDateRange('2024-01-01', '2024-12-31');
7. 주의사항
- 함수 이름과 파라미터는 PostgreSQL 함수에서 정의된 대로 정확하게 일치해야 합니다.
supabase.rpc
는 기본적으로 모든 권한을 가진 사용자가 호출할 수 있지만, 함수의 보안 정책을 확인하고 필요에 따라 권한을 제한할 수 있습니다.- Supabase의 함수 호출은 PostgreSQL의 성능 특성을 따르므로, 복잡한 계산이나 큰 데이터셋을 다룰 때는 적절한 인덱스와 최적화를 고려해야 합니다.
요약
supabase.rpc
는 Supabase에서 PostgreSQL 사용자 정의 함수(또는 저장 프로시저)를 호출하는 메서드입니다.- 함수 이름과 파라미터를 객체 형태로 전달하여 복잡한 로직을 데이터베이스에서 직접 실행할 수 있습니다.
- 결과는
data
와error
객체로 반환되며, 비동기적으로 처리됩니다.
이 방법을 통해 클라이언트에서 복잡한 로직을 서버로 이동하여 처리할 수 있고, 이는 성능과 보안 측면에서 많은 이점을 제공할 수 있습니다.
'supabase' 카테고리의 다른 글
[240808 TIL] 테이블 join 해서 가져오기 (0) | 2024.08.08 |
---|---|
[240806 TIL] 쿠키 배달 fetch(supabase auth) (0) | 2024.08.06 |
[240730 TIL] supabase upsert (0) | 2024.07.30 |
[240729 TIL] 수파베이스 리얼타임(테이블저장) (0) | 2024.07.29 |
[240728 TIL] naver 로그인 편법 구현 with Supabase 2편 (0) | 2024.07.28 |