Rhapsodist
2020.03.02
Created By Rhapsodist
Rhapsodist
나는 지금 이 블로그 홈페이지를 Heroku를 통해 배포하였다.
Heroku는 Paas ( Platform as a Server )로, Amazon 의 EC2 와 같이 Iaas ( Infrastructure as a Servce ) 모든 서버의 설정을 직접해주어야 되는 것과 비교 했을때 많은 편리함을 제공한다.
물론 Amazon에서도 최근에 Paas 플렛폼을 내놓기는 했지만, 아직 많은 어려움을 느끼게 한다.
Heroku에서 기본적으로 제공하는 Free Dynos 의 경우, default는 한달에 400시간 정도 서버를 돌릴 수 있지만, 결제수단을 등록하고나면 1000시간의 기본 서버 시간을 제공한다.
하지만 Free Dynos는 Heroku의 서버의 부하 를 막기 위해, 서버에 접속이 30분 ~ 1시간 정도 없으면 자동적으로 서버에 sleep 을 걸어버린다.
그래서 1시간동안 아무 접속이 없는 상태에서 다시 접속해보면 서버를 다시 깨우는데 시간이 걸리기 때문에, 페이지 첫 로드에 8 ~ 15초의 가까운 로딩타임 이 발생하게 된다.
한개의 서버 를 24시간, 한달 동안 계속 깨워 두어도 1000시간이 채워지지 않기 때문에, 현재 블로그 페이지의 서버를 계속 깨어있는 상태로 하고 싶어졌다.
인터넷에서 검색해보면 여러가지 방법이 나오지만, 결론적으로 방법은 서버가 깨어 있을 수 있게 정기적으로(10~30분에 한번) request 를 날리는 것이다.
다행히 나는 지금 블로그에 Nodejs 와 Graphql 을 사용하고 있는데, 번역을 돌리기 위해 정기적으로 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
})
© 2020, made by Rhapsodist