인프런 커뮤니티 질문&답변

장주윤님의 프로필 이미지
장주윤

작성한 질문수

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

14-04 Redis에서 cacheModule을 위한 @nestjs/common버전 업데이트

해결된 질문

작성

·

395

0

다른분이 질문주셨던

'app.module.ts에서 redis연결하는데 @nestjs/common에 CacheModule이 없습니다' 에 대한 답변대로

"@nestjs/common": "^9.0.0"

버전으로 업데이트해서 node_modules도 yarn install 해서 설치했습니다. yarn.lock 확인했는데 버전이 바뀌지 않아 "@nestjs/common": "9.0.0" 로 바꿔서 다시 yarn install 했구요.

그런데

@nestjs/common 버전을 9.0으로 바꾸면 계속 mybackend-1(백엔드컴퓨터)에서 오류가 생깁니다. 기존버전 10.0.0이었을 때는 오류가 발생하지 않았었습니다.

실은 강의를 들으며 코드를 따라 치다 마지막에 docker-compose build후 up 했을 때 어디서 오류가 발생하는지 모르겠어서 처음부터 yarn add로 redis랑 cache-manager라이브러리 설치하는 것 부터 docker-compose build,up 하면서 확인을 해봤었는데 @nestjs/common 버전을 9.0으로 바꿨을 때 위 사진처럼 오류가 발생했습니다.

package.json파일도 올려보내드립니다.

@nestjs/common 버전을 바꿔야 될까요? 아님 다른 오류 원인이 있을까요..?

답변 2

1

안녕하세요, 인프런 AI 인턴입니다.

장주윤님의 @nestjs/common 버전 업데이트 문제 관련하여 답변을 드리겠습니다.

문제의 원인은 두 가지로 추정됩니다. 먼저 @nestjs/common 버전을 9.0으로 다운그레이드 했을 때 필요한 모듈 select-exception-filter-metadata.util이 없을 수 있습니다. 이는 버전 10에서는 존재하지만 9.0에는 존재하지 않는 파일 또는 모듈일 가능성이 있습니다.

두 번째 오류의 원인으로는 NestJS 프로젝트에서 @nestjs/common과 관련된 설치된 다른 모듈들과의 호환성 문제일 수 있습니다. 다른 모듈들이 버전 10.0.0을 기반으로 구현되었을 수도 있으며, 그러한 경우 버전 9.0으로 다운그레이드하면 의존성 문제가 발생하게 됩니다.

문제 해결을 위해 다음 단계를 시도해 볼 수 있습니다:

  1. node_modules 폴더와 yarn.lock 또는 package-lock.json 파일을 삭제하고, 다시 설치하여 정확한 버전의 모듈들이 설치되었는지 확인합니다.

  2. 호환성 문제를 해결하기 위해 관련된 다른 모듈들도 적절한 버전으로 업데이트합니다.

  3. NestJS 공식 문서 또는 해당 모듈의 문서에 접속하여, 9.0 버전에 필요한 변경사항이 있는지 확인합니다.

  4. 만약 모든 시도가 실패한다면, @nestjs/common을 원래 버전인 10.0.0으로 롤백하고 다른 해결 방법을 찾습니다.

도커 컴포즈에서 오류가 발생할 경우, 해당 섹션과 관련된 Spring Boot 공식 문서의 Docker Compose Support 부분을 잘 읽어보시고, 설정이 올바른지 확인해보시길 권장드립니다.

도움이 필요하시면 추가적으로 질문해 주시기 바랍니다.

장주윤님의 프로필 이미지
장주윤
질문자

해결방안 주신대로 해봤지만 해결되지 않아 수업 때 사용했던 버전을 맞추고자

package.json파일을 전부 다운그레이드 했습니다.

dependencies

imagedevdependencies

image버전을 다운그레이드 했을 때 다음과 같은 오류가 발생했습니다.

fs-capacitor 라이브러리를 다운받았지만 여전히 같은 오류가 발생 했었습니다.

서로 다른 라이브러리의 버전을 맞추는게 쉽지더라고요.. npm에서 @nestjs/common 버전별로 확인은 가능하나 docs를 어디서 봐야하는 건지 모르겠습니다.

버전을 똑같이 하면 문제가 해결 되는건지는 잘 모르겠습니다만 기존 강의의 package.json 파일을 확인할 수 있다면 한번 보고싶습니다.

다른 해결 방법이 있다면 알려주시면 감사하겠습니다.

0

노원두님의 프로필 이미지
노원두
지식공유자

안녕하세요! 주윤님!

  1. 주윤님께서 올려주신 package.json 파일을 확인해 본 결과, @apollo/server 부분만 최신라이브러리이므로 제거하신다면, 나머지는 수업의 버전과 동일한 것 같네요!(현재는 @apollo/server 대신 apollo-server-express 라이브러리를 사용하고 있어요!)

