본문 바로가기
  • 삽질하는 자의 블로그
오류/Nodejs

[배포 오류] 내 최악의 오류 40시간을 날려버린 [배포 오류]Error: Error connecting to db: connect ECONNREFUSED 127.0.0.1:27017

by 이게뭐당가 2022. 10. 11.

0. 들어가기에 앞서

배포오류.pptx
1.04MB
배포오류의 처리.txt
0.00MB

 

 

 

사용한 DB :                         MongoDB

사용한 DB Hosting :            Atlas MongoDB

사용한 Hosting Provider :    HEROKU

 

사용한 API  :                         Stripe API  (결제용)

 

오류의 원인코드 : connect-mongodb-session 패키지

 

1. 오류처리 실패원인 [몰랐던 사실]

 

 

  오류코드는 아래부터 위로 읽는것이다.

 

  헤로쿠는 그저 박스일뿐, 실행은 헤로쿠 안의 '코드'가 하는것이다.  

 

   127.0.0.1 은 LoopBack IP이다. IP주소가 아니다.

 

   환경변수는 헤로쿠 안의 코드가 실행될때, 헤로쿠가 변수 안으로 넣어주는 용도로 쓰이는 변수이다.

 

   기본적으로 PORT는 넣어주지만, 나머지 환경변수는 직접지정해야 넣어진다.

 

    MONGODB ATLAS는 그저 새로운 DB일 뿐이다. 클러스터 라는 말에 속아, 뭐라도 되는 것처럼 느끼지 말자.

         정말로 그냥 단순한 DB이다.    

 

   헤로쿠에 내 코드를 넣는다? 당연하게도 내 코드파일 안에있는 SRC들(IMAGE, FILE 등등...) 도 함께 들어간다.

          DB에는 데이터만 있다. '데이터'베이스니까. 

         우린 HEROKU 라는 깡통에 모든것을 집어넣고 사용할것이다. 마치 로컬 컴퓨터처럼

 

사이트 내에서 파일관리하려면, ADD-ON을 달아야한다. 물론 유료이다.

 

 

 

2. 오류 원인

로그를 잘 읽어보자.

 

Error: Error connecting to db: connect ECONNREFUSED 127.0.0.1:27017 라는 에러가 났다. 왜?

 

      바로 아래에있는

 

2022-10-10T06:42:41.524842+00:00 app[web.1]: at /app/node_modules/connect-mongodb-session/index.js:88:17

 

        얘가 바로 원인이다.

 

로그는 거꾸로 읽는것이다.

 

나는 이걸 몰라서, 계속해서 DB가 어디가 문제지... 이짓을 30시간을 넘게 했다.

그러다보니 질문 자체가 잘못되었다. 저 오류를 검색할 이유가 없었다.

바로 node_module/connect/mongodb-session 을 들어가는것이 정답이었는데, 그걸 알지 못했다.

 

 

 

3. 원인 디테일

 

node_module/connect/mongodb-session  을 들어갔다.

dafault 값이 하드코딩되어있다.

세션을 읽는 주소가 잘못되었는데 DB가 들어가 질 일이 절대 없고, 페이지가 들어가 질 수가 없다.

DB의 주소는 localhost,  헤로쿠안에 있는 코드가 실행되므로 기준은 헤로쿠, 헤로쿠가 localhost가 있을리 없다.

이렇게, 환경변수를 사용해서 고쳐주도록 한다.

물론, 환경변수는 heroku의 세팅에 등록해주어야한다.

주소는, 나의 mongoDB Atlas의 DB 주소이다.

mongodb+srv:// 

로 시작하는 그 주소.

 

[추가 오류]

 

1. SPRITE 성공, 실패 주소 변경

 SPRITE 의 성공, 실패 주소도 localhost로 되어 있기 때문에, 환경변수를 사용하여, 배포용을 따로 만들어준다.

 

2. session 저장소 주소 변경

 세션을 만들때, 저장되는 주소가, 127.0.0.1 (나 자신) 의 MONGODB 서버로 되어있기 때문에,

환경변수를 사용하여, 배포용을 따로 만들어준다.

 

3. 당연하게도 HEROKU 에 환경변수 등록

 

등록해주어야 환경변수를 사용한다. 등록해주자.

 

길고 긴 3일이었고, 배운게 참 많았다. (이런식으로 배우고 싶지는 않았지만)

 

좋은 경험이었고, 다신 하지 말자

 

정말로, 이론공부가 절실히 필요하다.

 

나볼라고 파일첨부한다.

댓글