(최종 프로젝트 진행중)
어제 배포하고 오늘 유저 테스트를 오픈함. 배포환경에서 잘 동작하도록 낮까지 열심히 버그를 수정하고 또 수정하고 하다가 설문을 공지하기로 한 시간보다 한참 지나서야 공지를 올리게 되었다. 이때까지만 해도 고칠 건 대략 다 고쳤으니까 유저 피드백이 들어오는 동안 밥 먹으러 갈 수 있겠거니 하는 생각을 하고 있었더랬지… 또 나름 ‘지금 상태로 유저에게 적발되는(?) 에러도 피드백의 일종이니까, 설문이 마감될 때까지 코드를 고치지 않는 게 타당하지 않겠냐’하는 논의도 팀 내에서 오갔었다.
다시 말하지만 이 모든 생각은 유저가 몰려든 직후 메인 페이지가 다운되기 이전까지의 일이었다. ‘에러도 피드백의 일종이니까’는 무슨, 아예 서비스를 접속도 못해서 피드백 자체가 불가능하게 생겼는데 밥은 사치였다. 별 대단한 서비스를 론칭한 것도 아니었는데 어느 정도 안정화를 시켜놓고 보니 두세시간이 훅 지나가 있었다. 이래서 ‘론칭일’, ‘오픈일’에 다들 그렇게 초비상 상태로 대기하는 거였구나…
※ 이하는 스스로 공부하며 적어둔 노트이며 불확실한 내용이 있을 수 있습니다. 학습용으로 적합하지 않음을 유념해주세요. ※
New Relic은 철수
New Relic은 철수
- 진행중! new relic add-ons 추가를 위해 - 수면 모드 없는 지속 배포를 위해 - https://snakehips.tistory.com/entry/Heroku-배포-백엔드-배포-과정-중-나를-당혹스럽게-만들었던-상황-모음집
newRelic을 왜 사용했나?
Heroku와 New Relic:
Heroku는 Node.js를 비롯한 다양한 에이전트 언어로 웹 애플리케이션을 호스팅하기 위한 PaaS(Platform as a Service) 솔루션입니다. New Relic을 사용하면 APM 및 브라우저 모니터링의 메트릭으로 Heroku를 확장할 수 있습니다.
‘wayne’을 덧붙임으로써 new relic의 무료 플랜을 선택했던 것
$ heroku addons:create newrelic:$planlevel $ heroku addons:create newrelic:$wayne
New Relic은 애드온이 설치된 후 수집된 애플리케이션 성능, 최종 사용자 경험 및 호스트 성능 모니터링을 시작합니다. 몇 분 안에 데이터가 APM 요약 페이지에 나타나기 시작합니다.
Easy way to prevent Heroku idling?
하루에 네댓명의 방문자가 있는 앱을 Heroku로 배포하는데 자꾸 idling되어서 매번 20초 이상을 기다려야 했다고 함.
⇒
“You can install the free New Relic add-on. It has an availability monitor feature that will ping your site twice per minute, thus preventing the dyno from idling.
New Relic을 연동해보려다가 여기까지는 왔다. 그러나…
Copy and run this command in PowerShell and run as administrator
You will need to use Windows PowerShell to run the command below. To open PowerShell, open the Search bar and type “Windows PowerShell”, then right-click the Windows PowerShell app and click “Run As Administrator”. You can now copy the command below into the command prompt and press Enter.
Administrator: Windows PowerShell
Copy command
[Net.ServicePointManager]::SecurityProtocol = 'tls12, tls'; $WebClient = New-Object System.Net.WebClient; $WebClient.DownloadFile("https://download.newrelic.com/install/newrelic-cli/scripts/install.ps1", "$env:TEMP\install.ps1"); & PowerShell.exe -ExecutionPolicy Bypass -File $env:TEMP\install.ps1; $env:NEW_RELIC_API_KEY='NRAK-2HC8P53V3FV4C6BRHWCF25BPZN1'; $env:NEW_RELIC_ACCOUNT_ID='3863757'; & 'C:\Program Files\New Relic\New Relic CLI\newrelic.exe' install
Customize your installation
We need access to a specific set of endpoints for this installation. Make sure you allow the traffic through your firewall or customize your installation above and use a proxy.
Use a proxy
NewRelic package file 샘플(node_js_newrelic_package.json)
https://beachape.com/blog/2013/02/04/nodejs-on-heroku-with-newrelic/
⇒ 과거에 Heroku가 무료 플랜을 제공했을 때 ‘수면 모드에 들어가는 상황’이 발생했던 것인데 지금은 유료 플랜 뿐이라 오래 방문자가 없어도 서버가 수면 모드에 빠지지 않는다. New Relic을 도입하려 했던 것은 이 이유가 가장 컸기 때문에, 설치했던 (그리고 진행중이던) New Relic 도입을 철수하였다.
배포 후 문제 발생 기록
배포 후 문제 발생 기록
와 진짜
배포가 이렇게 힘든 거였구나를 느꼈다. ‘환경이 다르다’고 하는 게 이런거구나 했다.
- Date를 불러오는 게 다른 듯 하다. 분명 로컬 환경에서는 시간을 이렇게 불러오는데 배포 환경에서는 저렇게 불러온다. ⇒ toLocaleString() 사용해볼 것.
⇒ (튜터님 제안) (⇒ Date FNS 모듈 사용해보기)(안되면 getTimezoneOffset )


- 로컬 Git은 파일명의 대소문자를 다름으로 인식하지 않는다. 그러나 배포 환경에서는 다름을 인식한다. 언젠가부터 ejs 파일 중 하나가 이름이 requestDetail.ejs가 아니라 RequestDetail.ejs로 바뀌어 있었는데, 이것이 Heroku에 배포될 때는 인식되지 못하여 400 에러가 떴고, 로컬에서 이름을 바꾼 후 푸시하려고 하였으나 아예 바뀐 파일명을 인식하지 않아서 GIt 명령을 할 수 없었다. 하는 수 없이 깃헙 main 브랜치에 직접(!) 변경 후 커밋하였다.
그 밖에도 진짜 열댓 개는 되는 배포 에러가 있었는데… 화룡점정은 이거였다:
- 메인 페이지 다운 사건. 이 시점 이후 누구도 메인페이지로 접근할 수 없다. 결론만 말하자면 고양이 프로필을 등록하지 않은 사용자가 품앗이 게시글을 써서, 메인에 띄워야 하는 품앗이 목록 미리보기 캐러셀에서 ‘해당 품앗이 게시글의 고양이 사진을 찾을 수 없다’라고 에러가 뜬 거였다. 설문에 참여하러 온 유저가 새로 회원가입을 하면서 벌어진 일이었다. 이런 에러를 예상하고 짠 로직은 아니었지만 애초의 계획대로 회원 가입 시에 무조건 고양이 프로필을 하나 등록하게 만들어 놓았어야 했다. ⇒ 일단 급한대로 이미 회원가입한 유저 정보에는 임시로 고양이 ID를 하나씩 연결지어주고, ‘품앗이 글쓰기 버튼’에 접근하려고 할 때 ‘위치 인증 + 고양이 프로필 등록까지 해야 글 쓸 수 있습니다’라고 알림창으로 막아놓게 고쳐놨다. ⇒ 고양이 프로필까지 등록하지 않으면 회원 가입이 안 되도록 수정함.
- .env 파일에 있던 환경 변수들을 다 Settings의 Config Vars로 등록시켜줘야 했다는 점을 3번의 동일 선상 에러를 겪고 나서야 깨달았다. ‘이 환경변수가 없으면 이 기능이 안 되는 거였지, 참’ 하고 기능 하나하나를 세밀히 되짚어보는 값진 시간이었다(?)
- 이후에도 몇 번이나 메인 페이지 및 여타 페이지들이 500에러로 접속 불가능한 상태가 됐었다.
헐 피드백으로 받은 것 중에
KT 인터넷망으로 PC 접속하면 IP 가 실제 위치랑 동떨어진 곳으로 찍혀셔 위치 인증이 불가능하다는 에러가 있다. (내 IP로 위치보기 https://www.ipaddress.my/)

이런 식으로 실제 위치와 차이를 극복하기 위해서 1km 보다 2~3km 반경을 위치 인증 허용으로 해놓는 게 좋겠다.
에러 - 나눔 게시판 접속시 이런 에러나고 게시글이 안 보임.

Uploaded by N2T