본문 바로가기

Node.js

[Node.js] Heroku FreeDyno 계속 켜진 상태로 유지하기

반응형

Heroku FreeDyno 서버를 이용해보신 분들은 알겠지만 접속이 없다면 한 5~15분 내로 서버가 sleep 상태로 들어간다.

개인적으로 테스트해본 결과 Dyno 안에서 크론으로 작업을 띄우거나 웹소켓 연결이 되더라도 서버가 sleep 상태로 들어가는 것을 막을 수는 없고 무조건 해당 서버로 웹 연결 요청이 있어야 sleep 상태로 안 들어가게 된다.

 

만약 인터넷과 연결된 안 쓰는 컴퓨터 혹은 NAS가 있다면 강제로 Heroku FreeDyno가 sleep으로 들어가는 것을 막을 수 있다. 그 소스는 다음과 같다.

const cron = require('node-cron');
const request = require('request');
const url = '접속할 서버의 웹페이지 경로';

// 3분 주기로 해당 웹서버에 요청
var task = cron.schedule('*/3 * * * *', () => {
  console.log(url + ' try');
  request(url, function (error, response, body) {
    if (response && response.statusCode == 200) {
      console.log(url + ' connected successfully');
      return;
    }

    console.error(url + ' fail to connect');
  });
}, {
  scheduled: false
});

task.start();
console.log('task start');

 

필요한 모듈은 node-cron과 request이며 해당 모듈을 설치한 뒤 위의 코드를 실행하면 해당 웹서버가 sleep 상태로 들어갈 일은 없을 것 같다. 다만 응답이 조금 느린 부분은 어쩔 수 없을 것 같다.

반응형