문제 상황

포트폴리오 페이지 접속 시 아래 에러가 발생합니다:

Error: {
  code: '42P17',
  message: 'infinite recursion detected in policy for relation "artist_members"'
}

발생 위치: src/app/(portfolio)/page.tsx:15

const artist=await getArtistBySlug(tenant.slug);

재현 방법

  1. 개발 서버 실행: npm run dev
  2. 브라우저 접속: http://wonjae.localhost:3000
  3. 콘솔에서 즉시 에러 확인

예상 원인

artist_members 테이블의 RLS 정책이 자기 자신을 참조하고 있는 것 같습니다.

현재 정책 (예시):

-- artist_members 테이블의 SELECT 정책
EXISTS(
SELECT1FROM artist_members am-- ← 여기서 다시 artist_members 조회
WHERE am.artist_id = artist_members.artist_id
)

이렇게 되면 정책 검사를 위해 테이블을 조회하고, 그 조회에도 정책이 적용되어 무한 반복됩니다.

제안 해결책

PostgreSQL 문서에 따르면 SECURITY DEFINER 함수를 사용하면 RLS를 우회할 수 있다고 합니다.

-- 헬퍼 함수 (RLS 우회)
CREATEFUNCTION is_artist_member(artist_id UUID)
RETURNS BOOLEANAS $$
SELECTEXISTS(SELECT1FROM artist_membersWHERE...)
$$LANGUAGEsqlSECURITYDEFINER STABLE;

-- 정책에서 함수 사용
CREATE POLICY "Members view team"ON artist_members
FORSELECT
USING(is_artist_member(artist_members.artist_id));

임시 조치 (적용 완료 ✅)

개발을 계속하기 위해 TEMP_20251215_disable_recursive_policies.sql 마이그레이션을 임시로 적용했습니다.

적용된 임시 정책: