제가 찾을 수 있었던 창업가들이 공개적으로 출시한 Replit 앱들 대부분은 이미 사라진 상태였습니다. 저는 Hacker News, Replit 커뮤니티 포럼, 갤러리, 고객 사례 등지에서 126개의 앱을 모아 하나하나 열어보았습니다. 그중 76개는 로드되지 않았습니다. 2025년에 게시된 앱 중 66개 중 51개가 사라졌고, 죽은 앱 76개 중 74개는 Replit의 '찾을 수 없음(not-found)' 빈 페이지를 보여주었는데, 이는 충돌한 것이 아니라 비공개 처리되었거나 삭제되었다는 의미였습니다.
이것이 바로 "내 Replit 앱이 작동하지 않는다"는 조용한 버전입니다. 시끄러운 버전은 제가 Replit 포럼, Reddit, Trustpilot, Hacker News에서 읽은 296개의 공개 보고서에 담겨 있습니다. 즉, 미리보기(preview)에서는 완벽하게 작동하다가도 배포(published)하는 순간 빈 페이지나 데이터베이스 오류를 보여주거나 아예 아무것도 표시되지 않는 앱을 말합니다.
Replit은 서버, 데이터베이스, 호스팅을 하나의 'Publish' 버튼 뒤에 숨깁니다. 이것이 Replit으로 구축하기 쉽다는 장점이 되지만, 동시에 이 버튼이 실패했을 때 고치기 어렵게 만드는 이유가 됩니다. 왜냐하면 갑자기 그들이 숨겨 놓았던 부분들을 디버깅해야 하기 때문입니다. 바로 그 부분이 제가 작업하는 영역이며, 저 역시 "나에게는 작동하지만 모두에게는 작동하지 않는" 정확한 간극에서 앱이 망가지는 경험을 했습니다.
아래에는 제가 점검할 순서대로 원인과 Replit 자체 문서의 해결책들을 제시합니다. 마지막으로는 무료 검사기를 통해 여전히 활성화되어 있는 48개 앱을 실행하면서 발견한 것들입니다.
296개의 고장 난 Replit 앱들이 공통적으로 가진 문제점
보고서들은 2025년 1월부터 2026년 10월까지의 것이며, Replit 커뮤니티 포럼에서 167개 스레드, Reddit에서 113개 게시물, Trustpilot 리뷰 12개, 그리고 Hacker News와 언론사 몇 곳의 보고서들로 구성되어 있습니다. 저는 각 사례를 해당 스레드가 확인한 원인이나, 아무도 찾지 못했을 경우 주요 증상을 바탕으로 그룹화했습니다.
Bar chart of 296 reports of broken Replit apps by cause: database problems 59, works in preview but live app fails 52, billing, credits or suspension 51, Agent broke code or rollback did not help 33, custom domain, DNS or SSL 27, secrets missing 15, login 15, port or run command 13, Replit outage 12, moving off Replit 11, slow or cold start 7.
296개 보고서 중 Replit 자체 서비스 장애였던 경우는 단 12건에 불과했습니다. 나머지는 설정, 데이터 및 청구(billing) 관련 문제였습니다.
놀라운 점은 일반적인 의미에서 Replit의 잘못이 거의 없었다는 것입니다. 서비스 중단(outages) 사례는 12건에 불과했습니다. 상위 세 그룹인 데이터베이스, 미리보기 앱과 라이브 앱 간의 격차, 그리고 결제 관련 문제가 전체 보고서의 절반 이상을 차지하며, Agent가 에디터 내부에서 대부분 이를 확인할 수 없습니다.
단계 1: Replit 문제인가, 청구서 문제인가, 아니면 앱 자체의 문제인가?
먼저 청구서를 확인해 보세요. 결제 관련 문제가 세 번째로 큰 그룹으로 51건의 보고서가 있었는데, 그중 많은 부분이 가격에 대한 불만은 아니었습니다. 라이브 앱이 오프라인 상태가 된 경우였습니다. Replit 문서는 이러한 상황이 발생하는 방법을 설명합니다:
- 사용 한도 초과. 사용량 한도(usage limit)에 도달하면, 게시된 앱을 포함하는 사용 기반 서비스는 다음 결제 주기 또는 한도를 높일 때까지 차단됩니다.
- 결제 실패. 지속적인 결제 실패는 게시된 앱을 일시 중지할 수 있습니다. 또한, 연체된 청구서를 납부한 후에도 Replit의 청구서 도움말(billing help)에 따르면 앱이 자동으로 다시 시작되지 않습니다. '게시(Publishing)'를 열고 다시 '게시(Publish)'를 선택해야 합니다.
- 무료 앱이었을 경우. Starter plan에서는 게시된 앱 하나를 제공하며, 이 앱은 30일 후에 만료됩니다. 이는 제가 발견한 죽은 앱 사례와 일치합니다: 2025년에 출시된 것 중 77%가 사라졌으며, 2026년에 출시된 것의 52%에 달했습니다.
미리보기에서는 작동하지만 게시하면 고장 나는 경우
Replit의 문제 해결 가이드(troubleshooting guide)는 기억할 만한 규칙으로 시작합니다: 앱이 미리보기에서 고장 났다면, 게시한다고 해서 문제가 해결되지 않으니 먼저 미리보기를 수정해야 합니다. 미리보기에서는 작동하지만 라이브 환경에서는 작동하지 않는 경우, 게시 도움말(publishing help)에 따르면 원인은 거의 항상 설정의 차이 때문입니다: 게시된 앱에서 누락된 시크릿(secrets), 개발 데이터베이스를 가리키는 DATABASE_URL, 또는 localhost를 호출하는 코드 등이 있습니다.
또한 편집 내용이 자동으로 반영되지 않는다는 점을 기억하세요. 앱은 '재게시(Republish)'를 선택할 때만 변경됩니다. 만약 재게시했는데도 이전 버전이 보인다면, 사이트를 시크릿 창에서 열어보세요. 한 포럼 스레드에서는 단순히 브라우저가 캐시된 복사본을 보여주고 있었던 것이 문제였습니다.
빈 흰색 페이지
대부분의 빈 페이지 관련 게시물은 원인을 찾지 못했지만, 문서화된 내용부터 시작해 보세요: 배포 유형(deployment type). Static 배포는 파일만 제공할 뿐 서버가 없으며, Replit에 따르면 Agent로 만든 앱이 필요로 하는 백엔드는 Static으로는 작동하지 않습니다. 대신 Autoscale (기본값) 또는 Reserved VM으로 게시하세요. 유형이 올바르다면, 라이브 사이트에서 브라우저 콘솔을 열어보세요: 페이지를 공백 상태로 만드는 오류는 Replit의 로그가 아닌 그곳에 표시됩니다.
"애플리케이션 응답 실패" 또는 마지막 단계에서 게시 실패
앱이 라이브되기 전에, Replit은 실제로 응답하는지 확인합니다. 다음 규칙들은 포트 문서(ports docs)와 문제 해결 가이드에 따른 것이며, 각각의 문제가 보고서에 나타났습니다:
- 0.0.0.0과 PORT 변수에서 수신 대기하기. localhost나 하드코딩된 포트에서만 수신하는 서버는 게시된 후 접근할 수 없습니다.
- 하나의 포트 노출하기. Autoscale 및 Reserved VM은 단일 외부 포트를 지원합니다. 한 보고서는 .replit 파일에 추가된 포트 항목 때문에 차단되었고, 다른 하나는 소유자가 설정한 적 없는 오래된 포트 매핑 때문이었습니다.
- 5초 이내에 홈페이지 응답하기. Replit은 라이브되기 전에 홈페이지를 확인하며, 시작 속도가 느리면 게시가 실패합니다. 한 스레드에서는 서버가 시작하는 데 약 12초가 걸려 모든 재게시가 실패했습니다.
- 프로세스 유지하기. 게시된 앱은 장시간 실행되는 서버여야 합니다. 단 한 번 실행되고 종료되는 스크립트는 단순히 재시작될 뿐입니다.
라이브 앱에 도달하지 못한 시크릿(Secrets)
Replit의 현재 문서는 개발(development)과 프로덕션(production) 환경의 secrets이 분리되어 있으며, 한쪽을 변경해도 다른 쪽은 업데이트되지 않는다고 명시합니다. 프로덕션 secrets는 Publishing > Adjust settings > Production app secrets 아래에 존재하며, 새 값은 다시 게시(publish)한 후에만 적용됩니다. 누락된 secret은 스스로 알리지 않습니다. 대신 실패한 API 호출, 연결할 수 없는 데이터베이스, 작동하지 않는 로그인 기능, 또는 결제 실패 등으로 나타납니다. 한 창업자는 'DATABASE_URL 환경 변수가 설정되지 않았습니다.'라는 오류로 27번 게시(publish)에 실패했습니다.
주의할 점은 다음과 같습니다: 2025년 4월 Replit 변경 로그에는 게시된 앱이 워크스페이스의 secrets를 자동으로 동기화한다고 나와 있었는데, 이는 현재 문서 내용과 정반대입니다. 만약 오래된 튜토리얼을 따랐다면, 어느 한쪽만 믿지 말고 두 곳 모두 확인해야 합니다.
2026년에 앱을 다운시킨 데이터베이스 오류
데이터베이스 문제가 가장 큰 비중을 차지했으며, 총 59건의 보고서가 있었습니다. 대부분은 사람들을 놀라게 하는 하나의 사실에서 비롯됩니다: 모든 Replit 앱에는 두 개의 데이터베이스가 존재합니다. 하나는 빌드용(개발 환경)이고 다른 하나는 게시된 앱을 위한 별도의 데이터베이스입니다. 게시할 때, 테이블 구조의 변경 사항은 라이브 데이터베이스로 복사되지만, 실제 데이터는 복사되지 않습니다. 미리 보기(preview)에서 만든 테스트 사용자들은 라이브 앱에 존재하지 않으며, 라이브 고객들은 미리 보기에는 나타나지 않습니다.
2026년을 지배했던 오류는 'Failed to check for database diff: The endpoint has been disabled.'였습니다. 이 오류는 18건의 보고서에서 발생했으며, 그중 17건은 2026년 1월부터 9월 사이에 집중되었고, 앱을 다시 게시하는 것을 막았습니다. Replit의 데이터베이스 도움말에 따르면: 라이브 데이터베이스가 일시 중지된 상태이며, 이는 일반적으로 미납 청구서 때문이거나 게시 과정 중 짧은 일시 정지로 인한 것입니다. 해결책은 'Unpause database'를 누르는 것입니다. 만약 이 버튼을 찾을 수 없다면, secrets에서 DATABASE_URL 항목을 찾아보세요. 왜냐하면 잘못된(stray) URL 하나가 실제 연결을 덮어쓰고 숨겨버리기 때문입니다.
- "서버가 SSL 연결을 지원하지 않습니다." 2025년 12월 4일부터 새로운 개발 데이터베이스는 Neon 대신 Replit 자체 Postgres에서 SSL 없이 실행되므로, SSL을 강제하는 코드는 개발 환경에서 실패합니다.
- 오래된 앱이 연결을 중단했습니다. 이전 설정에서는 복사된 앱들이 하나의 데이터베이스를 공유할 수 있었습니다. 이 공유 데이터베이스들은 2026년 6월 8일에 폐쇄되었습니다.
- 업로드한 파일이 사라집니다. 게시된 앱의 디스크는 매번 게시될 때 초기화되므로, 거기에 저장된 모든 것은 사라집니다. 한 스레드에서 커리어 페이지에 업로드된 이력서(CV)들이 계속해서 사라지는 일이 있었습니다. 파일은 앱 스토리지에 보관해야 하며, 이곳은 데이터베이스와 달리 미리보기 앱과 라이브 앱 간에 공유됩니다.
Agent가 문제를 일으켰고, 롤백으로는 데이터를 되돌릴 수 없다
33개의 보고서에서 Agent가 작동하던 것을 망가뜨린 사례가 설명되었습니다. 즉, 작동하는 코드를 재작성하거나, 데이터베이스 비밀번호를 변경하거나, 사람들이 필요로 하는 데이터를 삭제한 경우입니다. Replit의 문서에는 이제 Agent가 프로덕션 데이터베이스를 변경할 수 없으며, 2026년 2월부터는 읽기만 할 수 있다고 나와 있습니다. 하지만 진짜 함정은 사람들이 롤백이 무엇을 할 것이라고 기대했는지에 있습니다.
체크포인트 롤백은 코드를 복원합니다. 추가 옵션에서 데이터베이스를 체크하면 개발 데이터베이스만 복원되며, 프로덕션 데이터베이스는 절대 복원하지 않습니다. 프로덕션 데이터베이스는 별도의 시점 복구(point-in-time restore)가 필요한데, Core에서는 7일, Pro에서는 28일을 되돌립니다. 그리고 이 과정은 반대 방향으로도 작동합니다. Replit의 데이터 복구 문서에 따르면, 데이터베이스를 복원한다고 해서 코드가 복원되는 것은 아니므로, 한 순간으로 되돌아가려면 둘 다 수행한 다음 다시 게시해야 합니다.
수정 루프(fix loop)가 시작될 때 가장 유용한 것은 보통 또 다른 프롬프트가 아닙니다. Replit의 조언은 배포 로그를 열어 ERROR 또는 FAILED로 표시된 첫 줄을 찾는 것인데, 그 부분이 보통 원인이기 때문입니다. 500 에러는 앱 코드에 문제가 있다는 의미이고, 502는 일반적으로 앱이 충돌했다는 것을 의미하며, 로그는 30일 동안 보관됩니다.
절전 모드(Sleeping apps), 느린 앱 및 실행되지 않는 작업
기본값인 오토스케일(Autoscale)은 아무도 앱을 사용하지 않을 때 서버가 0개로 떨어질 수 있어 저렴합니다. Replit의 가격 책정 문서에 따르면, 유휴 상태인 앱은 15분 후에 절전 모드로 들어가며, 그 이후 첫 방문자는 서버가 시작될 때까지 기다려야 합니다. 한 보고서에서는 더 심각한 문제를 발견했습니다. 바로 절전 모드인 앱에는 실행할 것이 없기 때문에 프로덕션 환경에서 매일 새벽 4시에 돌아와야 할 작업이 전혀 실행되지 않았던 경우입니다. 예약된 작업(Scheduled work)은 절대 잠들지 않는 Scheduled deployment 또는 Reserved VM이 필요합니다.
모든 요청, 특히 첫 번째 요청뿐만 아니라 모든 요청이 느리다면, 무엇에서 실행되는지 확인해야 합니다. 한 보고서에서는 앱과 데이터베이스가 다른 리전에 위치하여 모든 데이터베이스 쿼리가 300밀리초의 왕복 시간을 측정했습니다. 2026년 4월부터는 유료 플랜을 통해 서버, 데이터베이스 및 스토리지를 함께 유지할 수 있는 리전을 선택할 수 있습니다.
이러한 속도 문제는 실제 사용 환경에서만 나타나며, 저 역시 그 피해를 입은 적이 있습니다. 이 사이트를 Cloudflare로 이전했을 때, 제가 여기저기 클릭할 때는 항상 빨랐지만, 여러 사람이 한꺼번에 로드하기 시작하자마자 에러가 발생하기 시작했습니다. 왜냐하면 모든 페이지가 방문할 때마다 재구축되고 있었기 때문입니다. 완성된 페이지를 캐싱(Caching)하여 문제를 해결했습니다. 저는 많은 방문을 한 번에 보내는 방식으로만 이 문제를 발견할 수 있었는데, 이것이 제가 어떤 앱을 출시하기 전에 실행하는 테스트입니다.
사용자 지정 도메인 또는 라이브 주소에서 로그인 오류
사용자 지정 도메인과 관련된 보고서가 27건 있었습니다. 2026년 6월부터 Replit은 DNS 레코드를 자동으로 설정할 수 있지만, 수동으로 추가할 경우 Replit의 도메인 문서는 이 스레드들이 계속해서 깨지는 규칙들을 나열했습니다.