Rhapsodist

heroku

무료 Heroku 서버 sleep 현상 방지하기

2020.03.02

Created By Rhapsodist

Rhapsodist

무료 Heroku 서버 sleep 현상 방지하기

1. 개요

나는 지금 이 블로그 홈페이지를 Heroku를 통해 배포하였다.

Heroku는 Paas ( Platform as a Server )로, AmazonEC2 와 같이 Iaas ( Infrastructure as a Servce ) 모든 서버의 설정을 직접해주어야 되는 것과 비교 했을때 많은 편리함을 제공한다.

물론 Amazon에서도 최근에 Paas 플렛폼을 내놓기는 했지만, 아직 많은 어려움을 느끼게 한다.

2. Heroku Free Dynos

Heroku에서 기본적으로 제공하는 Free Dynos 의 경우, default는 한달에 400시간 정도 서버를 돌릴 수 있지만, 결제수단을 등록하고나면 1000시간의 기본 서버 시간을 제공한다.

하지만 Free Dynos는 Heroku의 서버의 부하 를 막기 위해, 서버에 접속이 30분 ~ 1시간 정도 없으면 자동적으로 서버에 sleep 을 걸어버린다.

그래서 1시간동안 아무 접속이 없는 상태에서 다시 접속해보면 서버를 다시 깨우는데 시간이 걸리기 때문에, 페이지 첫 로드에 8 ~ 15초의 가까운 로딩타임 이 발생하게 된다.

3. Sleep 현상 방지

한개의 서버 를 24시간, 한달 동안 계속 깨워 두어도 1000시간이 채워지지 않기 때문에, 현재 블로그 페이지의 서버를 계속 깨어있는 상태로 하고 싶어졌다.

인터넷에서 검색해보면 여러가지 방법이 나오지만, 결론적으로 방법은 서버가 깨어 있을 수 있게 정기적으로(10~30분에 한번) request 를 날리는 것이다.

다행히 나는 지금 블로그에 NodejsGraphql 을 사용하고 있는데, 번역을 돌리기 위해 정기적으로 Cron 을 돌려서, Graphql에 지속적으로 request 를 보내고 있는 상태였다. 다만 시간을 하루에 한번으로 설정을 해놨었기에, 시간을 10분에 한번씩 request를 날리는 코드를 하나 작성해 주었다.

const CronJob = require('cron').CronJob

const job = new CronJob('0 */10 * * * *', () => {
    console.log('cron!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
   fetch('https://rhapsodist-blog.herokuapp.com') // send request to own url
})

Share to ...

#heroku
#server
#서버
#paas
#ec2
#cron
#amazon
#sleep