콘텐츠로 건너뛰기
supastack
문서 둘러보기
웹Next.js

For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /ko/docs/web/updating-the-kit.md (or send Accept: text/markdown).

키트가 개선되면 복사본 업데이트하기

소스 저장소의 개선 사항을 복사본으로 가져오기 — 시작점을 기록하고, 새 리비전을 가져오고, 브랜치에서 머지하고, 배포 전에 검증합니다.

이 가이드에 대해 질문하기
다음에서 열기

1. 시작점 기록하기

업데이트를 붙여넣기가 아니라 작은 프로젝트로 다루세요: 가지고 있는 키트 리비전과 더 새로운 것을 비교하고, 변경 사항을 가져오고, 배포 전에 브랜치에서 테스트합니다. 프로젝트가 키트 저장소의 포크 — GitHub이 소스와 연결된 채로 유지하는 복사본 — 이든 자기 앱에 복사한 코드든 이 방법은 같습니다.

다른 무엇보다 먼저 프로젝트에 세 가지를 적은 메모를 남기세요: 시작한 키트 커밋 — SHA, Git이 정확한 버전 하나를 식별하는 짧은 코드 — 받은 저장소(supastack-web, supastack-mobile, supastack-desktop 또는 All Platforms 모노레포), 그리고 이미 직접 해 둔 변경 사항.

키트 저장소들과 모노레포는 이력이 다르므로 한쪽의 브랜치를 다른 쪽의 포크에 절대 머지하지 마세요. 시작 SHA를 기록한 적이 없다면 포크에서는 git merge-base로 가장 가까운 공유 버전을 찾거나, 선택적 도입에서는 마지막으로 복사한 파일과 테스트를 식별하세요 — 정확한 기준이 불확실할 때는 더 넓은 diff를 검토하세요.

2. 새 리비전 가져와서 머지하기

아래 명령을 프로젝트 폴더 안의 터미널에서 실행하세요. 작업은 저장하고 커밋된 상태여야 합니다 — 깨끗한 작업 트리, 그래야 절반만 된 것이 머지에 섞이지 않습니다. 꺾쇠괄호 안의 단어는 바꿔 쓸 템플릿입니다: 전체 <thing> 대신 자기 값을 넣으세요. 표시된 GitHub 주소는 자리 표시자입니다. 포크한 저장소의 주소를 사용하세요.

각 줄이 하는 일: git remote add는 복사본에 kit-upstream이라는 두 번째 주소 — 키트 저장소 — 를 가르치고, git fetch는 파일을 건드리지 않고 최신 상태를 다운로드합니다. git switch -c는 별도의 업그레이드 브랜치를 만들어 리뷰하는 동안 메인 브랜치를 그대로 둡니다. git log는 받을 커밋을 나열하고 git diff --stat은 어떤 파일이 바뀌었는지 요약합니다. 커밋 제목만이 아니라 사용하는 모듈의 전체 diff를 읽으세요. git merge는 새 코드를 업그레이드 브랜치로 가져옵니다.

Git이 kit-upstream 리모트가 이미 있다고 하면 remote add 줄을 건너뛰고 git fetch로 계속하세요. <previous-kit-sha>는 1단계에서 기록한 시작 SHA입니다.

# Upstream is the platform repository you forked — substitute its real URL
# (supastack-web shown; use supastack-mobile or supastack-desktop as fits).
git remote add kit-upstream https://github.com/<org>/supastack-web.git
git fetch kit-upstream
git switch -c upgrade/kit-update
git log --oneline <previous-kit-sha>..kit-upstream/main
git diff --stat <previous-kit-sha>..kit-upstream/main
git merge kit-upstream/main

3. 작업을 잃지 않고 충돌 해결하기

충돌은 양쪽이 같은 줄을 바꿨다는 뜻입니다: 키트가 앞으로 나아갔고 같은 곳을 커스터마이즈했습니다. Git은 머지를 멈추고 파일을 표시합니다 — 손상을 보고하는 것이 아니라 선택을 요청하는 것입니다.

