TL;DR

Social Animal에서 18개월 동안 30개 이상의 헤드리스 프로젝트를 배포했습니다. 최근 수입의 약 1/3은 데모는 배포했지만 프로덕션에서 깨진 디자이너 주도 빌드의 구제 작업입니다. Michael Nervegna의 Substack의 "Claude Code for Designers" 가이드는 프로토타이핑에는 정말 좋습니다 -- 하지만 행 수준 보안, 인증 토큰 새로고침, 데이터베이스 추상화 선택, 배포 롤백, Content Security Policy, 관리자 인증 이전에 멈춥니다. 이 글은 그 격차를 다룹니다. 프로덕션에 배포한다면 이것들이 필요합니다.

목차

Claude Code란 무엇이고 디자이너가 왜 사용하는가?

Claude Code는 2025년 초에 출시된 Anthropic의 터미널 기반 코딩 도구입니다. @anthropic-ai/claude-code로 실행되며 Claude Pro($20/월) 또는 Team($30/좌석/월)과 API 접근이 필요합니다. 터미널에서 자연어를 통해 코드를 작성, 편집, 디버깅합니다.

디자이너가 사용하는 이유는 "Figma에서 설계한 것"과 "작동하는 Next.js 앱"의 간격을 좁히기 때문입니다. v0이나 Bolt와 달리 Claude Code는 실제 파일 시스템에서 작동합니다. 프로젝트 구조를 읽고, 파일을 수정하고, 개발 서버를 실행하고, 오류 출력에 대해 반복합니다. 컴포넌트 계층 구조를 이해하지만 TypeScript 제네릭을 암기하고 싶지 않은 사람에게는 정말 유용합니다.

Nervegna는 이를 디자이너가 문법이 아닌 "시스템 관점으로 생각할" 수 있게 해주는 도구로 포지셔닝합니다. 우리도 동의합니다. 우리가 다른 점은 첫 npm run dev가 성공한 후에 일어나는 일입니다.

Nervegna의 가이드가 올바르게 다루는 것은?

Nervegna는 대부분의 AI 코딩 튜토리얼이 놓치는 세 가지를 정확히 다룹니다.

첫째: 프로젝트 컨텍스트. Claude Code에 프로젝트 규칙, 기술 스택, 디자인 토큰이 포함된 CLAUDE.md 파일을 제공하도록 권장합니다. CSS Modules를 사용하는 프로젝트에 대해 Claude Code가 Tailwind 유틸리티를 생성하는 경우를 봤습니다. 규칙을 설명하지 않았기 때문입니다. 코드를 작성하기 전에 컨텍스트를 설정하는 것이 올바른 접근입니다.

둘째: 반복 루프. 프롬프트, 출력 검토, 방향 수정, 반복. 그는 Claude Code를 "설명하고 배포" 버튼으로 취급하지 않습니다. 감독이 필요한 페어링 파트너로 취급합니다. 이것이 올바른 정신 모델입니다.

셋째: 작은 시작. 전체 애플리케이션 스캐폴딩을 시도하기 전에 단일 컴포넌트 또는 페이지를 구축합니다. 디자이너가 "auth, billing, admin이 포함된 전체 SaaS 대시보드를 만들어"라고 한 메시지로 프롬프트를 입력하는 경우를 봤습니다. 결과는 항상 엉망입니다. Nervegna의 증분 접근 방식은 이를 방지합니다.

Nervegna의 가이드가 디자이너를 잘 제공하는 곳은 0에서 프로토타입까지의 단계입니다. 문제는 프로토타입이 프로덕션 코드가 되고, 이것이 격차가 중요한 곳입니다.

가이드가 부족한 부분은?

Nervegna의 글은 프로토타이핑 단계에서 제공됩니다. 실제 데이터베이스, 실제 사용자, 실제 배포 인프라를 연결할 때 긴급해지는 문제를 다루지 않습니다.

부족한 것:

  1. 행 수준 보안(RLS) -- Claude Code로 생성된 Supabase 프로젝트는 거의 항상 올바른 RLS 정책이 없습니다
  2. 인증 전달 -- 개발 시 Supabase Auth와 토큰 새로고침, 세션 관리, 리디렉션 처리를 포함한 프로덕션 플로우 사이의 간격
  3. 데이터베이스 추상화 결정 -- Supabase 클라이언트 직접 사용 vs. Prisma 또는 Drizzle ORM 사용 시기
  4. 배포 롤백 전략 -- Claude Code 커밋이 프로덕션을 깰 때 어떻게 되는가
  5. Content Security Policy -- 특히 프록시/외부 자산이 있는 Next.js Image의 경우
  6. 관리자 인증 -- 간단한 사용자 인증 이상의 역할 기반 액세스가 필요할 때

각각을 살펴보겠습니다.

Claude가 잡지 못하는 행 수준 보안 문제

행 수준 보안은 데이터베이스 쿼리가 요청 사용자가 볼 수 있는 행만 반환하도록 하는 Supabase의 메커니즘입니다. Supabase에서 테이블을 만들 때 RLS는 기본적으로 비활성화됩니다. 모든 인증된 사용자 -- 또는 일부 구성에서는 모든 익명 요청 -- 모든 행을 읽을 수 있습니다.

Claude Code가 Supabase 프로젝트를 스캐폴드할 때 테이블을 만들고 클라이언트 측 쿼리를 작성합니다. 요청하면 RLS 정책을 추가하기도 합니다. 하지만 생성하는 정책은 미묘한 방식으로 종종 잘못되었습니다.

AI 생성 코드의 일반적인 RLS 실수

실수 일어나는 것 수정 방법
RLS가 활성화되지 않음 모든 인증된 사용자가 모든 데이터를 읽습니다 ALTER TABLE your_table ENABLE ROW LEVEL SECURITY;
정책이 auth.uid()를 사용하지만 테이블에 user_id 열이 없음 정책은 컴파일되지만 행을 일치시키지 않아 모든 액세스를 차단합니다 user_id UUID REFERENCES auth.users(id) 추가 및 채우기
SELECT 정책은 있지만 INSERT/UPDATE/DELETE 정책이 없음 사용자가 읽을 수는 있지만 자신의 데이터를 쓸 수 없습니다 각 작업에 대해 별도로 정책 만들기
정책이 auth.role() = 'authenticated'만 사용함 로그인한 모든 사용자가 자신의 데이터만이 아닌 모든 행을 볼 수 있습니다 auth.uid() = user_id 조건 추가
클라이언트 측 코드에서 서비스 역할 키 사용 RLS가 완전히 우회됩니다 SUPABASE_SERVICE_ROLE_KEY를 클라이언트 번들에 노출하지 마세요

마지막 것 -- 클라이언트 코드의 서비스 역할 키 -- 은 올해 디자이너 빌드 세 개 프로젝트에서 봤습니다. Claude Code는 때때로 서비스 역할 키를 사용합니다. 왜냐하면 "작동하고" 권한 오류를 던지지 않기 때문입니다. 해당 키는 모든 RLS를 우회합니다. 이는 서버 측 코드(API 경로, 서버 작업, edge 함수)에만 속합니다. use client 컴포넌트에는 절대 없습니다.

Nervegna는 가이드에서 RLS를 다루지 않는데, 이는 이해할 수 있습니다. 하지만 그의 워크플로우를 따르고 Supabase에 연결한다면 모든 테이블을 수동으로 확인하세요. Supabase SQL 편집기에서 다음을 실행합니다:

SELECT schemaname, tablename, rowsecurity
FROM pg_tables
WHERE schemaname = 'public';

사용자 데이터를 보유한 테이블에 대해 rowsecurityfalse이면 배포하기 전에 중지하고 수정합니다.

인증 전달: 프로토타입과 프로덕션 간의 간격

인증은 디자이너 주도 빌드의 가장 일반적인 실패 지점입니다. 초기 설정이 잘못되었기 때문이 아니라 -- Supabase Auth는 쉽게 스캐폴드됩니다 -- 프로덕션 인증이 로컬 개발 중에 나타나지 않는 엣지 경우를 포함하기 때문입니다.

Nervegna의 가이드는 로컬에서 작동하게 하는 데 중점을 둡니다. 배포할 때 깨지는 것:

토큰 새로고침 실패

Supabase Auth 토큰은 기본적으로 3600초(1시간) 후에 만료됩니다. Supabase 클라이언트는 이론적으로 자동으로 새로고침을 처리합니다. 실제로는 Next.js 미들웨어 또는 서버 컴포넌트가 기존 세션을 전달하지 않고 모든 요청에서 새로운 Supabase 클라이언트를 만들면 첫 시간 후에 간헐적인 401 오류가 발생합니다.

Next.js App Router를 사용할 때 @supabase/ssr(2025년 2월 기준 버전 0.5.x)과 미들웨어의 적절한 쿠키 처리가 필요합니다. Claude Code는 종종 더 이상 사용되지 않는 @supabase/auth-helpers-nextjs 패키지를 생성합니다. package.json을 확인하세요.

리디렉션 URI 불일치

OAuth 제공자(Google, GitHub)는 정확한 리디렉션 URI를 요구합니다. Claude Code는 이를 localhost:3000으로 구성합니다. Vercel 또는 Netlify에 배포할 때 OAuth 제공자의 콘솔과 Supabase의 Auth 설정 아래 "Redirect URLs"에 프로덕션 URL과 모든 preview 배포 URL을 추가해야 합니다. 이것은 5분이 걸리지만 놓치면 OAuth 로그인의 100%를 차단합니다.

세션 동기 문제

Next.js 14+에서는 서버 컴포넌트, 클라이언트 컴포넌트, 미들웨어, API 경로, 서버 작업이 있습니다 -- 모두 현재 사용자 세션이 필요할 수 있습니다. Supabase 클라이언트는 각 컨텍스트에서 다르게 생성되어야 합니다. Claude Code는 종종 단일 createClient() 유틸리티를 만들고 모든 곳에서 사용하는데, 이는 hydration 불일치와 오래된 세션을 유발합니다.

최소한 세 개의 클라이언트 생성 함수가 필요합니다:

  • 클라이언트 컴포넌트를 위한 createBrowserClient()
  • 서버 컴포넌트와 서버 작업을 위한 createServerClient()
  • 미들웨어를 위한 createMiddlewareClient()

이것은 Supabase의 SSR 가이드에 설명되어 있지만 Claude Code는 이를 일관되게 올바르게 생성하지 않습니다.

Supabase vs Prisma: Claude Code는 어느 것을 생성해야 하는가?

Nervegna는 이 결정을 다루지 않으며, 대부분의 디자이너가 실현하는 것보다 더 중요합니다.

Supabase 클라이언트(@supabase/supabase-js) 는 Supabase의 PostgREST API를 통해 데이터베이스를 쿼리합니다. 편리하고, 스키마 정의 파일이 필요하지 않으며, RLS와 직접 작동합니다. 하지만 Supabase가 생성하는 것 이상의 타입 안전성이 없으며, 응용 프로그램을 Supabase의 인프라에 긴밀하게 결합합니다.

Prisma ORM(현재 v6.x)은 PostgreSQL에 직접 연결합니다. 스키마 파일(schema.prisma), 생성된 TypeScript 타입, 마이그레이션, 데이터베이스 독립적인 쿼리를 제공합니다. 하지만 RLS 정책을 존중하지 않으며(권한 있는 사용자로 연결), 클라이언트를 생성하려면 빌드 단계가 필요합니다.

Drizzle ORM(v0.36.x)은 SQL 유사 문법과 더 나은 edge 런타임 지원이 있는 더 가벼운 대안입니다.

결정 매트릭스

요소 Supabase 클라이언트 Prisma Drizzle
RLS 지원 기본 앱 레이어에서 구현해야 함 앱 레이어에서 구현해야 함
타입 안전성 CLI를 통해 생성됨 스키마에서 생성됨 코드로서 스키마
Edge 런타임 호환성 제한적(Prisma Accelerate 필요)
디자이너를 위한 학습 곡선 낮음 중간 중간
벤더 잠금 높음(Supabase) 낮음 낮음
Claude Code 생성 품질 좋음 좋음 일관되지 않음

우리의 권장: 프로토타입을 구축하거나 항상 Supabase에서 실행할 경우 Supabase 클라이언트를 사용합니다. Supabase에서 벗어나거나 엄격한 스키마 주도 개발이 필요한 경우 Drizzle을 사용합니다. edge 런타임 제한으로 인해 새 프로젝트에서 Prisma를 사용하지 않으므로 이동했지만, Prisma Accelerate($0 for 60K queries/month, 그러면 $49/month)는 이를 개선했습니다.

CLAUDE.md 파일에서 Claude Code에 결정을 명시적으로 알려줍니다. 하지 않으면 -- 때때로 Supabase 클라이언트를 통해 쿼리, 때때로 ORM을 통해 -- 두 가지 다른 데이터 액세스 패턴으로 끝나고 같은 프로젝트에 혼합됩니다.

배포 롤백: AI 생성 코드가 깨졌을 때 어떻게 되는가

Nervegna의 가이드는 기능을 반복적으로 구축하는 과정을 안내합니다. Claude Code 커밋이 로컬 dev는 통과하지만 프로덕션을 깰 때 어떻게 되는지는 다루지 않습니다.

