RLS (Row Level Security)
별칭: RLS · Row Level Security · 행 수준 보안 · 로우 레벨 시큐리티
데이터베이스 행마다 누가 읽고 수정할 수 있는지 제한하는 보안 정책.
RLS는 테이블의 각 행에 대해 접근 가능 여부를 판단하는 데이터베이스 보안 기능이다. Supabase에서는 브라우저에서 DB를 직접 호출하는 구조가 많기 때문에, 사용자별 저장 목록을 보호하려면 RLS 정책이 특히 중요하다.
정의
RLS(Row Level Security)는 데이터베이스 테이블의 행(row) 단위로 접근을 제한하는 보안 기능이다. 같은 테이블 안에 여러 사용자의 데이터가 있어도, 정책 조건을 만족하는 행만 조회·수정·삭제할 수 있게 만든다.
왜 중요한가
웹앱에서 사용자별 데이터를 한 테이블에 저장하는 것은 흔하다. 예를 들어 모든 사람의 저장 항목이 saved_public_items에 들어갈 수 있다. 이때 RLS가 없으면 한 사용자가 다른 사용자의 행을 읽거나 수정할 위험이 있다.
Semiclass에서의 의미
신원 인장 단계에서는 owner_id = auth.uid() 같은 정책으로 "내 것만 보이게" 만든다. 수업에서는 로그인 UI와 저장 기능이 끝이 아니라, DB 정책까지 붙어야 여러 사람이 함께 쓰는 서비스의 기본 안전장치가 생긴다고 설명한다.
주의할 점
Supabase에서 노출된 schema의 테이블은 RLS를 켜는 것이 기본 방어선이다. RLS를 켠 뒤 정책이 없으면 기본적으로 접근이 막힌다. 반대로 service role key는 RLS를 우회할 수 있으므로 서버 관리 작업에만 쓰고 브라우저에 노출하면 안 된다.