CAKE20

AI Web PaaS

웹사이트 관리와 복구

리소스와 활동 기록을 확인하고 안전한 버전으로 복구합니다.

웹사이트 목록

  • 현재 계정이 소유한 웹사이트, 즐겨찾기한 웹사이트, 나머지 웹사이트 순으로 표시합니다.
  • 같은 우선순위에서는 최근 생성한 웹사이트를 먼저 표시합니다.
  • 관리자 목록에서는 본인 소유 사이트의 이메일을 파란색, 다른 사용자의 즐겨찾기 사이트 이메일을 주황색 형광 표시로 구분합니다.

리소스 모니터링

관리자와 구독 사용자는 상단 모니터링 메뉴에서 자신이 접근할 수 있는 모든 웹사이트의 실행 상태, 최근 10분 접속자와 파일·DB·Redis·메모리·CPU 사용량을 함께 확인합니다.

  • 전체·실행·오류·한도 초과 요약, 최근 접속자와 누적 저장 공간을 표시합니다.
  • DB 사용량은 public 사용자 테이블의 데이터·인덱스·TOAST와 Materialized View·시퀀스만 합산합니다. PostgreSQL 기본 용량과 Cake20 내부 스키마는 제외하며 최소값은 0입니다.
  • RAM과 Swap 사용량은 Bun과 sandbox를 포함한 사이트 systemd scope 전체를 각각 계산합니다. 플랜 RAM과 같은 용량의 Swap을 필요할 때만 사용하며, 지속적인 Swap 사용에는 더 큰 메모리 플랜을 권고합니다.
  • 이름, ID, 도메인과 소유자로 검색하고 실행 상태·주의 항목을 걸러봅니다.
  • 최근 10분에 HTTP·HTTPS 요청을 보낸 IP와 브라우저 조합을 익명화해 웹사이트별 고유 접속자로 계산합니다.
  • 실행 웹사이트는 가동 시간, 누적 요청, API, Task, Queue와 WebSocket 상태도 표시합니다.
  • 웹사이트 설정 펼침 메뉴의 데이터베이스 하위 메뉴에서는 현재 운영 웹사이트의 데이터베이스, 캐시 메모리와 스토리지를 각각 새 탭으로 엽니다. 소유자와 관리자는 웹사이트 실행 상태와 관계없이 PostgreSQL·Redis와 사용자 파일을 포함한 운영 데이터를 수정하거나 삭제할 수 있습니다.
  • 에디터와 관리 화면은 같은 공용 DB·Redis를 표시합니다. local 데이터 모드의 인메모리 Redis는 관리자 화면에서 직접 조회할 수 없습니다.
  • 웹사이트가 많아도 한꺼번에 과도하게 조회하지 않도록 제한된 동시 수집과 15초 snapshot을 사용합니다.
  • 관리자는 서버 CPU·RAM·SSD·NET의 사용량, 남은 자원과 Manager 시작 후 최소·최대를 상단에서 확인합니다. 시스템 정보만 3초마다 갱신하고, 전체 사이트 방문자는 기존 15초 측정 결과를 사용합니다.

접속자는 세션 기반 동시 접속 수가 아닌 최근 활동의 근사치이며 관리자 프로세스를 다시 시작하면 0부터 집계합니다. 관리자는 전체 웹사이트를 보고 구독 사용자는 자신이 소유한 웹사이트만 봅니다.

