
참고: alternatives | supabase-vs-firebase
다양한 서비스 중에 데이터베이스를 대체하는 서비스이다.
firebase의 기능을 대체할 수 있는 서비스 라고 생각하면 이해하기 쉬울 것 같다.참고: Architecture | Supabase Docs

Kong: API 게이트웨이 or 리버스 프록시로 사용하며 Lua로 작성된 라이브러리다./auth: 인증은 go언어로 작성된 GoTrue 라이브러리를 사용한다./rest: Rest api는 하스켈 언어로 작성된 PostgREST 라이브러리를 사용한다.PostgREST는 RESTful API로 pg와 통신을 지원하는 독립형 웹 서버이다.pg-graphql을 사용하여 gql도 지원한다./storage: pg의 메타데이터를 저장하며, S3와 호환하는 스토리지 서비스이다./functions: Deno를 사용하여 엣지 함수 기능을 수행한다.mongoDB와 비슷한 사용 방식을 지원한다.
create table
countries (id int8 primary key, name text);
insert into
countries (id, name)
values
(1, 'Afghanistan'),
(2, 'Albania'),
(3, 'Algeria');
const { data, error } = await supabase
.from('countries')
.select()
{
"data": [
{
"id": 1,
"name": "Afghanistan"
},
{
"id": 2,
"name": "Albania"
},
{
"id": 3,
"name": "Algeria"
}
],
"status": 200,
"statusText": "OK"
}
const { data, error } = await supabase
.from('countries')
.select('name')
{
"data": [
{
"name": "Afghanistan"
},
{
"name": "Albania"
},
{
"name": "Algeria"
}
],
"status": 200,
"statusText": "OK"
}
const { data, error } = await supabase
.from('cities')
.select('name, countries(*)')
.eq('countries.name', 'Estonia')
{
"data": [
{
"name": "Bali",
"countries": null
},
{
"name": "Munich",
"countries": null
}
],
"status": 200,
"statusText": "OK"
}
최근 웹 클라이언트는 다시 SSR이 강세를 보인다.
nextjs, remixnuxtjsSvelteKitSSR이 강세를 보이며 다양한 framework에서 DB와 직접 통신하는 방식이 다시 등장하고 있다.
(23년 4분기 기준)가장 많이 사용된 nextjs는 14버전에서 서버 컴포넌트에서 SQL을 작성을 지원한다.
이 외에도 많은 SSR framework 들은 prisma 같은 기술을 사용하여 DB와 통신하는 예제를 제공한다.
모바일 앱은 (초기 서비스 경우)구글의 firebase 를 사용하여 백엔드 없이 개발하는 경우가 많았다.
심지어 서버 통신이 필요하지 않은 경우 디바이스의 파일시스템만 사용하여 개발되기도 한다.
웹의 이러한 행보는 비용 뿐만 아니라 여러 측면에서 합리적이라고 생각되기도 한다.
하지만 웹의 경우는 과거 asp, php, jsp 같은 기술 즉, WAS가 주류이던 시절의 레거시를 청산하고
현재의 프론트, 백엔드 전문화의 시대를 맞이했다.
때문에 다시 과거의 실수를 되풀이 하는 것이 아닌가 하는 우려의 목소리가 많아 보인다.