이것은 예상보다 자주 발생합니다. Claude Code는 단일 프롬프트 응답으로 15개의 파일을 수정할 수 있습니다. 이를 한 단위로 커밋하고 배포하면 롤백하는 것은 모든 15개의 변경을 되돌린다는 것 -- 13개가 좋았다 해도.

실용적인 롤백 전략

1. 각 Claude Code 세션이 아닌 각 논리적 변경 후에 커밋합니다. Claude가 한 세션에서 인증, UI, 데이터베이스 스키마를 수정하면 세 개의 별도 커밋을 만듭니다.

2. Vercel의 즉시 롤백을 사용합니다. Vercel에 배포할 때 모든 배포는 불변입니다. 대시보드에서 10초 미만으로 모든 이전 배포로 롤백할 수 있습니다. Netlify는 동일하게 제공합니다.

3. Claude Code에서 직접 데이터베이스 마이그레이션을 실행하지 마세요. Claude가 마이그레이션 파일을 생성하면 npx supabase db push 또는 npx prisma migrate deploy를 실행하기 전에 수동으로 검토합니다. 삭제된 열은 git revert로 롤백할 수 없습니다.

4. 알려진 좋은 상태에 태그를 지정합니다. 중요한 경로(인증, 결제, 데이터 모델)를 건드리는 Claude Code 세션을 시작하기 전에 git 태그를 만듭니다: git tag pre-auth-refactor. 문제가 있으면 git reset --hard pre-auth-refactor로 다시 돌립니다.

5. Preview 배포는 선택 사항이 아닌 필수입니다. Vercel과 Netlify는 모두 모든 PR에 대해 preview 배포를 만듭니다. main으로 병합하기 전에 preview를 클릭하지 마세요. Claude Code는 로컬에서는 작동하지만 누락된 환경 변수, edge 런타임 비호환성, 또는 CSP 위반으로 인해 프로덕션에서 실패하는 코드를 생성할 수 있습니다.

프록시된 자산을 위한 Content Security Policy

이것은 틈새이지만 디자이너 빌드 사이트를 배포할 때 매우 물립니다.

Next.js의 <Image> 컴포넌트는 기본적으로 외부 이미지를 /_next/image를 통해 프록시합니다. 이는 최적화에 좋습니다. 하지만 Content Security Policy 헤더가 있으면(있어야 함) 이미지를 가져오는 도메인을 명시적으로 허용해야 합니다.

Claude Code는 이미지 최적화를 위해 next.config.js에서 remotePatterns을 설정하지만 CSP 헤더를 추가하지 않습니다. Vercel의 보안 헤더 뒤에 배포하거나 미들웨어를 통해 자신의 헤더를 추가할 때 외부 이미지가 조용히 깨집니다 -- 로컬에서는 로드됩니다(CSP는 종종 느슨함) 하지만 프로덕션에서는 실패합니다.

미들웨어 또는 next.config.js 헤더에 필요한 최소값은:

// middleware.ts
const cspHeader = `
  default-src 'self';
  script-src 'self' 'unsafe-eval' 'unsafe-inline';
  style-src 'self' 'unsafe-inline';
  img-src 'self' blob: data: https://your-supabase-project.supabase.co https://your-cdn.com;
  font-src 'self';
  connect-src 'self' https://your-supabase-project.supabase.co;
  frame-ancestors 'none';
`;

'unsafe-eval''unsafe-inline'을 프로덕션 강화를 위한 nonce로 바꿉니다. 요점은: Claude Code가 Unsplash, Supabase Storage, 또는 다른 외부 CDN에서 이미지를 가져오고, 이러한 도메인을 CSP img-src 지시문에 추가하지 않으면 개발에서 콘솔 오류 없이 프로덕션에서 깨진 이미지가 발생합니다.

실제로 관리자 인증이 필요한 때는?

Nervegna의 가이드는 기본 사용자 인증을 다룹니다. 많은 디자이너 빌드 프로젝트는 관리자 인터페이스가 필요합니다 -- 데이터베이스에 건드리지 않고 사이트 소유자 또는 컨텐츠 팀이 데이터를 관리할 수 있는 방법입니다.

질문은: 간단한 사용자 인증 이상으로 역할 기반 액세스가 필요한 때 vs. Supabase 대시보드를 사용하는 것입니다.

