Supabase is an open source Firebase alternative providing all the backend features you need to build a product. Learn more about Supabase, follow a quickstart for an overview, or dive straight into the different products and APIs.
팀원 중 한 분이 나에게 Supabase라는 것을 소개시켜주었다. Firebase와 비슷하게 Storage, DB, Auth 등을 제공하는데 공식문서를 확인해보니
공식문서에는 Remix와 관련된 문서를 제공하지 않는다. 그래서 NextJS 문서를 참고하며 개발하였다.
처음에는 Prisma를 이용하여 Supabase에서 제공하는 DB에 접근하여 ORM을 통해 데이터를 받아올까 했었다.
몇차례 시도 후 이는 필요 없다는 판단을 하였다. 이유는 supabaseClient 객체에서 DB에서 데이터에 접근할 수 있는 CRUD를 제공하고 있기 때문이다.
const { data, error } = await supabase.from('[테이블명]').select();
테이블에 해당하는 데이터를 가져올 수 있고, error 상황에 대해서도 핸들링할 수 있다.
const { data, error } = await supabase.from('[테이블명]').insert({title:'타이틀명'});
테이블에 해당하는 row를 생성한다. supabase에서 테이블을 생성할 때 아래 그림과 같이 자동 생성될 column을 지정할 수 있다. (Is Identity 체크)
추가로 Primary Key, Unique 값 설정 등도 간단하게 GUI로 할 수 있다.
bulk create
const { data, error } = await supabase.
from('[테이블명]').
insert([
{title:'타이틀명1'},
{title:'타이틀명2'} ...
]);
create and return
const { data, error } = await supabase.from('[테이블명]').insert({title:'타이틀명'}).select();
등등 메소드도 지원한다.
그래서 Remix에서 위에서 상세설명한 두 가지 메소드에 대해 어떻게 구현하였는지 설명한다.
...
export const loader = async () => {
const { data, error } = await supabase.from('[테이블명]').select(); // serverside의 supabase 객체
return json({
data
});
}
...
<form/>
을 이용하여 데이터를 Server Side로 넘겨줍니다. 저는 form의 post method를 이용하여 action 함수를 호출하였습니다....
export const action = async ({request}) => {
const { data } = Object.fromEntries(await request.formData());
const { error } = await supabase
.from('[테이블명]')
.insert({ body: String(data) });
if (error) {
console.log(error);
return json( { success: false; } );
}
return json( { success: true; } );
};
...
<Form method={'post'}>
<input type={'text'} name={'data'} />
<button type={'submit'}>보내기</button>
</Form>
Remix와 Supabase를 통해 Supabase에서 제공하는 DB CRUD하는 방법에 대해 간단히 알아보았습니다.
아직 해쳐나가야할 관문이 많을 것 같아 또 돌아오겠습니다..!
리믹스 흥미로워요 🤩