표시된 각 파일을 편집기에서 열고 줄마다 결정하세요: 제품 고유의 텍스트, 이름, 설정은 유지하고 키트의 수정과 구조적 변경은 가져옵니다. 커스터마이즈한 파일을 키트의 새 버전 전체로 바꿔 충돌을 해결하지 마세요 — 작업이 지워집니다. 업그레이드 브랜치 안에서 해결하고 계속하기 전에 해결된 각 영역의 테스트를 실행하세요.

머지가 잘못되면 git merge --abort가 브랜치를 머지 전 상태로 되돌립니다. 이 플로의 어떤 것도 업그레이드 브랜치를 직접 머지하기 전까지 메인 브랜치나 배포를 바꾸지 않습니다.

4. 올바른 순서로 데이터 업데이트와 배포

새 키트 리비전은 데이터베이스를 바꿀 수 있습니다. packages/db/drizzle/ — 마이그레이션 폴더 — 의 새 파일을 읽고 마이그레이션 적용 전에 프로덕션 데이터를 백업하세요. 먼저 일회용 복사본에서 테스트하세요. 필요한 코드보다 호환되는 스키마 변경을 먼저 배포하세요: 마이그레이션이 데이터를 제거하거나 재구성하면 앱 코드만 롤백해서는 옛 스키마를 복원할 수 없습니다.

새 .env.example을 자기 설정과 비교하고 호스팅 대시보드에 새로 필요한 값을 추가하세요. .env 파일은 시크릿을 담고 Git에 절대 커밋되지 않습니다 — 각 머신과 배포에서 손으로 다시 만들며, NEXT_PUBLIC_와 EXPO_PUBLIC_ 값에는 넣지 않습니다.

배포 전에 키트 자체의 검증 게이트를 실행하세요. All Platforms 모노레포에서 corepack pnpm check:local은 유료 자격 증명 없이 lint, typecheck, 단위 테스트, 형식 검사를 실행합니다. corepack pnpm verify:local은 프로덕션 빌드와 브라우저 테스트 스위트를 추가합니다. 단일 표면 포크에서는 그 저장소 자체의 테스트와 빌드 명령을 실행하세요. 그다음 스테이징 스모크 패스를 하세요: 로그인하고, 두 번째 워크스페이스를 시도하고, 제품의 주요 사용자 여정을 실행하세요.

모두 통과하면 수용한 대상 SHA와 해결한 충돌을 적어 두세요 — 그 메모가 다음 업데이트의 시작 기준입니다.

corepack pnpm check:local
# fuller gate: adds the production build and browser suites
corepack pnpm verify:local

5. 포크 대신 일부만 복사했다면

선택적 도입 — 키트 모듈을 기존 앱에 복사 — 은 키트와 Git 이력을 공유하지 않으므로 git merge가 도움이 되지 않습니다. 대신 옛 소스 SHA와 대상 소스 SHA를 비교하고, 도입한 부분에 닿는 변경만 옮기세요.

모듈의 공개 타입, 영속화 스키마와 마이그레이션, 서버 호출자, 구성, 테스트, 문서를 하나의 단위로 검토하세요 — 패키지 안의 변경은 다른 곳의 맞춤형 라우트나 환경 변경을 요구할 수 있고, 헬퍼 하나만 복사하면 나머지가 오래된 계약에 남습니다. 짧은 적응 메모 — 어떤 키트 파일을 가져왔고, 무엇을 건너뛰고, 무엇을 바꿨는지 — 를 남기면 다음 업데이트가 선택을 재생할 수 있습니다.

업데이트가 실행 중인 복사본의 무언가를 깨면 자기 변경을 되돌리기 전에 문제 해결 가이드를 먼저 따라가세요.

자주 묻는 질문

질문 14개

supastack이란 무엇인가요?

supastack은 AI SaaS 제품을 구축하기 위한 모듈식 기반입니다. 공통 인프라를 모아두어 제품 고유의 기능에 집중할 수 있습니다.