사용자 정의 관리자 인증이 필요하지 않을 때:

  • 유일한 컨텐츠 관리자입니다
  • 클라이언트가 Supabase의 Table Editor를 편하게 사용합니다
  • 프로젝트가 3개 이하의 컨텐츠 타입입니다
  • 업데이트가 일주일에 한 번 미만으로 일어납니다

사용자 정의 관리자 인증이 필요할 때:

  • 기술적이지 않은 팀 멤버가 컨텐츠를 관리해야 합니다
  • 승인 워크플로우 또는 draft/publish 상태가 필요합니다
  • 프로젝트가 역할 기반 액세스를 가집니다(editor vs. admin vs. viewer)
  • 사용자 생성 컨텐츠를 관리하고 있으며 중재가 필요합니다

관리자 인증이 필요하면 가장 간단한 접근은 profiles 테이블(이는 auth.users를 미러링)에서 role 열을 가지는 것입니다(enum: 'user' | 'editor' | 'admin'). 그런 다음 이 역할을 확인하는 RLS 정책을 추가합니다:

CREATE POLICY "Admins can do anything"
ON public.posts
FOR ALL
USING (
  EXISTS (
    SELECT 1 FROM public.profiles
    WHERE profiles.id = auth.uid()
    AND profiles.role = 'admin'
  )
);

Claude Code는 특정적으로 프롬프트를 입력하면 이를 생성할 수 있습니다. 프롬프트 없이 단순 auth.uid() = user_id 정책으로 기본값을 설정합니다. 관리자 액세스를 고려하지 않는 정책입니다. 관리자가 다른 사용자의 컨텐츠를 볼 수 없는 상황이 됩니다.

Nervegna의 CLAUDE.md 파일에서 요구사항을 정의하는 워크플로우는 이것을 포착합니다 -- 구축을 시작하기 전에 역할 기반 액세스를 파일에 포함하는 것을 생각하면. 파일을 시작하기 전에 추가합니다.

Prod로 푸시하기 전에: 체크리스트

이것은 Supabase, Next.js, AI 코딩 도구로 빌드되거나 크게 도움을 받은 모든 프로젝트를 배포하기 전에 Social Animal에서 사용하는 것입니다.

데이터베이스 & 보안

  • RLS가 public 스키마의 모든 테이블에서 활성화되었습니다
  • RLS 정책이 각 테이블의 SELECT, INSERT, UPDATE, DELETE에 있습니다
  • SUPABASE_SERVICE_ROLE_KEY는 서버 측 코드에만 사용됩니다(codebase를 grep하세요: grep -r "SERVICE_ROLE" --include="*.ts" --include="*.tsx")
  • 'use client'가 포함된 어떤 파일에서도 Supabase 클라이언트가 서비스 역할 키로 생성되지 않습니다
  • 데이터베이스 마이그레이션이 수동으로 검토되었습니다
  • 외래 키 제약 조건이 예상대로 있습니다
  • WHERE 절과 RLS 정책에서 사용되는 열에 인덱스가 있습니다

인증

  • @supabase/ssr이 사용됩니다(더 이상 사용되지 않는 @supabase/auth-helpers-nextjs 아님)
  • 브라우저, 서버, 미들웨어 컨텍스트를 위한 별도의 클라이언트 생성 함수가 있습니다
  • OAuth 리디렉션 URI가 프로덕션 도메인과 preview 배포 도메인으로 구성되었습니다
  • 토큰 새로고침이 테스트됩니다(임시로 만료 시간을 짧게 설정하고 세션이 유지되는지 확인)
  • 보호된 경로는 세션이 없을 때 로그인으로 리디렉션됩니다
  • 로그아웃은 모든 쿠키와 서버 측 세션 상태를 지웁니다

관리자 & 역할

  • 관리자 기능이 있으면 역할 확인은 RLS 레벨에서 일어납니다(UI 레벨 숨김만 아님)
  • 관리자 경로는 미들웨어로 보호됩니다, 단순 조건부 렌더링만 아님
  • 새 사용자를 위한 기본 역할은 가장 권한이 적은 역할입니다

배포 & 롤백

  • 환경 변수가 배포 플랫폼에 설정됩니다
  • 마지막 주요 AI 보조 변경 이전의 알려진 좋은 git 태그가 있습니다
  • Preview 배포가 핵심 플로우를 클릭해서 테스트되었습니다
  • Vercel/Netlify 즉시 롤백이 이해되고 팀에 문서화되었습니다
  • 데이터베이스 백업이 활성화됩니다(Supabase Pro 플랜은 $25/월의 일일 백업 포함)