ZIP 소스 이동

  • ZIP 내보내기와 가져오기는 웹사이트의 편집 가능한 소스만 이동합니다.
  • DB 데이터, Secret, files 업로드, package.json, server/db/migrations와 빌드 산출물은 포함하지 않습니다.
  • package.json과 app/index.html 같은 표시 소스는 포함합니다. tsconfig.json처럼 환경에 따라 달라지는 파일과 생성 파일은 엔진에서 다시 준비합니다.
  • 파일명은 YYYYMMDD-HHmmss-{웹사이트ID}.zip 형식이며 package.json의 timezone을 사용합니다.
  • ZIP 루트의 version.json에는 ZIP 형식, 내보낸 Runtime, 마지막 전체 검수 Runtime과 내보낸 시각을 기록합니다.
  • 가져오기는 package.json과 app, public, server만 소스로 받고 version.json은 호환성 확인 후 웹사이트 파일에 복사하지 않습니다.
  • ZIP 최상위가 바로 소스 구조이거나 최상위 폴더 하나 안에 같은 소스 구조가 있으면 가져옵니다. 여러 최상위 폴더나 두 구조가 섞인 ZIP은 가져오지 않습니다.
  • version.json이 없거나 현재보다 오래되거나 새로운 Runtime에서 만든 ZIP, 전체 검수 버전이 없는 ZIP은 확인 후 가져옵니다.
  • package.json은 가져온 공개 설정 원본을 그대로 사용합니다.
  • 가져온 웹사이트의 DB 스키마는 server/db/*.db.ts에서 새로 생성합니다.
  • DB 데이터가 필요하면 ZIP과 별도로 백업 및 복원 기능을 사용합니다.

외부 상태 감시

운영자는 Manager와 다른 장비에서 인증된 상태 URL을 1분마다 확인하도록 구성할 수 있습니다. Manager 장비 전체가 멈춘 경우에도 감지하려면 반드시 별도 호스트에서 실행해야 합니다.

  • Manager DB·Redis 연결, 실행 대상 웹사이트 응답과 디스크 여유를 함께 확인합니다.
  • 최근 정기 복구 훈련이 실패했거나 설정된 최대 기간보다 오래되면 비정상으로 판정합니다.
  • 관리자 설정에서 예약한 전체 브라우저 E2E의 다음 실행과 최근 결과를 표시하며 실패하면 외부 상태도 비정상으로 판정합니다.
  • 연속 실패 횟수를 넘을 때 장애 알림을 한 번 보내고 정상화될 때 복구 알림을 보냅니다.
  • Slack, Discord와 일반 JSON Webhook을 지원하며 토큰과 Webhook 주소는 공개하지 않습니다.

통합 활동 기록

웹사이트 설정 펼침 메뉴의 활동 기록 팝업에서 활동 기록과 로그 보기 탭을 전환합니다. 활동 기록에는 에디터, 데이터, 설정, 관리 화면과 MCP를 통해 접근한 흔적을 최신순으로 표시하며 성공 여부, 시각, 요청 경로, HTTP 상태와 처리 시간을 함께 보여줍니다.

  • 웹사이트별 logs 폴더에 YYYYMMDD-HHmmss.log 이름으로 저장하며 관리자 설정의 파일 크기를 넘으면 새 로그 파일을 만듭니다.
  • 로그 보기 탭에서는 날짜별 로그 파일, 크기와 삭제 예정일을 확인하고 저장 아이콘으로 원본 로그를 내려받습니다.
  • DB·Redis 변경은 작업자와 대상, 작업 종류, 기본키·컬럼·키와 처리 건수를 기록합니다.
  • 보존 기간이 지난 로그는 자동으로 삭제하며 현재 기록 중인 최신 파일은 남깁니다.
  • MCP 변경 도구는 도구 이름과 파일 경로·테이블·처리 건수 등 안전한 대상 정보만 추가로 기록하고, 실패한 요청은 진단을 위해 남깁니다.
  • MCP URL의 접속 키는 /mcp/[token]으로 가리고 요청 본문과 인증 정보는 기록하지 않습니다.
  • Git은 소스 변경과 시작 시점을 보관하고 활동 기록은 조회, 실패, 설정과 MCP 등 Git에 남지 않는 이용 흔적을 보완합니다.

웹사이트 삭제와 복구

중지된 웹사이트에서 웹사이트 삭제를 선택하고 1~4가 한 번씩 들어간 확인번호를 입력하면 단일 웹사이트 폴더와 공유 PostgreSQL DB를 즉시 영구 삭제합니다.

  • 고급 설정에서 사이트 삭제 보호를 켜면 목록에 보호 아이콘이 표시되고 삭제 메뉴와 서버 삭제 요청, 자동 삭제를 모두 차단합니다.
  • 다른 창에서 에디터가 활성 상태이면 삭제하지 않고 창을 닫도록 안내합니다.
  • 활성 에디터가 없으면 파일 테스트, 미리보기와 운영·검수 프로세스를 모두 종료한 뒤 삭제합니다.
  • 파일은 단일 web-{12자리} 폴더와 그 안의 build/debug·build/release를 함께 삭제합니다.
  • DB는 웹사이트의 단일 web-{12자리} DB를 삭제합니다.
  • 자정 자동 백업에서 소스 ZIP과 운영 DB dump가 모두 생성된 웹사이트만 계정 메뉴의 사이트 복구에 최근 1개월 동안 표시됩니다.
  • 복구는 최신 ZIP과 dump를 사용하고 웹사이트 생성 개수 제한을 동일하게 적용합니다. 최신 파일 복원이 실패하면 바로 이전 백업을 자동으로 재시도합니다. 당일 생성해 첫 자정 백업 전에 삭제한 웹사이트는 복구할 수 없습니다.
  • 삭제 후 1개월이 지나면 외부 백업 파일과 복구 목록을 함께 완전 삭제합니다.
  • 삭제 중 오류가 발생하면 숨김 경로에 남겨 두고 다음 정리 주기에 다시 시도합니다.
  • 정책 위반, 법적 보존 의무 또는 보안 사고 조사 대상은 접근을 차단한 채 별도 절차로 더 오래 보존할 수 있습니다.

자정 자동 백업이 없거나 삭제 후 1개월이 지나면 복원할 수 없습니다.

보안 사고 대응

  • 공격 징후가 있으면 먼저 웹사이트를 멈추고 활동 기록과 실행 로그에서 시각과 경로를 확인합니다.
  • 노출 가능성이 있는 Secret과 AI코딩 주소를 재발급하고 인증·요청 제한을 보강합니다.
  • 필요하면 ZIP, Git 소스 이력과 DB 백업을 확보한 뒤 안전한 버전으로 복원합니다.
  • 웹사이트 이용 정책에 따른 차단은 취약점과 악성 콘텐츠를 제거하고 재발 방지 조치를 확인한 뒤 해제할 수 있습니다.