"dependencies": {
    "@google-cloud/storage": "^6.9.3",
    "@nestjs/apollo": "^10.1.7",
    "@nestjs/common": "^9.0.0",
    "@nestjs/config": "^2.2.0",
    "@nestjs/core": "^9.0.0",
    "@nestjs/graphql": "^10.1.7",
    "@nestjs/jwt": "^10.0.1",
    "@nestjs/passport": "^9.0.2",
    "@nestjs/platform-express": "^9.0.0",
    "@nestjs/typeorm": "^9.0.1",
    "apollo-server-express": "^3.11.1",
    "bcrypt": "^5.1.0",
    "cache-manager": "4.1.0",
    "cache-manager-redis-store": "2.0.0",
    "class-transformer": "^0.5.1",
    "class-validator": "^0.13.2",
    "graphql": "^16.6.0",
    "graphql-upload": "13.0.0",
    "mysql2": "^3.1.0",
    "passport": "^0.6.0",
    "passport-jwt": "^4.0.1",
    "redis": "^4.6.4",
    "reflect-metadata": "^0.1.13",
    "rimraf": "^3.0.2",
    "rxjs": "^7.2.0",
    "typeorm": "^0.3.11"
  },
"devDependencies": {
    "@nestjs/cli": "^9.0.0",
    "@nestjs/schematics": "^9.0.0",
    "@nestjs/testing": "^9.0.0",
    "@types/bcrypt": "^5.0.0",
    "@types/cache-manager-redis-store": "^2.0.1",
    "@types/express": "^4.17.13",
    "@types/graphql-upload": "8.0.12",
    "@types/jest": "28.1.4",
    "@types/node": "^16.0.0",
    "@types/passport-jwt": "^3.0.8",
    "@types/supertest": "^2.0.11",
    "@typescript-eslint/eslint-plugin": "^5.0.0",
    "@typescript-eslint/parser": "^5.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-plugin-prettier": "^4.0.0",
    "jest": "28.1.2",
    "prettier": "^2.3.2",
    "source-map-support": "^0.5.20",
    "supertest": "^6.1.3",
    "ts-jest": "28.0.5",
    "ts-loader": "^9.2.3",
    "ts-node": "^10.0.0",
    "tsconfig-paths": "4.0.0",
    "typescript": "^4.3.5"
  },

 

  1. 다음으로 fs-capacitor을 설치하셨는데, 이는 graphql-upload에서 필요로 하는 라이브러리이므로, 주윤님께서 직접 설치하지 않으셔도, graphql-upload 라이브러리 내에서 설치합니다! 따라서 지워주세요!

     

    image

    3. 이렇게 원상복귀 시키고 docker를 실행하게 되면, node:14 버전에서 해당 패키지들을 읽을 수 없다는 에러 메시지와 함께 충돌이 납니다!, node:14 버전으로는 최신 라이브러리들을 읽지 못하는 문제가 있는 것 같아요!
    이를 해결하기 위해 node 버전을 18버전으로 올리게 되면, graphql-upload에서 fs-capacitor를 읽을 수 없는 충돌 문제가 다시 한 번 발생하네요!(이에따라 graphql-upload를 더 최신 버전으로 올리시면, 수업 내용과 많이 달라지게 됩니다 => 실무에서 흔히 발생하는 문제들이에요!)

     


    종합적으로 판단하였을 때, node 버전과 라이브러리 버전간의 충돌로 발생한 것이며,
    이를 해결하는 방법으로는
    1.전반적으로 관련된 라이브러리와 node 버전을 모두 함께 올려 주시거나
    (ex, node:18, graphql-upload: 16)
    아니면 2.현재 발생하는 충돌만 피할 수 있을 정도로 약간만 올려 주시면서 확인하실 필요가 있어요!

     

     

    • 실무 상황이라 가정하였을 때, 대규모 패치하는 것이 아닌 이상 2번의 방법으로 대응해야 해요!
      대규모 패치는 어디서 어떤 문제가 터질지 모르기 때문이에요!
      (수업 역시 마찬가지로, graphql-upload: 16 으로 업데이트시, import export 모듈 상당수가 변경되어 수업 내용 자체가 변경됩니다)



    따라서, 2번의 방법으로 대응해 볼까요!


    docker를 실행해 본 결과, 현재 14.21.3 으로 에러가 났는데, 최소 16.14보다는 높아야 한다고 에러 메시지를 보여주고 있네요!

     
    너무 크게 node:18로 올리지 말고, node:16.14 로 최소한만 올려볼까요?!

image


도커 내에서 실행되는 node 버전을 16.14로 수정하여 실행한 결과, 성공적으로 빌드가 되는 것을 확인하실 수 있습니다!
imageimage


만약, 해결되셨다면 그냥 끝내지 마시고, 이렇게 하였음에도 실패했다면? 다음에는 어떤 시도를 해보면 좋을지 한 번 고민해 보세요!^^

장주윤님의 프로필 이미지
장주윤
질문자

2번대로 해서 해결했습니다. 단순히 문제 해결 뿐만아니라 어떻게 사고해야하는지도 알려주셔서 감사합니다!!

장주윤님의 프로필 이미지
장주윤

작성한 질문수

질문하기