이 문서에서 다루는 내용
준비물
- 솜사탕 계정과 로그인할 이메일 주소
- GitHub 계정과 배포할 저장소. private 저장소는 GitHub App 설치 범위에 포함해야 합니다.
- 지원되는 앱 구성. 먼저 프레임워크 지원을 확인하세요.
- 앱이 요구하는 외부 API 키나 설정값. 실제 비밀값은 저장소에 커밋하지 마세요.
첫 배포
- 1새 프로젝트를 만듭니다대시보드에서 프로젝트 이름을 입력하면 첫 리소스를 고르는 화면이 열립니다.
- 2GitHub 저장소 배포를 선택합니다첫 배포 추천 항목에서 저장소를 고릅니다. 목록에 없다면 GitHub App의 저장소 접근 범위를 확인하세요.
- 3브랜치와 서비스 설정을 확인합니다GitHub에서 확인된 실제 브랜치를 선택하고, 모노레포라면 Root Directory를 앱 폴더로 지정합니다.
- 4환경변수를 저장합니다앱 실행에 꼭 필요한 값만 저장합니다. 변경된 변수는 다음 배포부터 적용됩니다.
- 5배포하고 URL을 엽니다배포 상태가 ACTIVE가 되면 기본 HTTPS 주소를 열어 핵심 화면과 API 응답을 확인합니다.
웹 서버 실행 계약
서버 앱은 솜사탕이 제공하는 PORT를 읽고 모든 네트워크 인터페이스에 바인딩해야 합니다. 포트를 코드에 고정하면 배포 후 응답 확인에 실패할 수 있습니다.
const port = Number(process.env.PORT || 3000);
app.listen(port, "0.0.0.0");앱 유형별 최소 설정
저장소가 아래 대표 구성과 비슷하다면 먼저 이 조합으로 배포합니다. 명령은 샘플이므로 실제package.json, Python 모듈 이름과 Root Directory를 기준으로 조정하세요.
Next.js
Nodepackage.json에 build와 start script가 모두 있는 서버 렌더링 앱
- 빌드
npm run build- 실행
npm run start
확인: start script가 next start를 실행하고 lockfile이 저장소에 포함되어 있어야 합니다.
Vite / React SPA
Static빌드 결과물이 dist 폴더에 생성되는 정적 프론트엔드 앱
- 빌드
npm run build- 실행
별도 입력 없음 · dist 자동 실행
확인: 브라우저 공개 환경변수는 빌드 시 번들에 포함되므로 secret을 넣지 않습니다.
Node API
ServerExpress·Fastify처럼 계속 실행되는 HTTP 서버
- 빌드
npm run build · 필요한 경우- 실행
npm run start
확인: 서버가 process.env.PORT를 읽고 0.0.0.0에서 요청을 받아야 합니다.
Flask
Pythonapp.py에서 Flask 인스턴스 app을 내보내는 기본 구성
- 빌드
pip install -r requirements.txt- 실행
gunicorn app:app --bind 0.0.0.0:$PORT
확인: 파일명이나 Flask 인스턴스 이름이 다르면 app:app 부분을 바꿉니다.
FastAPI
Pythonapp.py에서 FastAPI 인스턴스 app을 내보내는 기본 구성
- 빌드
pip install -r requirements.txt- 실행
uvicorn app:app --host 0.0.0.0 --port $PORT
확인: requirements.txt에 uvicorn과 앱에서 사용하는 패키지가 포함되어야 합니다.
Django
Python프로젝트 패키지의 WSGI application을 gunicorn으로 실행하는 구성
- 빌드
pip install -r requirements.txt- 실행
gunicorn <project>.wsgi:application --bind 0.0.0.0:$PORT
확인: <project>를 실제 패키지명으로 바꾸고 migration은 앱의 배포 전략에 맞게 별도 관리합니다.
배포 후 확인
- 서비스 상태가 ACTIVE인지 확인합니다.
- 기본 URL이 정상 응답하고 로그인, 폼 제출, API 같은 핵심 동작이 작동하는지 확인합니다.
- 환경변수를 바꿨다면 변경 이후에 시작한 배포인지 확인합니다.
- 문제가 있으면 배포 상세의 빌드 로그와 런타임 로그를 먼저 확인합니다.