📌 Executive Summary (TL;DR)
- 과금 모델의 근본적 분기점 (요청당 과금 vs 정액 컴퓨팅): AWS AppSync는 쿼리/뮤테이션 100만 건당 $4.00, 실시간 WebSocket 연결 100만 분당 $2.00의 종량제를 부과하여 트래픽이 폭증할 때 청구서가 가파르게 상승합니다. 반면 Supabase GraphQL(pg_graphql)은 PostgreSQL 데이터베이스 내부에서 네이티브로 실행되므로 API 요청당 비용이 $0(완전 무료)이며, 오직 기본 인스턴스 컴퓨팅 비용(Pro 플랜 $25/월)만 고정 발생합니다.
- N+1 쿼리 해결 및 SQL 컴파일 아키텍처: Hasura는 GraphQL 쿼리를 단 하나의 최적화된 SQL 구문으로 직접 컴파일(JIT SQL Compiler)하여 ORM 특유의 고질적인 N+1 문제를 원천 차단하고 수 밀리초(ms) 단위의 극강 레이턴시를 달성합니다. AppSync는 리졸버(Pipeline/Batch Resolver) 레벨에서 Lambda나 DynamoDB 호출을 직접 튜닝해야 하는 엔지니어링 오버헤드가 수반됩니다.
- 엔터프라이즈 보안 및 멀티테넌시 권한 격리: Supabase는 별도의 미들웨어 없이 PostgreSQL의 Row Level Security (RLS)를 100% 그대로 계승하여 데이터베이스 계층에서 완벽한 권한 격리를 보장합니다. Hasura는 강력한 역할 기반 접근 제어(RBAC) 메타데이터 엔진을 제공하나 엔터프라이즈 캐싱 및 다중 리전 지원에 고가 플랜(월 $1,500+)이 요구되며, AppSync는 AWS IAM/Cognito 및 WAF와의 긴밀한 결합으로 금융권 수준의 규정 준수를 충족합니다.
프론트엔드와 모바일 클라이언트가 고도화되면서 GraphQL은 REST API의 오버페칭(Over-fetching)과 언더페칭(Under-fetching) 문제를 해결하는 업계 표준 인터페이스로 자리 잡았습니다. 클라이언트는 필요한 데이터 필드만 선언적으로 요청하고, 백엔드는 단 한 번의 네트워크 왕복으로 복잡한 객체 그래프를 반환할 수 있습니다.
하지만 백엔드 엔지니어링 관점에서 GraphQL 서버(Apollo Server, Yoga 등)를 자체 구축하고 운영하는 것은 N+1 쿼리 방지, 스키마 유지보수, 실시간 웹소켓(WebSocket) 클러스터링, 캐싱 최적화라는 막대한 인프라 부채를 동반합니다. 이로 인해 서버리스 완전 관리형 GraphQL BaaS 도입이 대세가 되었으나, AWS AppSync, Hasura Cloud, Supabase GraphQL(pg_graphql) 3사는 아키텍처 철학과 장기 TCO(총소유비용)에서 극단적인 격차를 드러냅니다. 본 리포트에서는 3사의 요금 구조, 쿼리 엔진 성능, 보안 모델, 그리고 트래픽 규모별 실질 비용을 철저히 해부합니다.
1. 서버리스 GraphQL 백엔드 3사 핵심 아키텍처 및 철학 비교
세 플랫폼은 GraphQL 쿼리를 해석하고 데이터베이스와 통신하는 런타임 레이어의 위치에서 근본적으로 다릅니다.
| 비교 항목 | AWS AppSync | Hasura Cloud | Supabase GraphQL (pg_graphql) |
|---|---|---|---|
| 엔진 런타임 위치 | AWS 관리형 분산 서버리스 게이트웨이 | Haskell/Rust 기반 고성능 API 프록시 계층 | PostgreSQL 내부 네이티브 Rust 확장(Extension) |
| 지원 데이터 소스 | DynamoDB, Lambda, RDS, OpenSearch, EventBridge | PostgreSQL, MySQL, SQL Server, BigQuery, Mongo | 자체 PostgreSQL 데이터베이스 (단일 DB) |
| 스키마 생성 방식 | SDL(Schema Definition Language) 수동 설계 | DB 테이블/외래키 기반 자동 생성 + 커스텀 확장 | Postgres 카탈로그(스키마/주석) 기반 100% 자동 반영 |
| 리졸버 구현 언어 | JavaScript (APPSYNC_JS) / VTL 템플릿 | 선언적 메타데이터 + Webhook Actions / Remote Schemas | PostgreSQL 함수(PL/pgSQL) 및 Edge Functions |
| 오픈소스 및 셀프호스팅 | 불가 (AWS 독점 클라우드) | v2/v3 Community 에디션 지원 (일부 엔터프라이즈 제외) | 완전 오픈소스 (Postgres 확장으로 어디서나 실행) |
2. 가격 정책 및 API/WebSocket 연결 요금 체계 정밀 비교
GraphQL 서비스의 청구서는 HTTP 요청 수, 데이터 전송량, 그리고 실시간 서브스크립션 연결 시간에 의해 결정됩니다.
| 요금제 세부 항목 | AWS AppSync | Hasura Cloud | Supabase GraphQL |
|---|---|---|---|
| 기본 플랜 요금 | 기본료 $0 (순수 사용량 종량제) | Base: 월 $99 / Enterprise: 수천 달러 | Pro: 월 $25 (DB + Auth + Storage 통합) |
| Query / Mutation 요청 요금 | 100만 건당 $4.00 (첫 2.5억 건) | 데이터 전송량 기반 (GB당 $1.50) | $0 (요청 횟수 무제한 완전 무료) |
| 실시간 WebSocket 연결 요금 | 100만 연결 분당 $2.00 | 동시 연결 수 기준 (Base 한도 내 포함) | 월 500개 동시 연결 무료 (초과 시 정액 추가) |
| 실시간 메시지 발송 요금 | 100만 건당 $0.09 | 대역폭(GB)으로 통합 과금 | 월 500만 건 무료 ($2.50 per 100만 건) |
| 캐싱(Caching) 레이어 비용 | 전용 캐시 인스턴스 시간당 과금 (0.5GB: 월 ~$37) | Hasura Cloud 내장 (Enterprise 전용 고가) | PostgreSQL Shared Buffers 메모리 캐시 활용 |
3. 데이터 소스 연동성 및 N+1 쿼리 최적화 메커니즘
GraphQL 생태계에서 가장 악명 높은 병목은 연관된 객체를 순회 조회할 때 수백 개의 DB 쿼리가 연쇄 발생하는 N+1 쿼리 문제입니다. 각 솔루션의 해결 방식이 서비스의 응답 지연 시간(Latency)을 결정합니다.
| 성능 및 아키텍처 지표 | AWS AppSync | Hasura Cloud | Supabase GraphQL |
|---|---|---|---|
| N+1 쿼리 해결 기법 | BatchGetItem / Lambda DataLoader 수동 구성 | 단일 최적화 SQL(JIT Compiler) 자동 변환 | Postgres 내부 AST 컴파일 및 단일 쿼리 실행 |
| 단일 요청 내부 DB 왕복 횟수 | 리졸버 depth마다 네트워크 왕복 발생 (다수) | 단 1회 DB 네트워크 왕복 (극단적 효율) | 0회 (DB 엔진 내부에서 자체 완결) |
| 평균 API 응답 레이턴시 | 15~40ms (Lambda 호출 시 콜드스타트 추가) | 3~8ms (초저지연 고속 컴파일) | 2~6ms (네트워크 프록시 없는 네이티브) |
| 다기종 DB 연합(Federation) | AppSync Merged APIs 지원 | Remote Schemas & Data Federation 최강 | 미지원 (PostgreSQL 단일 데이터베이스 특화) |
4. 보안 거버넌스 및 엔터프라이즈 권한 모델 실무 비교
누가 어떤 필드를 읽고 수정할 수 있는지를 통제하는 권한 부여(Authorization) 아키텍처는 엔터프라이즈 B2B 시장의 핵심 승부처입니다.
| 보안 및 인증 거버넌스 | AWS AppSync | Hasura Cloud | Supabase GraphQL |
|---|---|---|---|
| 인증 연동 (Authentication) | AWS IAM, Cognito, OIDC, API Key | JWT Claims, Webhook Auth, API Secret | Supabase Auth (JWT) 및 PostgreSQL 역할(Role) |
| 행 수준 보안 (Row-Level Access) | 리졸버 코드 내부 수동 필터링 쿼리 작성 | 선언적 JSON 권한 규칙 (X-Hasura-User-Id) | PostgreSQL RLS (Row Level Security) 네이티브 |
| 열 수준 보안 (Column-Level Access) | 필드별 리졸버 권한 지시자(@auth) 분기 | 역할별 노출 컬럼 체크박스 GUI 설정 | PostgreSQL Column Grant 권한 반영 |
| DDoS 및 쿼리 깊이 제한 | AWS WAF 연동 및 Rate Limiting 기본 탑재 | Depth Limit, Node Limit 내장 | Postgres statement_timeout 및 리소스 한도 |
💻 실무 코드 비교: 리졸버 및 보안 권한 선언
1) AWS AppSync 자바스크립트 리졸버 (`APPSYNC_JS`): DynamoDB 테이블에서 유저 소유의 데이터만 조회하는 파이프라인 리졸버 코드입니다.
// AppSync JavaScript Resolver (Query.getOrder)
import { util } from '@aws-appsync/utils';
export function request(ctx) {
const { id } = ctx.args;
return {
operation: 'GetItem',
key: util.dynamodb.toMapValues({ id }),
};
}
export function response(ctx) {
const { result } = ctx;
const currentUserId = ctx.identity.sub;
// 소유자 검증: 다른 유저의 주문이면 403 에러 발생
if (result && result.ownerId !== currentUserId) {
util.unauthorized();
}
return result;
}
2) Supabase `pg_graphql` 활성화 및 PostgreSQL RLS 보안 선언: 별도의 리졸버 코드 없이 SQL 몇 줄로 자동 GraphQL 엔드포인트와 완벽한 행 수준 격리가 완성됩니다.
-- Supabase pg_graphql 활성화 (PostgreSQL 네이티브)
CREATE EXTENSION IF NOT EXISTS pg_graphql;
-- 주문 테이블 생성
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer_id UUID REFERENCES auth.users(id),
total_amount NUMERIC(10, 2) NOT NULL,
created_at TIMESTAMPTZ DEFAULT now()
);
-- RLS 활성화: GraphQL 쿼리 시 자동으로 이 조건이 주입됨
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Customers can only query their own orders"
ON orders FOR SELECT
TO authenticated
USING (customer_id = auth.uid());
-- 클라이언트는 이제 별도 백엔드 없이 즉시 GraphQL 호출 가능:
-- query { ordersCollection(filter: { totalAmount: { gt: 100 } }) { edges { node { id totalAmount } } } }
5. 트래픽 규모별 3대 워크로드 시나리오 TCO 시뮬레이션
스타트업부터 글로벌 서비스까지 실제 월간 API 호출 수와 실시간 연결에 따른 청구서 총비용을 산출했습니다. (환율 1,350원 기준 계산)
| 워크로드 시나리오 | AWS AppSync | Hasura Cloud | Supabase GraphQL |
|---|---|---|---|
| 시나리오 A: 시드/초기 서비스 • 월 API 요청 500만 건 • 실시간 웹소켓 미사용 |
월 $20 500만×$4.00 (연 약 32만 원) |
월 $0 (Free) or $99 Base 플랜 도입 시 (연 약 160만 원) |
월 $25 Pro 기본 플랜 통합 (연 약 40만 원) |
| 시나리오 B: 시리즈 A 성장기 • 월 API 요청 3,000만 건 • 피크 동시접속 2,000명 (월 5,000만 분 연결) |
월 $220 요청($120) + 소켓($100) (연 약 356만 원) |
월 $174 Base($99) + 데이터전송($75) (연 약 281만 원) |
월 $40 Pro($25) + Compute Small($15) (연 약 64만 원, 82% 절감) |
| 시나리오 C: 엔터프라이즈 스케일업 • 월 API 요청 2억 건 • 상시 대규모 서브스크립션 스트리밍 |
월 $1,450 요청($800) + 소켓($650) (연 약 2,349만 원) |
월 $1,800+ Enterprise 커스텀 계약 (연 약 2,916만 원) |
월 $135 Pro($25) + Medium($60) + Realtime($50) (연 약 218만 원, 90% 이상 절감) |
6. 데이터 주권, 벤더 종속(Lock-in) 및 생태계 위험도 비교
클라우드 인프라 전략에서 마이그레이션 용이성과 벤더 독점 정책 변경에 대한 내구성을 평가합니다.
| 거버넌스 및 독립성 지표 | AWS AppSync | Hasura Cloud | Supabase GraphQL |
|---|---|---|---|
| 벤더 락인(Lock-in) 수준 | 매우 높음 (AWS 전용 리졸버 및 서비스 결합) | 보통 (독자 메타데이터 스펙 존재) | 전무 (Zero) (표준 PostgreSQL RLS & 함수) |
| 온프레미스 / 에어갭(Air-gapped) 실행 | 불가능 | 도커 컨테이너로 사내망 실행 완벽 지원 | 일반 PostgreSQL 인스턴스에 확장 설치 가능 |
| 최근 라이선스 및 정책 변경 리스크 | AWS 정책 유지 (안정적) | v3 전환 과정에서 상용화 및 과금 강화 논란 | Apache 2.0 오픈소스 기반 (영구 무료 공개) |
7. 테크 리더를 위한 최종 의사결정 매트릭스
조직의 아키텍처 환경과 비즈니스 특성에 맞춘 명확한 최종 도입 가이드를 제시합니다.
| 비즈니스 환경 및 요구사항 | 최적 추천 솔루션 | 선택 핵심 이유 및 실무 팁 |
|---|---|---|
| PostgreSQL 중심의 모던 풀스택 & 비용 절감 극대화 | Supabase GraphQL | 요청당 과금이 전무하고 DB 컴퓨팅 정액제만 발생하므로 대규모 트래픽에서 압도적 TCO 절감 달성. PostgreSQL RLS와 완벽 결합된 네이티브 보안 및 락인 제로. |
| 다중 이기종 데이터베이스 통합 & 엔터프라이즈 빠른 API화 | Hasura Cloud | 기존 레거시 RDBMS(MySQL, MSSQL, Oracle)와 Postgres를 단일 GraphQL 게이트웨이로 통합해야 할 때 독보적 생산성 제공. 단, 엔터프라이즈 고정 라이선스 예산 편성 필수. |
| 100% AWS 네이티브 인프라 & 엔터프라이즈 IAM 거버넌스 | AWS AppSync | DynamoDB, Lambda, EventBridge와의 네이티브 결합이 필요하고 AWS 기업 약정 크레딧(EDP)을 소진해야 하는 엔터프라이즈 환경에서 가장 안전한 엔터프라이즈 표준 선택지. |
💡 PLGL Lab 엔지니어링 아키텍처 결론
신규 프로젝트나 PostgreSQL 기반 웹/모바일 서비스라면 API 요청당 과금이 전혀 없고 RLS 기반 보안이 네이티브로 보장되는 Supabase GraphQL을 1순위로 채택하는 것이 수천만 원의 클라우드 API 게이트웨이 요금을 아끼는 가장 현명한 실무 선택입니다. 만약 엔터프라이즈 레거시 이종 DB 통합이 최우선이라면 Hasura를, 대규모 AWS 서버리스 에코시스템 연동이 필수적이라면 AppSync를 선별 도입하는 '목적 기반 API 아키텍처' 전략을 강력히 권장합니다.