heroku로 배포한 사이트 로딩속도가 느린 이유와 해결방법
30 Mar 2017 | heroku장고를 배우고 처음으로 (아주) 간단한 웹페이지를 pythonanywhere, heroku를 사용하여 배포해보았다.두 서비스 모두 계정당 웹사이트 하나를 무료로 배포할 수 있다. 배포 후 잘 되는 것 처럼 보였는데, 며칠 뒤 접속해보니 첫 페이지 로딩 시간만 5초가 넘게 걸리는 현상이 발생했다.
관련해서 찾아보니 아래 2가지가 원인이고, 특히 2번이 로딩 속도가 느려지는 가장 큰 이유인 것 같다. (자료 :why your first heroku rails app loads so slow)
- heroku 서버가 미국에 있다는 점
- 방문자가 한동안 (5-15분 사이에) 없으면 사이트가 자동으로 정지되고, 재기동 하는데 20-30초가 걸린다.
이를 해결하는 방법 중 하나는 자신의 heroku 웹사이트에 주기적으로 방문자가 방문하고 있다고 heroku 서버가 착각하게 만드는 것인데, UptimeRobot 같은 모티너링 시스템 등을 활용할 수 있다. 위 시스템을 사용하려면 자신의 heroku app의 IP를 알아야한다. 하지만 heroku app은 하나의 static ip를 갖고 있지 않아서 heroku add-on 등을 사용해야 한다. QuotaGuard Static 라는 add-on을 찾아보았으나 한달에 20달러 정도이고 지역 제한이 있었다.
이틀을 고민한 끝에 AskDjango의 이진석님께 물어보았다.
- 코드스쿼드 정호영님 께도 답변을 받았다. (두 분 모두 감사합니다!)
질문내용
안녕하세요. 배포 관련하여 궁금한 점이 있습니다.
장고로 연습한 사이트를 python anywhere 와 heroku를 사용해서 배포해 보았습니다. 그런데 둘다 며칠 뒤 접속해보니 웹페이지 처음 로딩 속도가 현저히 느려지는 현상이 발생 합니다. python anywhere는 그래도 괜찮은 편인데 heroku 같은 경우는 페이지가 열리기 까지 12초 정도가 걸리네요ㅠ.ㅠ 열심히 정보를 찾아보았는데, heroku 같은 경우 아래가 원인이라는 글을 찾았습니다.
– 방문자가 한동안 (5-15분 사이에) 없으면 사이트가 자동으로 정지되고, 재기동 하는데 20-30초가 걸린다.
이를 해결하는 방법으로 모니터링 시스템 같은 것을 활용해서 자신의 웹사이트에 주기적으로 방문자가 찾아오고 있다고 서버가 착각하게 만들면 된다는 글을 읽었는데요. heroku app은 static ip를 갖지 않아서 모니터링 적용도 쉽지 않아 어떻게 해야하나 이틀 동안 고민하고 있습니다.ㅠㅠㅎㅎ
궁금한 점은 아래와 같습니다.
- heroku app 로딩 시간이 10초 이상으로 느려지는건 일반적인가요? (아니면 제 설정이나, 코드에 원인이 있을 가능성이 있을까요?)
- 만약 이런 문제가 일반적이고, heroku app 로딩 시간을 개선하는 방법을 혹시 알고 계시다면 의견을 부탁드리고 싶습니다.
- 일반적으로 많이 사용하는 (혹은 추천하는) 배포 서비스가 있다면 추천 부탁드리겠습니다.
고맙습니다.
답변 1
- 전반적인 로딩 속도 딜레이는 Region 이슈도 있습니다. Free 버전은 대개 미국 Region 에서 서비스를 받습니다.
Heroku의 기본 Plan인 Free Dyno 에서는 sleep 타임이 있구요. Free 버전인만큼 성능상의 제약이 있는 것이 사실입니다. 좀 더 제대로 써보고자 하신다면 유료 플랜을 써보세요. 사이트에 주기적인 접속을 걸기위해 구지 ip를 이용할 필요가 없습니다. 각 heroku app마다 도메인이 할당되니깐요. 도메인으로 접속을 시도하면 됩니다.
Heroku가 PaaS 플랫폼이니 만큼, 초기 구동시간에 다소 시간이 걸리긴 할 겁니다.
답변 2
- 맞습니다. 업체 쪽에서 서비스 비용을 줄이기 위해서 사용하는 내부 구조 때문에 그렇구요.
- 여러가지 꽁수가 있긴 한데, 기본적으로는 질문하신 데로 주기적으로 누군가 방문하는 방법을 사용하면 되는데 쉽지는 않습니다.
- 무료라면 역시 AWS나 애져를 사용하는 방법이 있습니다. AWS에서 일라스틱 빈스톡을 사용하는 방법을 많이 사용하는데, 그냥 ec2에 올려도 됩니다. 개인적으로는 ec2에 올리는 걸 더 선호하는 편입니다. 한 대의 서버를 직접 관리할 수 있기 때문에 서비스 운영이 아닌 공부 용도로는 ec2 서버를 직접 관리하는 걸 추천합니다.