ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #TIL_MongoDB 오류에 관하여(feat_해결 방법 몽 말인지 알지?)
    TIL (Today I Learned) 2023. 11. 1. 23:58

    # MongoDB를 오늘 학습하면서 겪었던 문제(맨 아래 내용정리 있습니다.)

     

    주특기 node.js 학습 2일차 몽고디비 연습 중 원인을 알 수 없는 오류에 시달렸습니다. 

    강의 영상대로 잘 따라하고 있었는데 서버를 3000포트로 열고, Thunder Client에서 POST로 주소 값을 주고 Body에 코드 값을 주고 Send를 눌렀는데 반환하는 값이 안뜨고 오류가 떠버렸습니다.

    <node app.js 실행 시 화면>_이때 까지만해도 순조롭게 진행되는 줄 알았습니다.


     

    <console.log로 서버 연결 오류 값을 미리 작성했기 때문에 로그가 안찍혀 연결된 상태로 착각했습니다.>

     

    처음에는 영상을 보고 연습한 코드가 잘못된 줄 알고 한 시간 넘게 마침표 하나까지 두 세번 씩 체크하면서 확인하였으나 영상 속 코드와 제가 작성한 코드의 차이점을 발견하지 못했습니다. 터미널에서는 계속 시간 초과에 관련된 오류를 가리켰기에 불러오는 코드 문제로 착각했던 것 같습니다. 

    이다음으로 예상한 오류는 studio 3T였습니다. Local에서 기존에 만들었던 New connection을 잘 못 만들었거나 설정을 잘못했나 싶어서 기존에 데이터를 삭제하고 spa_mall로 작업 중인 이름을 따라서 다시 만들고 테스트하였습니다. 하지만 여러 테스트를 거쳤지만 원인이 아닌 것 같았습니다. 애초에 작업을 따라 하는 영상 속에서도 POST에서 반환하는 값이 뜨고 나서 3T를 설정했기 때문에 다시 원인을 찾아봤습니다.  

     한참을 헤맨 끝에 한가지 원인을 발견했습니다. 서버를 포트로 열고 오래 기다려봤는데  몽고디비 연결 에러가 뜨는 것을 찾을 수 있었습니다. 덕분에 에러의 해결 방향을 잡을 수 있었습니다.  

    <2분정도? 기다려보 찾은 오류 내용>


    # 겪었던 문제를 해결하기 위해서 

     

    [1] mongosh를 이용하여 명령어 실행

    몽고디비에 다시 연결하기 위해 로컬 C 파일에서 data/db/bin 경로로 들어가  mongosh를 실행하여 연결을 다시 확인하였습니다. 

    < MongoDB 파일 저장위치에서 오류를 잡기 위한 시도>


    <잘 설치가 된 것을 확인하였고 밑에 경고를 못보고 지나쳤습니다. >

     

    [2] mongosh를 이용하여 문자열 테스트

    서버가 부팅할 때 이러한 시작 경고를 생성했습니다. 처음엔 뭐지? 싶었다가 밑에 경고를 나중에 발견하고 일단 문자열이라도 테스트 해보자해서 테스트 해봤습니다.

     

    <테스트는 이상이 없어 보였습니다.>

     

    [3] 명령프롬프트에서 실행해보기

    점점 더 미궁으로 빠졌습니다. 설치도 잘 되어있고 값들도 잘 나오는데 뭐가 문제일지 싶었습니다. 운 좋게 stackoverflow에서 저와 유사한 상황의 글을 발견했습니다. 현재 상황에서 서버가 만들어지지 않아서 생긴 문제라는데... 음... 일단 찾은 방법으로 시도해 보기 위해 mongosh 명령 창을 닫고 cmd 명령 프롬프트에서 진행해 봤습니다. 

    <명령프롬프트에서 mongod를 검색 >

     

    [4] 명령프롬프트에서 서버 생성을 위한 경로 넣어주기

    mongod를 실행해 보니 서버 생성이 진행되지 않아서 생긴 오류가 맞았습니다. 다시 한번 서버 생성을 위해 경로를 넣어주고 실행을 해봤습니다.

     

    <명령프롬프트에 경로 설정>

     

    [5] 명령프롬프트에서 mongod -dbpath "주소" 값에 --IPv6 코드를 추가

    네 맞습니다. 해결될 줄 알았는데 또다시 오류가 떠버렸습니다. 내용을 찾아보니 mongod -dbpath "주소" 값에 --IPv6 코드를 추가해야 서버 문제를 해결할 수 있다고 해서 다시 수정해 봤습니다. 

     

    < mongod -dbpath "주소"값에&nbsp; --ipv6 코드를 추가 >

     

    크게 바뀐 게 없어서 긴가민가했었는데 혹시 몰라서 이 상태에서 다시 node app. JS를 다시 호출해 보고 기다려 보기로 했습니다. 

     

    <데이터 베이스 연결 성공!>

     

    드디어 Terminal에서 데이터베이스 연결 성공 console.log가 동작했습니다. 곧바로 Thunder Client로 이동하여 POST로 URL 값을 설정하고 Body에 코드 값을 입력 후 Send를 눌렀는데 드디어!! 이 문제를 해결했습니다. ㅠㅠ

    <데이터 베이스 연결 후 정상 작동>


    문제를 해결하게 되면서 비록 오늘 목표치만큼 강의를 전부 수강하진 못했지만 예상치 못한 오류로 인해 값진 경험을 했다고 생각합니다. 덕분에 오늘도 1% 성장한 하루였습니다. 아! 그리고 옆에서 도움을 주신 able 팀장님께 정말 감사드립니다. 

     


    # 시간없는 분들을 위한 내용정리 

     

    ***문제

     

    - 서버를 3000포트로 열고 POST 요청을 Thunder Client로 보냈을 때 반환 값이 표시되지 않고 오류가 발생함.

     

    - 몽고디비 연결 오류 발생.

     

    ***해결 과정

     

    - mongosh를 이용하여 몽고디비에 연결 상태를 확인하고 로컬 데이터베이스 경로를 설정.

     

    - 몽고디비에 연결은 정상이었으나 서버 부팅 시 경고가 생성되었음. 이 경고를 확인하기 위해 문자열 테스트 진행.

     

    - 서버가 정상적으로 생성되지 않아 문제가 발생했을 가능성이 있어, 명령 프롬프트에서 mongod 명령을 실행하여 경로 설정을 시도.

     

    - 명령 프롬프트에서 mongod 명령을 실행 시 --dbpath 옵션과 함께 --ipv6 코드를 추가하여 서버를 다시 생성.

     

    - 이후, 몽고디비와 서버 연결에 성공하고 node app.js를 실행하여 POST 요청을 성공적으로 보내고 응답을 받음.

     

    #참고 내용

    stackoverflow:

    https://stackoverflow.com/questions/69840504/mongooseserverselectionerror-connect-econnrefused-127017?rq=1

     

    # +++추가내용 위에 보다 더더더더더더더더 ~더 쉬운 방법

    어제 저녁 슬랙에 공지로 올라왔던 글을 보고 더 쉬운 방법을 알게 되었습니다. 

    mongoose 를 통해 node에서 connected 에러가 나는 경우 기존의  index.js 파일에서 localhost:27017을 수정하면 되는데 개인 컴퓨터 중 (특히 윈도우 사용자들 ) 자신의 IP 127.0.0.1과 localhost라는 도메인이 연결이 안되어 있으면 컴퓨터 자신을 찾지 못해 에러가 발생한다고 합니다.

     

    <localhost 수정 전>


    <localhost:27017로 수정 후>


    <이 방법으로도 데이터베이스 연결 성공>


    <POST에서 Send 테스트시 동작 완료>

     

Designed by Tistory.