PostgREST와 Hasura의 관계
Hasura는 PostgREST를 사용하지 않습니다.
Hasura와 PostgREST는 완전히 별개의 프로젝트!
차이점 비교
아키텍처
Supabase:
PostgreSQL → PostgREST → REST API → Supabase JS Client
Hasura:
PostgreSQL → Hasura Engine → GraphQL API → Apollo Client
기술 스택
| Supabase | Hasura | |
|---|---|---|
| 프로토콜 | REST (PostgREST 사용) | GraphQL (자체 엔진) |
| 쿼리 언어 | URL + 체이닝 | GraphQL |
| 엔진 | PostgREST (Haskell) | Hasura Engine (Haskell) |
| 철학 | REST + GraphQL 스타일 쿼리 | 순수 GraphQL |
참고 블로그 글의 의미
PostgREST? << 해당 블로그는 "PostgREST 단독 사용"에 대한 내용.
옵션 1: PostgREST만 단독 사용
PostgreSQL → PostgREST → REST API
옵션 2: Supabase 사용 (PostgREST 포함)
PostgreSQL → PostgREST → Supabase Services → Client
옵션 3: Hasura 사용 (PostgREST 없음)
PostgreSQL → Hasura → GraphQL API
Hasura에 PostgREST를 추가할 수 있나?
이론적으로는 가능
PostgreSQL
├── Hasura (GraphQL)
└── PostgREST (REST)
같은 DB에 두 개 다 연결할 수 있습니다.
하지만 실무에서는...
❌ 권장하지 않습니다!
이유 1: 중복된 기능
// PostgREST
const { data } = await fetch('/posts?select=*,users(*)')
// Hasura
const { data } = await client.query({
query: gql`{ posts { id users { name } } }`
})
// 똑같은 걸 두 가지 방법으로?
이유 2: 권한 관리 복잡도
-- PostgREST: Row Level Security
CREATE POLICY "users_policy" ON posts
USING (auth.uid() = user_id);
-- Hasura: Permissions
-- Hasura Console에서 별도 설정
-- 두 곳에서 따로 관리해야 함! 😵
이유 3: 유지보수 부담
- 두 개의 서버 운영
- 두 개의 설정 관리
- 두 개의 모니터링
- 팀원들의 혼란
언제 PostgREST를 고려할까?
Case 1: Hasura 없이 가벼운 REST API
PostgreSQL → PostgREST → REST API
장점:
- 매우 가볍고 빠름
- 설정 거의 없음
- GraphQL 학습 불필요
하지만 Supabase를 쓰는 게 더 나음!
Case 2: 레거시 시스템 통합
기존 PostgreSQL DB
├── 기존 서비스 (변경 불가)
└── PostgREST (새로운 읽기 전용 API)
이 경우에도 Hasura가 더 강력함!
Supabase vs Hasura 선택 가이드
Supabase를 선택!
✅ 빠른 프로토타이핑
// 설정 거의 없이 바로 시작
const supabase = createClient(url, key);
const { data } = await supabase.from('posts').select('*');
✅ 간단한 CRUD 중심
✅ Next.js와 통합 (Auth, Storage 등)
✅ 백엔드 경험 적음
✅ Firebase 대체 찾는 경우
Hasura를 선택!
✅ 복잡한 데이터 관계
query {
users {
posts(where: { likes: { _gt: 100 } }) {
comments_aggregate { aggregate { count } }
}
}
}
✅ GraphQL 생태계 활용 (Apollo, Relay 등)
✅ 세밀한 권한 제어
✅ 마이크로서비스 통합 (여러 DB, REST API)
✅ 팀이 GraphQL에 익숙
실전 조합 추천
권장 ✅
// Option 1: Supabase 올인원
PostgreSQL + PostgREST + Auth + Storage + Realtime
→ Supabase JS Client
// Option 2: Hasura + Next.js
PostgreSQL → Hasura GraphQL
→ Apollo Client + Next.js
// Option 3: 하이브리드 (고급)
PostgreSQL
├── Hasura (복잡한 쿼리)
└── Supabase (Auth, Storage)
비권장 ❌
// PostgreSQL + Hasura + PostgREST
// 너무 복잡하고 불필요함!
// 둘 중 하나만 선택하세요
프로젝트 규모별 추천
작은 프로젝트 / MVP:
✅ Supabase
- 설정 간단
- Next.js Auth 통합 쉬움
- 배포 빠름
중간 프로젝트:
✅ Supabase 또는 Hasura 둘 다 OK
- 데이터 관계 복잡 → Hasura
- CRUD 중심 → Supabase
큰 프로젝트 / 복잡한 도메인:
✅ Hasura
- GraphQL의 강력함
- 세밀한 권한 제어
- 확장성
결론
핵심 답변 요약
- Hasura는 PostgREST를 사용하지 않음 ❌
- 둘은 완전히 다른 접근 방식 (GraphQL vs REST)
- 굳이 함께 쓸 필요 없음 ❌
- 하나만 선택하세요! ✅
선택 기준
GraphQL 선호 + 복잡한 쿼리 → Hasura
REST 선호 + 간단한 CRUD → Supabase
올인원 솔루션 → Supabase
기업용 / 확장성 → Hasura
PostgREST 단독 사용?
No! 그냥 Supabase 쓰세요 😊
Supabase = PostgREST + Auth + Storage + Realtime + Dashboard + CLI + ...
'TIL' 카테고리의 다른 글
| [251011 TIL] queryFn 에서 메서드 사용시 주의점 (0) | 2025.10.11 |
|---|---|
| [251009 TIL] Hasura 트랜잭션 처리 (1) | 2025.10.09 |
| [240421 WIL 1주차] 웹디자인, github, env (0) | 2024.04.21 |
| [240419 TIL]첫 팀 프로젝트 회고 (1) | 2024.04.19 |
| [240416 TIL] 첫 TIL (0) | 2024.04.16 |