인기

Supabase RLS 정책 5분 템플릿 — 복붙용 공유합니다

S
@sora
3시간 전 · 조회 3.1k

바이브코딩으로 앱 만들 때 제일 많이 터지는 게 RLS라서, 제가 매번 쓰는 기본 템플릿을 공유해요. 테이블마다 본인 행만 접근하게 만드는 4종 세트입니다.

1. 먼저 RLS를 켭니다

테이블을 만들면 RLS는 꺼져 있어요. 켜지 않으면 정책을 아무리 짜도 적용되지 않습니다. 가장 먼저 켜세요.

sql
alter table your_table enable row level security;

2. 본인 행만 보이게 (SELECT / INSERT / UPDATE / DELETE)

user_id 컬럼이 auth.uid()와 매칭되는 구조 기준입니다. 대시보드 → SQL Editor에 붙여넣고 your_table만 바꾸면 돼요.

sql
-- 본인 행만 조회
create policy "select_own" on your_table
  for select using (auth.uid() = user_id);

-- 본인 행만 추가 (with check 필수!)
create policy "insert_own" on your_table
  for insert with check (auth.uid() = user_id);

-- 본인 행만 수정
create policy "update_own" on your_table
  for update using (auth.uid() = user_id);

-- 본인 행만 삭제
create policy "delete_own" on your_table
  for delete using (auth.uid() = user_id);
insert 정책에 with check를 빠뜨리면, 남의 user_id로 행을 끼워 넣을 수 있어요. 가장 흔한 실수입니다.

3. 공개돼야 하는 테이블만 예외

리더보드처럼 공개돼야 하는 테이블만 따로 public read 정책을 추가하세요. 나머지는 다 잠그는 게 기본값이에요.

S
Supabase 대시보드 — RLS 정책 적용 화면
sql
create policy "public_read" on leaderboard
  for select using (true);

이대로 깔고 시작하면 바이브코딩 앱에서 터지는 RLS 사고 대부분은 예방돼요. 진단 돌려서 A 나오는지 확인해보세요!

supabaserls템플릿
댓글 2

댓글 2

Y
J
@jihoon2시간 전 베스트 댓글

이거 진짜 꿀이네요. 저장했습니다. insert 정책에 with check 빠뜨려서 한참 헤맸었는데…

R
@ramen1시간 전

public read 따로 빼는 부분 설명 감사해요. 리더보드만 열고 나머지 잠그니까 A- 나왔어요!