이 글은 유튜브에 올라온 따라하면서 배우는 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
키워드를 붙여주어 아래와 같이 해결되었다!
이후에도 버전 업데이트 등으로 여러 문제가 발생할 것이 예상되어, 이후의 문제는 추후에 재업로드 합니다.
문제를 해결하며 얻은 교훈 : 무작정 검색으로 답을 찾지 말고, 원서를 참고해보자!!