개발을 시작할 때: AI 도구에 붙여넣을 프롬프트
Claude Code·Cursor로 새 프로젝트를 만들 때 맨 처음 아래 글을 붙여넣으세요 (또는 프로젝트의 CLAUDE.md·.cursorrules 파일에 넣으세요).
처음부터 wecloud에 올릴 수 있는 모양으로 만들어져 배포에서 막히지 않습니다.
이 프로젝트는 wecloud(위니브 교육용 호스팅)에 배포할 거야. 처음부터 아래 규칙을 지켜서 만들어 줘. [만들 수 있는 형태 - 셋 중 하나만] 1. 정적 사이트: HTML/CSS/JS, 또는 Vite(React·Vue). Vite면 `npm run build` 결과가 dist/ 에 나오게. 2. Node.js 서버: Express 또는 Fastify. package.json에 "start" 명령(예: "start": "node server.js"). 3. Python 서버: FastAPI, Flask, Django, Streamlit 중 하나. 필요한 패키지는 requirements.txt에. [폴더 구조] - 프로젝트 폴더 하나에 앱 하나만. 맨 위 폴더에 index.html, package.json, requirements.txt 중 하나가 있게. - 프론트엔드와 백엔드를 따로 띄우지 말고, 서버가 필요하면 서버 하나가 화면(정적 파일)까지 같이 내보내게. - Dockerfile, docker-compose 파일은 만들지 마 (wecloud가 자동으로 빌드·실행함). [서버 규칙] - 서버는 반드시 환경변수 PORT의 포트로, 모든 주소(0.0.0.0)에서 열어. 예) Node: app.listen(process.env.PORT || 3000, "0.0.0.0") 예) Python: uvicorn main:app --host 0.0.0.0 --port $PORT - 파일 저장(SQLite DB, 업로드 파일 등)은 /data 폴더에만 해. 다른 곳은 재배포하면 지워져. 예) DB 경로를 환경변수 DATA_DIR(기본값 ./data)로 받게 만들기. - 별도 DB 서버(MySQL, PostgreSQL, MongoDB, Redis)는 쓸 수 없어. 필요하면 SQLite를 써. - 메모리는 256MB 정도라 가볍게. 백그라운드 예약 작업(크론)은 앱이 잠들면 멈춰. [비밀 값] - API 키는 코드나 .env 파일에 직접 넣지 말고 process.env.이름 / os.environ["이름"] 으로 읽게 만들어. 값은 내가 wecloud 화면의 '환경변수'에 넣을게. - 브라우저에서 돌아가는 프론트엔드 코드에는 API 키를 절대 넣지 마 (누구나 볼 수 있음). 키가 필요한 호출은 서버를 거치게.
어떤 형태를 올릴 수 있나요?
| 올린 것 | wecloud가 하는 일 |
|---|---|
맨 위에 index.html이 있는 폴더 | 그대로 정적 사이트로 공개 |
Vite·React(CRA)·Vue·Astro 등 package.json에 build가 있는 프로젝트 | 서버에서 npm install → npm run build 후 결과물(dist·build·out)을 공개 |
| Express·Fastify·NestJS·Next.js 등 Node.js 서버 | npm install (+ build) 후 npm start 실행 |
| FastAPI·Flask·Django·Streamlit (Python) | requirements.txt(또는 pyproject.toml)로 설치 후 실행 |
판별이 애매하면 "정적 사이트로 올릴까요, 서버 앱으로 올릴까요?"라고 물어봅니다. Procfile의 web: 줄이 있으면 그 명령으로 실행합니다.
- Dockerfile·docker-compose는 쓰지 않습니다. 들어 있어도 무시하고 위 표대로 자동으로 빌드·실행합니다. Go·Java 같은 다른 언어는 배포할 수 없습니다.
- 폴더 하나에 앱 하나. 맨 위 폴더에
index.html·package.json·requirements.txt중 하나가 있어야 합니다. 프로젝트를 감싼 폴더가 한두 겹 있거나 옆에 README·LICENSE가 있는 것은 괜찮습니다.frontend/·backend/로 나뉜 저장소는 배포할 폴더 하나만 올리세요.
서버 앱 규칙 (꼭 지켜 주세요)
- PORT 환경변수의 포트로 열기 — wecloud가 알려 주는 포트(
8080)로 열어야 접속됩니다.// Node.js (Express) app.listen(process.env.PORT || 3000, "0.0.0.0") # Python (FastAPI) uvicorn main:app --host 0.0.0.0 --port $PORT
- 파일 저장은
/data폴더에만 — 재배포·재시작해도 남는 곳은/data하나입니다 (최대 200MB). SQLite 파일도 여기에 두세요. 예:sqlite:////data/app.db - 비밀 값은 환경변수로 — API 키는 코드나
.env파일에 넣지 말고 앱 화면의 환경변수에 저장하세요. - 15분 동안 접속이 없으면 잠듭니다 — 다음 접속 때 자동으로 깨어납니다 (몇 초 걸림). 잠든 동안에는 예약 작업(크론)이 돌지 않습니다.
한도
| 항목 | 한도 |
|---|---|
| 업로드 | ZIP 기준 50MB (node_modules, .git, .venv 등은 자동 제외) |
| 정적 사이트 용량 | 100MB |
| 서버 앱 | 메모리 256MB, CPU 0.25코어 (프로그램마다 다를 수 있음) |
| 빌드 | 최대 10분, 메모리 1.5GB. 동시에 2개까지 빌드하고 나머지는 순서를 기다립니다. |
| 개수 | 한 사람당 정적 사이트 5개, 서버 앱 1개 (프로그램마다 다를 수 있음) |
보안 주의
- 프론트엔드(브라우저에서 실행되는 JS)에 API 키를 넣으면 누구나 볼 수 있습니다. wecloud가 키처럼 보이는 값을 찾으면 경고합니다.
- 서버 앱은 사내망·다른 학생 앱에 접속할 수 없고, 인터넷으로 나가는 요청만 할 수 있습니다. 메일 발송(25번 포트)은 막혀 있습니다.
기간이 끝나면?
앱은 프로그램 종료일 + 90일에 만료됩니다. 만료 30일·7일·1일 전에 메일로 알려 드립니다.
| 시점 | 앱 상태 | 할 수 있는 일 |
|---|---|---|
| 만료 ~ 30일 | 정지 보관 | 연장하면 바로 되살아남, 코드·데이터 내려받기 |
| 30일 ~ 90일 | 압축 보관 | 코드·데이터 내려받기, 연장하면 재배포로 복구 |
| 90일 이후 | 완전 삭제 | 복구할 수 없음 |
계속 쓰려면 졸업(이전) 가이드를 보세요. 자세한 기준은 이용 약관 제14조에 있습니다.
AI 도구로 배포하기
AI 도구 연결에서 설정 한 줄을 복사해 Claude Code나 Cursor에 붙여넣으면, "이 프로젝트 wecloud에 배포해줘"라고 말해서 배포할 수 있습니다. 실패하면 AI가 로그를 보고 고쳐서 다시 배포할 수도 있습니다.
문의·신고
배포가 막히면 먼저 담당 강사에게 물어보세요. 피싱·불법 콘텐츠 등 문제가 있는 앱은 신고하기로 알려 주세요.