Content Security & 자산

  • CSP 헤더에 모든 외부 이미지 도메인이 img-src에 포함됩니다
  • CSP 헤더에 Supabase 프로젝트 URL이 connect-src에 포함됩니다
  • next.config.js remotePatterns이 CSP img-src 도메인과 일치합니다
  • 폰트는 자체 호스팅되거나 CDN이 font-src에 있습니다
  • 혼합 컨텐츠가 없습니다(HTTPS 페이지의 HTTP 리소스)

코드 품질

  • TypeScript strict 모드가 활성화됩니다("strict": true in tsconfig.json)
  • Claude Code가 오류를 억제하기 위해 추가한 @ts-ignore 또는 any 타입이 없습니다
  • npm run build가 경고 없이 통과합니다(단순 npm run dev만 아님)
  • 데이터를 가져오는 클라이언트 컴포넌트에 대해 Error 경계가 있습니다
  • 비동기 작업에 로딩 및 오류 상태가 있습니다

성능

  • 이미지가 Next.js <Image> 컴포넌트를 사용하며 widthheight 또는 fill이 있습니다
  • 서버 컴포넌트에서 가져올 수 있는 데이터에 대한 클라이언트 측 데이터 가져오기가 없습니다
  • 번들 크기가 확인되었습니다(npx next@latest build가 경로 크기 표시)
  • Lighthouse 점수가 Performance에서 90 이상입니다(localhost가 아닌 preview 배포에서 실행)

이 체크리스트는 완벽하지 않습니다. Supabase, Next.js, AI 생성 코드를 건드리는 프로젝트의 최소값입니다.

FAQ

Claude Code는 디자이너가 프로덕션 앱을 구축하기에 충분한가요?

Claude Code는 설계 의도에서 작동하는 코드를 생성하는 데 뛰어납니다. 하지만 프로덕션 준비에는 도구가 프롬프트 없이는 제공하지 않는 보안, 인증, 인프라 지식이 필요합니다. 체크리스트와 백엔드 경험이 있는 누군가의 코드 검토로 페어링합니다.

Nervegna의 가이드가 프로토타입 이상의 프로젝트에서 작동하나요?

Nervegna의 워크플로우 -- 컨텍스트 우선 프롬프팅, 증분 구축, 반복적 검토 -- 잘 확장됩니다. 간격은 RLS, 인증 엣지 경우, 배포 전략과 같은 프로덕션 문제입니다. 그의 접근은 건전합니다. 사용자 마주보는 무언가에는 보충이 필요합니다.

Claude Code로 Supabase 또는 Prisma를 사용해야 하나요?

Supabase의 클라이언트 라이브러리를 사용하려면 RLS 강제를 데이터베이스 레벨에서 원하고 Supabase 플랫폼에 헌신하는 경우. 데이터베이스 이식성과 edge 런타임 호환성을 원하려면 Drizzle ORM을 사용합니다. edge 제한으로 인해 새 프로젝트에서 Prisma를 사용하지 않으므로 이동했습니다.

Claude Code가 클라이언트 코드에서 Supabase 서비스 역할 키를 사용하는 것을 어떻게 방지하나요?

CLAUDE.md 파일에 명시적인 규칙을 추가합니다: "클라이언트 컴포넌트에서 SUPABASE_SERVICE_ROLE_KEY를 사용하지 마세요. 서버 작업, API 경로 또는 미들웨어에서만 사용하세요." Claude Code는 명확하게 설명된 프로젝트 수준 지시를 존중합니다.

Claude Code 생성 Next.js 앱을 배포하는 가장 저렴한 방법은?

Vercel의 무료 Hobby 플랜은 프로젝트당 하나의 프로덕션 배포를 지원합니다. Supabase의 무료 계층에는 500MB 데이터베이스와 1GB 파일 스토리지가 있는 2개의 프로젝트가 포함됩니다. 총 비용: 저교통 사이트의 경우 $0/월. 실제 사용자가 생기면 Vercel Pro($20/월)와 Supabase Pro($25/월)로 이동할 것으로 예상합니다.

Claude Code가 보안 문제가 있는 코드를 생성하는 빈도는?

우리의 경험상 데이터베이스 작업을 포함하는 Claude Code 세션의 약 40%는 최소한 하나의 RLS 간격이 있는 코드를 생성합니다. 악의는 아닙니다 -- 도구는 "작동하는" 코드를 최적화하며, RLS 위반은 오류를 생성하지 않습니다. 그냥 조용히 데이터를 노출합니다. 항상 수동으로 감시합니다.