1. 문제 상황
아이의 기본 정보를 Supabase의 child 테이블에 저장하려고 했으나 Unauthorized (401) 오류와 함께 RLS 관련 정책 위반 메시지가 발생했습니다.
POST https://rhihezmeunossgtiviip.supabase.co/rest/v1/경로 (Unauthorized)
데이터 저장 오류
{code: '42501', details: null, hint: null, message: 'new row violates row-level security policy for table "child"'}
code: "42501"
details: null
hint: null
message: "new row violates row-level security policy for table \"child\""
}
2. 원인 분석
- child 테이블에 Row Level Security (RLS) 정책이 활성화되어 있어, 인증된 사용자만 데이터 삽입이 가능하도록 설정되어 있었습니다.
- 정책에서 user_id 필드가 인증된 사용자(auth.uid())와 일치하는지 확인하는 조건이 있었으나, 제대로 동작하지 않은 상황이었습니다.
3. 문제 해결 과정
- RLS 정책 확인: child 테이블의 정책을 다음과 같이 설정하여 인증된 사용자만 데이터 삽입이 가능하도록 했습니다.
- 정책 재확인 및 RLS 비활성화 테스트: RLS 정책에 문제가 있을 가능성을 의심해, Supabase 콘솔에서 child 테이블의 RLS를 비활성화한 후 데이터를 전송해 보았습니다. 이 방법으로 데이터 전송이 정상적으로 완료됨을 확인했습니다.
- 정책 수정 후 데이터 전송 성공: 최종적으로 RLS를 비활성화한 상태에서 데이터가 정상적으로 child 테이블에 삽입되는 것을 확인했습니다.
alter policy "Allow authenticated users to insert"
on "public"."child"
to public
with check (
(user_id = auth.uid())
);


4. 결과
정책 설정과 RLS 비활성화 작업을 통해 아이의 기본 정보가 정상적으로 데이터베이스에 저장되도록 했습니다. 또한, 이 과정에서 인증 정책과 관련된 설정을 다시 점검하게 되었으며, 다음과 같은 참고 자료를 통해 정책 설정 방법을 더 구체적으로 이해할 수 있었습니다.
5. 배운 점
이번 오류 해결 과정에서 얻은 배움은 다음과 같습니다:
- 정책의 정확한 조건 설정이 중요
Supabase의 RLS 정책이 활성화된 상태에서 인증된 사용자만 데이터에 접근할 수 있도록 설정하려면, user_id 필드와 auth.uid() 간의 일치 조건을 신중히 설정해야 합니다. RLS 정책 조건에서 필드와 인증 ID를 비교할 때 발생할 수 있는 작은 오류도 정책이 작동하지 않는 원인이 될 수 있으며, 조건 설정의 중요성을 다시금 실감하게 되었습니다. - RLS 정책 테스트와 단계별 문제 해결 접근법
문제 해결 과정에서 RLS 정책을 잠시 비활성화하여 데이터를 정상적으로 전송해 보는 방식이 유용하다는 것을 배웠습니다. 정책을 비활성화한 상태에서 오류 없이 동작하는지 확인함으로써, 정책 설정에 문제가 있음을 빠르게 파악할 수 있었습니다. 이러한 단계별 테스트 방법이 문제의 원인을 보다 정확하게 진단하고, 최종 해결책을 찾는 데 효과적임을 느꼈습니다. - 권한 관리의 세밀한 구성 필요성
인증된 사용자가 자신의 데이터에만 접근할 수 있도록 하기 위해서는, 권한 관리와 RLS 설정이 철저히 맞아야 함을 깨달았습니다. 특히 Supabase와 같은 플랫폼에서 인증 시스템을 사용할 때는 사용자별 데이터 접근 권한을 세밀히 조정해야 하며, 단순히 인증 유무만이 아니라 데이터의 필드별로도 세부적인 권한 설정이 필요함을 다시 확인했습니다. - 문서 및 사례 참고의 효과
Supabase의 공식 문서나 GitHub 이슈 등을 참고하는 것이 문제 해결에 많은 도움이 되었습니다. 특히 정책 설정 관련 참고 자료가 정확한 정책 구성에 대한 이해를 높이는 데 큰 도움이 되었으며, 앞으로 비슷한 오류가 발생할 때 빠르게 참고할 수 있는 유용한 리소스가 됨을 깨달았습니다.
이번 경험을 통해 권한 설정이 중요한 프로젝트에서, RLS 정책을 포함한 인증 정책 설정을 꼼꼼히 검토하는 것이 필요하다는 교훈을 얻었습니다. 이를 바탕으로 앞으로 데이터 접근 제어와 관련된 기능을 구현할 때 정책 설정과 테스트 과정을 더욱 체계적으로 진행할 수 있을 것입니다.
참고 자료
'🚀 프로젝트 > 따꼼' 카테고리의 다른 글
| 따꼼 트러블 슈팅 | 아이 접종 리스트 데이터 전송 오류 해결 과정 (0) | 2024.11.12 |
|---|---|
| 따꼼 트러블 슈팅 | React 프로젝트의 자녀 정보 조회 오류 해결 (0) | 2024.11.11 |
| 따꼼 트러블 슈팅 | Supabase 이미지 업로드 오류 수정 error 403 (0) | 2024.11.10 |
| 따꼼 | 프로젝트 개발 과정 (0) | 2024.11.01 |
| 따꼼 | 헬스케어 및 건강관리 서비스 프로젝트 소개 (0) | 2024.10.23 |