Appearance
Supabase Storage: avatars 버킷 설정
avatars 버킷에서 사용자별 업로드 파일만 허용하고, 공개 URL 조회를 허용하는 기본 설정 가이드입니다.
1. Storage 버킷 생성
- Supabase Dashboard → Storage → New bucket
- Name:
avatars - Public bucket: false 권장
- Create bucket
2. RLS 정책( SQL Editor )
avatars 업로드/수정/조회가 실패하는 경우 아래 정책을 Storage SQL Editor에서 실행하세요.
INSERT: 내 파일만 업로드 가능UPDATE: 내 파일만upsert: true포함 수정 가능SELECT: 공개 읽기 허용
sql
-- avatars 버킷 RLS 정책
CREATE POLICY "Users can upload own avatar"
ON storage.objects FOR INSERT TO authenticated
WITH CHECK (
bucket_id = 'avatars'
AND (storage.foldername(name))[1] = auth.uid()::text
);
CREATE POLICY "Users can update own avatar"
ON storage.objects FOR UPDATE TO authenticated
USING (
bucket_id = 'avatars'
AND (storage.foldername(name))[1] = auth.uid()::text
)
WITH CHECK (
bucket_id = 'avatars'
AND (storage.foldername(name))[1] = auth.uid()::text
);
CREATE POLICY "Avatar images are publicly readable"
ON storage.objects FOR SELECT TO public
USING (bucket_id = 'avatars');3. 점검 체크리스트
| 항목 | 설명 |
|---|---|
| 버킷명 | avatars |
| 공개 정책 | Public bucket은 사용하지 않는 한 비활성 권장 |
| 업로드 경로 | avatars/{user_id}/avatar.jpg 형태 권장 |
| 핵심 실수 | INSERT/UPDATE 정책이 없으면 new row violates row-level security policy 오류 발생 |
4. 프론트 사용 예시
- 파일 경로 예시:
avatars/{user_id}/avatar.jpg - 업로드 후 공개 URL 생성:
storage.from('avatars').getPublicUrl(path) - 사용자 메타(
avatar_url) 저장:auth.updateUser({ data: { avatar_url } })