나만의 작은 도서관

[TIL] 240513 캠프 29일차: Node.js 시작 본문

Today I Learn

[TIL] 240513 캠프 29일차: Node.js 시작

pledge24 2024. 5. 13. 23:30
오늘의 한 마디: 클났네

오늘 배운 내용                                     

  • 파일의 경로를 나타날 때, ./는 상대경로로 현재 파일이 있는 디렉토리가 기준이 된다. 예를 들어, ./index.js를 하면 현재 파일을 포함하는 해당 폴더 안에 있는 index.js를 가리킨다.
  • npm, yarn은 패키지 관리자로 여러 패키지들을 설치하고 버전 관리 및 의존성을 해결해주는 편리한 도구이다. yarn의 경우 패키지를 설치하면 package.json파일이 생기고, 해당 파일 안에는 설치한 패키지의 정보가 들어있다.
  • package.json파일이 있다면 yarn명령어로 추가한 패키지가 담긴 node_modules폴더가 없어도 사용된 패키지를 알 수 있다. 만약 설치가 필요하다면 package.json파일을 읽어 사용된 패키지를 설치하면 되기 때문에 node_modules폴더는 따로 올릴 필요가 없다.
  • mongoose 패키지를 사용하면 vscode환경에서 MongoDB에 접속할 수 있으며, 보다편리하게 데이터를 읽고 쓸 수 있다.
  • joi 패키지를 사용하면 유효성 검사를 짧은 코드만으로 할 수 있다.

오늘의 Trouble Shooting                  

Problem 1. MongoDB 접속 오류 : querySrv ENODATA

Node.js 강의를 따라가면서 vscode에서 mongoose를 이용한 MongoDB 접속하는 코드를 따라하고 있었는데, 강의와 달리 다음과 같은 코드가 뜨며 오류가 발생했다. 이상한 점은 성공과 실패 로그가 동시에 떴다는 것이다... 

C:\Users\zmwps\OneDrive\바탕 화면\NodeJSWorkspace\Todo-list>node app.js
3000 포트로 서버가 열렸어요!
MongoDB 연결에 실패하였습니다. Error: querySrv ENOTFOUND _mongodb._tcp.express-mongo.uy7ttg7.mongodb.net
MongoDB 연결 에러 Error: querySrv ENOTFOUND _mongodb._tcp.express-mongo.uy7ttg7.mongodb.net
    at QueryReqWrap.onresolve [as oncomplete] (node:internal/dns/promises:275:17) { 
  errno: undefined,
  code: 'ENOTFOUND',
  syscall: 'querySrv',
  hostname: '_mongodb._tcp.express-mongo.uy7ttg7.mongodb.net'
}

Solve. Node.js 버전을 MongoDB에서 변경.

구글링을 해보다가  MongoDB에서 Node.js 버전설정이 설치된 버전이랑 어긋날 때 발생할 수도 있다는 정보를 얻었다. 강의에서 설치한 Node.js의 버전은 LTS버전이었고, 내가 컴퓨터에 설치한 Node.js버전은 최신버전이였기 때문에 stable API가 아닌, NON stable API로 변경해야 했다. 그렇게 NON stable API 최신 버전으로 설정을 바꿨더니 MongoDB에 정상적으로 접속할 수 있었다.


Problem 2. 이미 존재하는 포트 / killall node 명령어 작동 안함

localhost에서 동일한 포트번호를 이미 사용 중이라면 다음과 같은 오류가 발생하는데 이런 문제를 해결하는 방법으로 강의에서 killall node를 알려주었지만 아무리 입력해도 없는 커맨드라고 하면서 작동을 하지 않았다. 

node:events:496
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3000

Solve. MacOS 전용 커맨드였다. 

조금 구글링해보니 맥 전용 커맨드였다. 비슷한 기능을 하는 'taskkill /F /IM node.exe'명령어를 사용하니 다음과 같은 문구와 함께 정상적으로 포트를 사용 중이던 프로그램이 종료되었다.

SUCCESS: The process "node.exe" with PID 31212 has been terminated.

오늘 하루는?                                       

  • 많이 힘들다... 강의가 목요일 저녁에 나온 줄 모르고 자바스크립트 공부하다가 이제 보기 시작하니 시간이 너무 촉박하다. 빨간 날인 수요일에 약속이 있어서 금요일까지 제출해야하는 과제를 하는데 제 시간에 제출할 수 있을런지 모르겠다. 일단 강의 진도 뺄 수 있는만큼 빼기는 했는데, 그래도 조금 빠듯해보인다. 뭣하면 하루의 기적을 선보일 수 밖에 없을 것같다.