Node REPL .load 명령어 무한 루프 에러

흩날리는추억·2023년 5월 25일
0

오류 발생 상황

Mongoose를 사용하여 Schema를 정의하고 모델을 생성한 뒤 인스턴스를 변수에 저장했습니다.

예시 코드

const mongoose = require('mongoose');

// 스키마 정의
const userSchema = new mongoose.Schema({
  name: String,
  age: Number,
  call: String
});

// 모델 생성
const User = mongoose.model('User', userSchema);

// 인스턴스 생성
const newUser = new User({
  name: 'Jang',
  age: 29,
  call: '010-xxxx-xxxx'
});

위의 코드를 Terminal에 가져와서 생성한 인스턴스를 확인하기 위해 Node REPL의 명령어 중 하나인 .load를 사용하였는데 아래와 같은 무한 루프 에러가 나타났습니다.

오류 해결 과정

제일 먼저 이 글의 제목과 비슷한 내용을 검색하여 해결 방안을 찾았습니다. 여러 가지 방법들이 나왔지만 제가 처한 상황과는 상이한게 많았고 또한 제 마음에 와닿는 해결 방안이 없었습니다. 그래서 오류에 대해 조금 더 생각하고 스스로 해결하기로 했습니다.

오류 상황에 대한 지식 학습

Node REPL를 사용하다가 나온 오류이므로 관련 내용에 대해 더 알아볼 필요성을 느꼈습니다.

Node REPL은 Node.js의 REPL(Read-Eval-Print Loop) 환경을 말합니다. REPL은 사용자가 명령어를 입력하고 그에 대한 결과를 즉시 반환하는 인터페이스입니다. 이를 통해 개발자는 Node.js를 대화식으로 사용하고 코드 조각을 테스트하고 디버깅할 수 있습니다. <

REPL에는 단계가 있는데 지금 오류가 생긴 상황는 1단계인 Read(읽기) 단계입니다.

  • Read(읽기): REPL은 사용자로부터 명령어 또는 코드를 입력받습니다.
    (.load 명령어는 REPL 환경에서 외부 파일을 읽어와 해당 파일의 내용을 실행하는 데 사용됩니다.)
  • Eval(평가): 입력된 명령어나 코드를 평가하고 실행합니다.
  • Print(출력): 평가된 결과를 출력합니다.
  • Loop(반복): 다시 읽기 단계로 돌아가 사용자가 추가적인 명령어나 코드를 입력할 수 있도록 합니다.

오류 상황이 생긴 원인 예측

저는 오류 원인을 2가지 생각했습니다.
1. Node의 REPL를 사용하다 발생한 오류이기 때문에 Node의 버전에 의해 발생한 오류
2. MongoDB의 버전에 의해 발생한 오류 => MongoDB가 6버전으로 넘어가며 많은 것이 바뀌었다는 내용을 본 기억이 있음

오류 상황 해결 시도

먼저 현재 사용하고 있는 Node의 버전을 확인했고 NVM을 이용하여 Node 버전을 낮춰보았습니다.

오류 상황에서 18.15.0 버전을 사용했었고, 제가 가지고 있는 버전 중에 낮은 축에 속하는 12.18.3으로 변경하고 테스트 진행했습니다.


위의 사진과 같이 원래 오류였던 무한 루프 대신에 파일을 제대로 읽고 난 후 Cannot find module 'mongoose'라는 오류가 나타났다는 것을 알 수 있습니다. 해당 오류의 경우 해결하기 가장 쉬운 방법은 npm install mongoose 사용하여 재설치 하는 것이기 때문에 바로 시도해보았고 결과는 아래와 같습니다.

생성한 인스턴스도 제대로 출력하는 모습을 볼 수 있습니다.

뭔가 찝찝한 오류 해결

Node의 버전을 낮추고 mongoose를 재설치 한 후에 오류가 해결된 상황이기 때문에 저는 Node를 원래 쓰던 버전으로 바꾸어 똑같이 시도해보았지만 무한 루프 상황이 다시 발생하였습니다. 다른 원인이 따로 있을까 여러가지 확인해보던 중 오류에 관한 해결 내용은 아니지만 MongoDB 커뮤니티 사이트에서 node의 최소 지원 버전에 관한 내용을 볼 수 있었습니다. MongoDB 커뮤니티
간단하게 내용을 설명하자면 MongoDB의 기능들이 지원되는 최소 Node.js버전은 14.20.1 버전이라는 말이 적혀 있습니다.

Node 버전 변경

위의 내용에 따라 저는 이번 학습 프로젝트에서 사용할 node 버전은 NVM에 이미 설치되어 있는 16.15.1를 사용하기로 했습니다.

마치며

사실 아직도 완전한 오류 해결이 아니라서 스스로 만족하진 않지만 앞으로 배울 내용이 많기 때문에 이만 이번 오류를 마치려고 합니다. 혹시 몰라 다음에 기회가 되어 이 오류를 해결할 때 쉽게 알아보기 위해 현재 node에 관련된 버전을 정리하겠습니다.

버전 상황 정리

원래 사용했던 버전 18.15.0
오류 해결 시점 버전 16.15.1
이 글을 작성한 시점에서 Node.js 권장 버전 18.16.0
이 글을 작성한 시점에서 Node.js 최신 버전 20.2.0

profile
걱정보다 생각을 하고 싶은 사람

0개의 댓글