프로젝트, 키, 행 권한을 나눕니다.
Supabase 프로젝트 하나가 Postgres 데이터베이스 하나다. 대시보드에서 테이블을 만들면, 그 테이블을 HTTP로 읽고 쓰는 API가 같이 생긴다. Next.js는 SQL을 브라우저에 붙이지 않고 이 API를 호출한다.
| 키 | 두는 곳 | 하는 일 |
|---|---|---|
| publishable 키 | NEXT_PUBLIC_ 환경 변수. 브라우저에 나가도 된다. |
요청자 행세. 정책이 허용한 행만 본다. 옛 화면의 anon 키와 같은 역할이다. |
| secret 키 | 서버 전용. NEXT_PUBLIC_을 붙이지 않는다. |
Row Level Security를 건너뛴다. 관리 작업에만 쓴다. |
이 강좌의 예제는 publishable 키만 쓴다. secret 키로 앱 화면을 만들면, 정책을 켜도 그 요청은 모든 행을 볼 수 있다.
RLS는 테이블에 “이 요청은 어떤 행을 볼 수 있는가”를 적는 Postgres 장치다. 켜 두면 정책이 없는 동작은 거절된다. publishable 키로 select했는데 빈 배열이 오면, 테이블이 비었거나 정책이 없는 경우가 많다.
정책 문법은 SQL이다. 읽기 예시는 읽기·쓰기에 두고, 테이블을 나누는 기준은 PostgreSQL · 관계·정규화에 있다.