웹과 모바일을 지원하나요?

네. supastack에는 웹과 모바일 경험의 출발점으로 Next.js 앱과 Expo 앱이 포함되어 있습니다.

어떤 인증이 포함되어 있나요?

Better Auth가 이메일/비밀번호, OTP, 소셜 로그인을 커버합니다. 개인 워크스페이스는 계정과 함께 프로비저닝되어 첫날부터 레코드가 경계 안에 유지됩니다.

AI는 어떻게 지원되나요?

supastack에는 구성 가능한 멀티 프로바이더 AI, 사용량 추적, 예산, 암호화된 자체 키(BYOK) 지원이 포함되어 있습니다.

구독은 어떻게 관리되나요?

이 키트 위에 구축된 제품에서는 Stripe 결제, 구독, 권한이 유료 액세스의 기반을 형성합니다. 프로바이더 시크릿은 서버 측에 유지됩니다.

제품 고유 코드는 어디에 두나요?

제품 고유 기능은 별도의 코드베이스에 두고, 제품이 supastack 기본 모듈을 구성하고 통합합니다.

supastack 가격은 어떻게 되나요?

키트는 평생 업데이트가 포함된 일회성 구매입니다: 단일 프레임워크 $249(기간 한정 출시 가격 — 정가 $349에서 $100 할인) 또는 모든 프레임워크(Next.js, iOS, Android) $499(기간 한정 출시 가격 — 정가 $599에서 $100 할인), 추가 개발자 시트당 $75. 키트 구독은 없습니다. 이 사이트의 체크아웃은 라이선스 키를 이메일로 전달하고 GitHub 초대로 리포지토리 액세스를 제공합니다.

워크스페이스는 내 데이터를 어떻게 경계 짓나요?

사용자 레코드는 workspaceId로 범위가 지정됩니다. 신원, 권한, AI 사용량, 결제 이벤트, 감사 항목은 개인 워크스페이스 경계 안에 유지됩니다.

백그라운드 작업은 어떻게 작동하나요?

Trigger.dev가 명시적인 작업 런타임입니다. JobRunner 계약은 enqueue, status, cancel만 약속하며 — 워크플로 의미는 Trigger.dev 고유이고 명시적입니다.

이메일과 아웃리치는 어떻게 다른가요?

트랜잭션 이메일은 작업 완료 알림 같은 제품 워크플로를 커버합니다. 콜드 아웃리치와 캠페인은 제품 자체에 속하며 이 키트의 이메일 모듈 밖입니다.

모바일 구매는 어떻게 작동하나요?

모바일은 RevenueCat 네이티브 구매와 복원을 지원하며 서버에서 접근 권한을 검증합니다. 출시 전에 스토어 계정을 설정하고 기기 테스트를 완료하세요. 웹 결제는 별도로 관리합니다.

AI 프로바이더 키는 어디에 있나요?

BYOK 자격 증명은 암호화되어 서버 측에 유지됩니다. 키는 로그에서 삭제되며, 사용량과 예산은 워크스페이스 수준에서 확인할 수 있습니다.

체크아웃에서 어떤 결제 수단을 지원하나요?

Stripe 호스팅 체크아웃은 카드를 받으며, Stripe 계정에서 지갑을 활성화하면 Alipay와 WeChat Pay도 제공할 수 있습니다 — 중국 구매자에게 유용합니다. 지갑 승인은 비동기로 확정되므로 결제가 완료되는 즉시 라이선스 페이지가 갱신됩니다.

환불을 받을 수 있나요?

저장소 접근 권한을 얻은 후에는 supastack이 영구적으로 귀하의 소유가 되므로 환불이 불가능합니다. 하지만 안심하세요. 평생 업데이트가 포함된 전체 소스 코드를 받아 자신이나 고객을 위한 제품을 무제한으로 구축하고 출시할 수 있습니다. 단, 코드를 재판매하거나 저장소를 스타터 키트 또는 템플릿으로 재배포할 수는 없습니다.

KO
테마