피드로 돌아가기
Dev.toInfrastructure
원문 읽기
PostgreSQL RLS 통합을 통한 S3 기반 객체 저장소 보안 및 최적화 설계
Supabase Storage Deep Dive — Bucket Design, Signed URLs, Image Transforms, and RLS
AI 요약
Context
전통적인 Object Storage 환경에서 액세스 제어 로직이 애플리케이션 코드에 산재하여 발생하는 관리 복잡성 해결 필요. S3 호환 저장소와 DB 권한 체계를 일원화하여 보안 일관성을 확보하고자 함.
Technical Solution
- PostgreSQL Row Level Security(RLS)를 Storage Object에 직접 적용하여 SQL 레벨에서 데이터 접근 권한을 중앙 집중화한 구조 설계
- 데이터 성격에 따라 Public(CDN 캐시 최적화)과 Private(Signed URL 기반 시한부 접근) Bucket을 분리하여 보안성과 성능을 동시에 확보
- CDN Edge 단계에서 Image Transformation 및 WebP 변환을 수행하여 원본 서버 부하 감소 및 네트워크 트래픽 최적화
- Edge Function을 통한 Storage Upload와 DB Insert의 원자성(Atomicity) 보장을 위한 롤백 로직 구현으로 데이터 무결성 유지
- Client-side 10MB 용량 제한 및 MIME 타입 검증을 통한 불필요한 요청 차단과 Server-side RLS를 통한 최종 Trust Boundary 구축
Key Takeaway
인프라의 권한 관리 체계를 애플리케이션 레이어가 아닌 데이터 레이어(SQL)로 내재화하여 보안 정책의 단일 진실 공급원(Single Source of Truth)을 구축하는 설계 원칙
실천 포인트
- 공개 프로필 이미지와 같은 정적 자산은 Public Bucket으로 설정하여 CDN 캐시 효율 극대화 - 사용자 민감 문서 접근 시 유효기간 3600초(1시간) 내외의 Signed URL 생성 및 Edge Function을 통한 service_role 노출 방지 - 파일 업로드와 DB 메타데이터 기록 간의 불일치 방지를 위해 실패 시 Storage 파일을 즉시 제거하는 보상 트랜잭션 로직 적용 - 이미지 요청 시 TransformOptions를 활용한 WebP 포맷 강제 및 품질(80%) 조절로 LCP(Largest Contentful Paint) 개선