프로젝트 소개

이 저장소는 무료 Render 웹 서비스를 위한 keep-alive 메커니즘을 제공합니다. GitHub Actions 워크플로와 작은 Node.js 스크립트를 결합하여 구성된 대상 URL로 주기적인 HTTP GET 요청을 보내고, 이를 통해 서비스가 비활동으로 인해 잠들지 않도록 합니다. 해결하는 문제: GitHub Actions의 무료 스케줄러는 서버가 혼잡할 때 5분마다 실행과 같은 짧은 cron 간격을 지연시킬 수 있으며, 이로 인해 실행 간에 빈 구간이 생길 수 있습니다. Render 무료 티어 서비스는 트래픽이 없으면 약 15분 후에 잠들기 때문에, 핑이 누락되면 콜드 스타트가 발생할 수 있습니다. README에 설명된 접근 방식: - 14분 활성 세션: 각 GitHub Actions 작업은 약 14분 동안 실행되며 4분마다, 즉 0, 4, 8, 12분 시점에 핑을 보냅니다. - 여러 cron 트리거: */10 * * * * 및 5,15,25,35,45,55 * * * * 와 같은 스케줄을 사용하여 새로운 러너 세션이 계속 시작되도록 합니다. - 명시된 목표는 끊김 없는 커버리지입니다. 14분 활성 창 내에서 4분마다 핑을 보내면 15분 비활동 임계값보다 짧은 간격을 유지할 수 있습니다. 기능: - Node.js 22 네이티브 API: 내장된 fetch()와 node:timers/promises를 사용하며 외부 npm 의존성이 없습니다. - 재시도 로직: 네트워크 오류 또는 2xx가 아닌 응답이 발생하면 10초 지연 후 최대 3회 재시도합니다. - 콘솔 출력: ISO UTC 타임스탬프, HTTP 상태 코드, 밀리초 단위 응답 시간, 성공/실패 결과, 세션 주기 횟수를 기록합니다. - 수동 트리거: 즉시 실행할 수 있도록 workflow_dispatch를 지원합니다. 구성: 대상 URL은 ping.js 상단에 TARGET_URL로 정의되어 있으며, 현재는 Render에서 호스팅되는 엔드포인트를 가리키고 있습니다. 엔드포인트를 변경하려면 해당 상수를 편집하고 변경 사항을 푸시해야 합니다. 배포: README에서는 업데이트된 파일을 커밋하고 main 브랜치에 푸시하면 GitHub Actions가 활성 핑 세션을 시작한다고 안내합니다.