Infra

[heroku] app crashed 트러블 슈팅

비밀이얌뿌잉 2022. 9. 13. 18:53

heroku

VM 환경에서 배포를 위한 설정 과정 없이 프로젝트를 쉽게 배포할 수 있는 호스팅 서비스.

 

장점

1.github 상에 프로젝트만 구축해두면 쉽게 배포가 가능하다. 호스팅 서비스가 갖는 근본적인 장점이다.

2. 무료다. 단, 24시간 배포 서버가 깨어있지 않으며 30분 간 트래픽이 없다면 sleep 모드에 들어간다.

 

단점

1. sleep 모드에서 트래픽이 발생하면 서버가 wake up하느라 평소의 접속보다 긴 응답 시간이 걸린다.

2.(오늘의 목적) error를 추적하기 어려웠다.

 

APP_CRASHED

local에서 app이 잘 작동하였음에도 호스팅 된 이후에 app이 crashed 됐다는 log를 마주하면 정말 당황스럽다.
error H10에 해당하는 오류 상황이다.

참고: https://stackoverflow.com/questions/13496827/heroku-deployment-error-h10-app-crashed

 

이미지를 보다시피 트러블슈팅이 어려운 이유는 error log가 짤리기 때문이다.
대충 node modules에서 오류가 발생한 건 알겠는데 이것만으로는 문제 해결을 위한 가설을 세우기가 어렵다.

만약 VM이라면 해당 환경에 접속하여 에러를 자세히 확인할 수 있을 것이다.
마찬가지로, 우리가 heroku 배포 환경에 접속할 수 있다면?

 

RUN CONSOLE

heroku app을 확인하는 화면에서 오른쪽 상단의 more 탭을 클릭하면 heroku 배포 환경에서 console을 돌려볼 수 있다.

app을 실행하는 명령어부터 폴더 구조를 확인하여 app 실행에 필요한 build 파일이 잘 생성되는지 등을 직접 확인해볼 수 있다.

필자는 npm start로 app을 실행해보았을 때, 어디서 error_module_not_found가 발생하였는지를 발견할 수 있었다.

해당 앱 실행에 매우 중요한 swagger-ui-express library가 devDependencies에만 등록되어있던 것이 문제였다. 

 

결론

heroku 배포 환경에서 error를 더 자세히 발견할 수 있는 방법! console을 이용하자.