내배캠/TIL(Today I Learned)

[TIL]내배캠 19, 20일차

도오라에몽 2023. 6. 13. 21:14

문제점

  1. api 호출 과정에서 문제 발생
    api 테스트를 위해 POST 요청을 보냈더니 404 Not Found를 반환하고 오류 내용은 아래와 같다.

MongoServerSelectionError: connect ECONNREFUSED ::1:27017
    at Timeout._onTimeout (C:\Users\ODH\Desktop\javascript_practice\node_modules\mongodb\lib\sdam\topology.js:278:38)
    at listOnTimeout (node:internal/timers:569:17)
    at process.processTimers (node:internal/timers:512:7) {
  reason: TopologyDescription {
    type: 'Unknown',
    servers: Map(1) { 'localhost:27017' => [ServerDescription] },
    stale: false,
    compatible: true,
    heartbeatFrequencyMS: 10000,
    localThresholdMS: 15,
    setName: null,
    maxElectionId: null,
    maxSetVersion: null,
    commonWireVersion: 0,
    logicalSessionTimeoutMinutes: null
  },
  code: undefined,
  [Symbol(errorLabels)]: Set(0) {}
}

그리고 위의 문제를 발생하는 코드는 아래와 같다.
const connect = () => {
    mongoose.connect("mongodb://localhost:27017/mongodb_prac")
    .catch(err => console.log(err));

    console.log("MongoDB is connected!");
};

mongoose.connection.on("error", err => {
    console.error("몽고디비 연결 에러", err);
});
  1. 위 에러를 해결하기 위해 이것 저것 해보다가 윈도우에서 백그라운드에서 동작하던 MongoDB의 프로세스를 종료함
    mongodb가 설치되어 있는 경로의 bin 폴더에서 mongod.exe를 실행해도 실행이 안되는 문제가 있다.

해결 방법

첫 번째 문제 원인 및 해결 방법
원인은 공식 문서에 기술되어 있어 링크로 남기겠다.
https://www.mongodb.com/docs/manual/core/security-mongodb-configuration/

해결 방법은 mongoose.connect()부분에서 도메인으로 들어가는 부분이 localhost가 아니라 127.0.0.1로 나타내면 된다. 아니면 문서에 나온대로 설정을 건들면 될 것 같다.(설정은 건들기 귀찮아서 안해봄)

두 번째 문제 해결 방법 : powershell을 관리자 권한으로 실행시켜 net stat MongoDB 명령을 실행시키니 다시 백그라운드로 실행되었다. (윈도우 기준으로 작성)

프로젝트를 하며 추가적으로 고민한 것

URI를 구성하면서 어떤 형태로 구성하는 것인지 생각을 많이 하게 된다.
예를 들면 게시글을 요청하는 URI를 RESTful하게 나타내보자.

GET /api/posts
POST /api/posts


GET /api/posts/postId
PUT /api/posts/postId
DELETE /api/posts/postId


먼저 페이지에서 포스트에 관련된 데이터를 뿌려야 하니 이름을 posts로 지었다. 그리고 기능 개발을 하면서 느낀 것이 POST /api/posts의 경우에는 아직 포스트를 작성한 것이 아니기 때문에 등록하는 과정에서 postId가 생성되어야 한다. 뭐.. 이러한 것들을 개발하면서 느끼게 되었다.

오늘은 끝 ^^