둘 다 "안전하다"고 말하지만, 디테일은 다르다
Supabase와 Firebase 모두 보안 기능을 제공한다. 하지만 작동 방식이 달라서 "어느 쪽이 더 안전한가"는 사용 방식에 따라 달라진다. 보안 관점에서 실제로 어떤 차이가 있는지 짚어보겠다.
접근 제어 방식 비교
Supabase — RLS (Row Level Security)
PostgreSQL 기반의 RLS를 사용한다. SQL 문법으로 "어떤 사용자가 어떤 행에 접근할 수 있는지"를 정의한다.
-- 본인 데이터만 조회 가능
CREATE POLICY "users_own_data" ON profiles
FOR SELECT USING (auth.uid() = user_id);
RLS는 강력하지만 활성화를 직접 해야 한다는 게 함정이다. 기본값이 비활성화라 설정 안 하면 전체 공개 상태가 된다.
Firebase — Security Rules
JSON 기반의 Security Rules를 사용한다. 컬렉션/문서 단위로 접근 권한을 정의한다.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}
Firebase의 함정은 기본 규칙이 "모두 거부"라 처음엔 안전해 보이는데, 개발하면서 편의상 allow read, write: if true;로 바꿔놓고 그냥 배포하는 경우가 있다.
인증 방식 비교
| 항목 | Supabase | Firebase |
|---|---|---|
| 소셜 로그인 | 10+ 제공업체 | 10+ 제공업체 |
| MFA | TOTP 지원 | SMS, TOTP 지원 |
| 커스텀 인증 | JWT 기반 가능 | Custom Token 방식 |
| 세션 관리 | JWT (서버에서 검증) | Firebase SDK 처리 |
실무 관점 정리
Supabase는 SQL을 잘 아는 팀에게 유리하다. 복잡한 접근 제어 로직을 SQL로 표현할 수 있고, 기존 PostgreSQL 보안 모범사례를 그대로 적용할 수 있다.
Firebase는 SQL보다 NoSQL 패턴에 익숙한 팀에게 적합하다. Security Rules 문법이 직관적이고 에뮬레이터로 로컬 테스트가 가능하다.
결론: 둘 다 제대로 설정하면 충분히 안전하다. 문제는 항상 "설정을 제대로 안 했을 때" 발생한다. 배포 전에 CodeScan으로 Supabase RLS 설정 여부를 자동 점검할 수 있다.