# Supabase·Vercel에서 옮기기

Supabase나 Vercel로 만든 앱은 코드를 거의 고치지 않고 옮겨요. 단계마다 그대로 도는 것과 확인할 것을 적었어요. 순서대로 하세요.

## 1. 프로젝트를 만들고 폴더를 연결해요

`create_project`(리전은 한 번만 고르고, blackwall://start 참고). 앱 폴더에서 `oneend login --token <토큰>`, `oneend link --project <ref>` (blackwall://cli).

## 2. 데이터베이스를 옮겨요

`oneend db pull`이 현재 스키마를 첫 마이그레이션으로 만들고, 버전 붙은 SQL은 `oneend db push`로 적용해요 (blackwall://migrations).
Supabase용 SQL은 그대로 돌아요. `public.`·`auth.`·`storage.`와 `anon`·`authenticated`·`service_role`이 바뀌고, 응답의 `translated`에 바뀐 것이 적혀요 (blackwall://access-rules).
커스텀 스키마, `pg_cron`, `pg_net`, Vault도 돼요 (blackwall://database-features). 동기식 `http` 확장은 없어요. `net.http_get`이나 함수를 쓰세요.
**옮긴 뒤 확인:** list_policies로 이 프로젝트의 실제 역할 이름을 보세요. 표가 비어 보이면 거의 항상 접근 규칙 때문이에요 (blackwall://access-rules).

## 3. supabase-js는 그대로 써요

주소를 `https://<ref>.<zone>`, 키를 공개 키로 바꿔요. `SUPABASE_URL`, `SUPABASE_ANON_KEY`, `SUPABASE_SERVICE_ROLE_KEY`(와 `NEXT_PUBLIC_` 형태)는 빌드와 함수에 이미 들어 있어서 `createClient(Deno.env.get('SUPABASE_URL')!, ...)`를 고치지 않아도 돼요 (blackwall://env).
`generate_typescript_types`가 `Database` 타입을 만들어요 (blackwall://migrations).

## 4. 로그인과 파일

제공자, 리디렉트 주소, `custom:<이름>` OAuth 제공자는 blackwall://auth, 버킷·서명 URL·S3 호환 접근은 blackwall://storage에 있어요.

## 5. 함수

Supabase용 Deno 함수는 그대로 돌아요. `Deno.serve`, `npm:` import, `_shared` 폴더, 부른 사람의 `Authorization` 헤더도 돼요. 폴더는 `oneend functions deploy <이름> <폴더>`로 배포해요 (blackwall://functions).
한 번의 호출은 기본 150초까지 걸려요. Supabase와 같아요.

## 6. 사이트를 배포해요

git에 푸시하거나 배포 도구를 써요 (blackwall://deploy). 도메인·리디렉트·프리뷰 보호는 blackwall://domains, blackwall://previews에 있어요.
`@vercel/analytics`와 `@vercel/speed-insights`를 쓰는 앱은 코드 변경 없이 집계돼요. `track` 사용자 이벤트는 아직 저장하지 않아요 (blackwall://edge).

## 같지 않은 것

- 직접 연결(psql)은 이름이 바뀌지 않아요. `app_<ref>` 이름을 쓰세요.
- 데이터 API는 다른 스키마를 노출하기 전까지 public만 답해요.
- 여기 없는 것은 약속하지 않아요. 쓰기 전에 그 문서를 확인하세요.

---

https://end.blackall.ai/docs/switch?lang=ko
