[Nest.js] 오류 해결 모음 1탄

이동엽·2022년 10월 17일
1

nestjs

목록 보기
1/3

이 글은 유튜브에 올라온 따라하면서 배우는 NestJS를 따라하면서 겪은 오류의 해결법을 공유하고자 작성합니다.

일부 내용을 변경했지만, 완성한 코드는 링크를 통해 볼 수 있습니다.


개요

어느덧 가을이 다가오고, 요청과 응답에 대한 서버 동작 과정을 이해하고자, Nest.js를 공부하기 시작했다.

TypeScript 문법도 제대로 갖추지 않은 상태라 어쩌면 무모한 도전일지도 모르지만,
이전에 자바스크립트 문법을 모른 체로 Node.js를 공부했던 때보다는 이해가 잘 되어 아직까진 막힘이 없다!


약 이틀간 쏟아 부운 내 구글링 흔적들.. 지극히 일부.

아무튼 영상을 따라 하다보면, 3시간 10분 언저리부터 버전 문제를 비롯해 여러 문제를 직면하게 된다.
검색하면 안 나오는 건 없다고 말할 수 있는 세상이라곤 하지만, 이 말에는 하나의 조건이 숨겨져 있다.


"영어로 검색했을 때 안 나오는게 없는 거겠지.."


개발자가 되기 위해 CS 지식은 열심히 쌓았을지언정, 영어 공부는 착실하게 하지 못한 나와 같은 부류들을 위해 친절히 한글로 오류 해결을 적어본다!



첫번째 문제

Timeline : 2시간 49분

board.repository.ts 파일을 작성할 때, @EntityRepository() 데코레이터가 depreacated됨.

이는 typeorm ^0.3 버전을 이상일 때 나타나는데, 해당 데코레이터는 ^0.2 버전까지만 사용 가능하다.

따라서 사진에서 보이는 8번 줄을 삭제하거나, typeorm을 ^0.2 버전을 사용하면 해결할 수 있다!


두번째 문제

Timeline : 3시간 05분

board.service.ts 파일을 작성할 때, findOne() 메소드의 인자 타입 불일치 문제

영상에서는 findOne() 메소드에 인자로, id만 넣어준 것을 볼 수 있다.

단, 우리가 따라해보면 오류가 발생하는데, 왜일까?

→ 영상에서 typeORM의 repositoryAPI 원서를 참고하여 작성하였기 때문에, 나도 원서를 찾아보았다.

→ 위 사진은 영상에서 원서를 참고할 당시의 메소드 형태이다.
→ 원서를 통해 내가 찾은 현재의 메소드 형태는 아래와 같다.

→ 영상이 올라온 지 1년이 지난 지금, 메소드의 형태가 바뀐 것을 볼 수 있다.
→ 따라서 업데이트된 형태에 맞게 인자를 수정하였다.

→ 매개변수 자리에 options 값을 설정해줌으로써, 오류를 해결하였다!


💡 때로는 검색만 하지는 말고, 원서를 참고하는 것이 큰 도움이 된다.


세번째 문제

Timeline : 3시간 15분

게시물을 조회하고, 생성하는 코드를 작성하고 npm run start:dev를 실행하면 발생하는 오류

"[ExceptionHandler] Nest can't resolve dependencies of the BoardService (?). Please make sure that the argument BoardRepository at index [0] is available in the BoardsModule context."

약 한시간 동안 stackoverflow를 비롯한 영어 답변들을 읽은 결과 : 모듈에서 imports 가 잘못됨을 알았다.

단, 앞에서도 말했듯 타입스크립도 문법도 모를 뿐더러, 무작정 영상 속 코드를 따라치는 내 수준에서는 아직 제자리다.


"그래서 이제 뭘 어떻게 고치라고?" 라는 생각과 함께 떠오른 아이디어는 "이것도 원서를 한번 볼까?" 였다.

이번에는 TypeORM 원서가 아닌, NestJS의 원서의 Database 부분을 참고하였다.


우선, 영상에서 설명한 레퍼지토리 패턴은 문제가 없었고..

AppModule도 문제가 없었다..

그러던 중, 놓칠뻔 하다가 발견한 하위 모듈에서의 문제!! 눈치 채셨나요?

영상에서 작성한 코드에서는 TypeOrmModule.forFeature([BoardRepository])imports 했는데,

원서에서는 forFeature()의 매개변수로 레퍼지토리가 아닌 엔티티를 제공하고 있었습니다!


따라서 BoardRepository가 아닌, Board 엔티티를 넣어줌으로써 해결할 수 있었습니다.


네번째 문제

Timeline : 3시간 17분

Service에 작성한 데이터베이스 관련 로직들을 Repository로 이동시키는 과정에서 발생한 오류

영상에서는 단순히 관련 로직들을 이동하면 되었는데, 이는 typeorm@^0.3.x 버전부터는 deprecated되어 동작하지 않는다고 한다.

아직까지 표준화된 해결법은 나오지 않았지만 여러 사람들이 각자의 해결책을 공유하고 있다.


다섯번째 문제

Timeline : 3시간 32분

게시물의 상태를 업데이트하는 과정에서 async/await 구문 오류

영상에서와 달리 직접 따라해보면, 콘솔 창에 아래와 같은 오류 메시지가 호출된다.

내용은.. await 변환을 잊은 건 아닌지 묻는가보다.. 했다.

→ 따라서 경고하는 내용대로 await 키워드를 붙여주어 아래와 같이 해결되었다!


💡 마무리

이후에도 버전 업데이트 등으로 여러 문제가 발생할 것이 예상되어, 이후의 문제는 추후에 재업로드 합니다.


문제를 해결하며 얻은 교훈 : 무작정 검색으로 답을 찾지 말고, 원서를 참고해보자!!

profile
백엔드 개발자로 등 따숩고 배 부르게 되는 그 날까지

0개의 댓글