Supabase는 PostgreSQL을 기반으로 하며, 실시간 데이터베이스 기능을 제공하여 데이터 변경을 실시간으로 감지할 수 있습니다. 또한 REST API, 이벤트 처리 등의 고유한 기능을 오픈소스로 제공하여 데이터베이스와 API를 구축하는 데 필요한 복잡한 설정과 관리를 최소화할 수 있는 장점이 있습니다.
이번 프로젝트에서 저는 OpenAI의 응답값을 JSON 형태로 저장하고 사용하는 방법을 Supabase를 이용하여 진행했습니다. 다음은 그 과정입니다.
anon 키를 기록해 둡니다. 이 정보는 프로젝트 설정의 API 탭에서 찾을 수 있습니다.
프로젝트에서 Supabase 클라이언트를 설치합니다. 다음 명령어를 사용하여 설치할 수 있습니다
npm install @supabase/supabase-js
프로젝트의 초기화 파일(예: index.js 또는 App.js)에서 Supabase 클라이언트를 초기화합니다:
import { createClient } from '@supabase/supabase-js';
const supabaseUrl = '<https://your-project-id.supabase.co>'; // Supabase 프로젝트 URL
const supabaseKey = 'your-anon-key'; // Supabase anon key
const supabase = createClient(supabaseUrl, supabaseKey);
export default supabase;
Supabase 대시보드에서 JSON 데이터를 저장할 테이블을 생성합니다.

"New Table"을 클릭합니다.ai_responses).id: UUID, Primary Key, Default Value: gen_random_uuid()created_at: Timestamp, Default Value: now()response_data: JSONB
이제 AI의 JSON 데이터를 Supabase에 저장하는 방법을 보여드리겠습니다. 예를 들어, AI 응답 데이터를 저장하는 함수는 다음과 같습니다:
import supabase from './supabaseClient'; // Supabase 초기화 파일을 import
async function saveAiResponse(responseData) {
const { data, error } = await supabase
.from('ai_responses')
.insert([
{ response_data: responseData }
]);
if (error) {
console.error('Error inserting data:', error);
} else {
console.log('Data inserted:', data);
}
}
// 예시로 사용할 AI 응답 데이터
const aiResponse = {
destination: 'Paris',
recommendation: {
tripType: 'Vacation',
tripStyle: 'Relaxed',
tripActivities: [
{
placeType: 'Museum',
name: 'Louvre',
description: 'A famous museum in Paris.',
location: 'Paris, France',
recommendedMenu: 'Café Louvre',
link: '<https://www.louvre.fr>'
}
]
}
};
// AI 응답 데이터를 저장하는 함수 호출
saveAiResponse(aiResponse);
Supabase 테이블에 저장된 데이터를 보여주는 방법에 대해서 예시 코드와 함께 설명을 하자면
import supabase from './supabaseClient';
// JSON 데이터를 조회하는 함수
async function fetchAiResponses() {
const { data, error } = await supabase
.from('ai_responses')
.select('response_data'); // 필요한 컬럼만 선택
if (error) {
console.error('Error fetching data:', error);
return [];
}
// JSON 문자열을 JavaScript 객체로 변환
return data.map(item => JSON.parse(item.response_data));
}
// 예시로 데이터를 사용하는 함수
async function useAiResponses() {
const responses = await fetchAiResponses();
// 조회한 데이터를 활용
responses.forEach(response => {
console.log('Destination:', response.destination);
console.log('Recommendations:', response.recommendation);
});
}
// 데이터 사용 함수 호출
useAiResponses();
import supabase from './supabaseClient';
// 데이터 업데이트 함수
async function updateAiResponse(id, newResponseData) {
const { data, error } = await supabase
.from('ai_responses')
.update({ response_data: JSON.stringify(newResponseData) }) // JSON 데이터를 문자열로 변환하여 저장
.eq('id', id);
if (error) {
console.error('Error updating data:', error);
} else {
console.log('Data updated:', data);
}
}
// 데이터 업데이트 함수 호출
updateAiResponse('existing-id', updatedAiResponse);
import supabase from './supabaseClient';
// 데이터 삭제 함수
async function deleteAiResponse(id) {
const { data, error } = await supabase
.from('ai_responses')
.delete()
.eq('id', id);
if (error) {
console.error('Error deleting data:', error);
} else {
console.log('Data deleted:', data);
}
}
// 데이터 삭제 함수 호출
deleteAiResponse('existing-id');
Supabase를 사용하면 백엔드를 구축할 필요 없이, 프론트엔드에서 필요한 대부분의 백엔드 기능을 처리할 수 있는 것 같습니다. 특히 빠르게 프로토타입을 만들거나, 소규모 프로젝트에서 백엔드 개발을 간소화하려는 경우 매우 유용하게 사용할 수 있겠다고 생각했습니다.