묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결따라하며 배우는 NestJS
ERROR [ExceptionHandler] No repository for "BoardRepository" was found.
안녕하세요. 데이터베이스를 이용한 CRUD 구현 > 게시물 생성하기 를 들으면서 service와 controller 코드를 고치고 npm run start:dev 실행을 하니 아래와 같은 오류가 뜹니다. 똑같이 코드를 보며 하고있는데 아래와 같은 오류가 뜨는 이유를 알 수 있을까요?? ERROR [ExceptionHandler] No repository for "BoardRepository" was found. Looks like this entity is not registered in current "default" connection? RepositoryNotFoundError: No repository for "BoardRepository" was found. Looks like this entity is not registered in current "default" connection? at RepositoryNotFoundError.TypeORMError [as constructor] (/Users/Desktop/nestjs_crud/src/error/TypeORMError.ts:7:9) at new RepositoryNotFoundError (/Users/Desktop/nestjs_crud/src/error/RepositoryNotFoundError.ts:10:9) at EntityManager.getRepository (/Users/Desktop/nestjs_crud/src/entity-manager/EntityManager.ts:964:19)
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
mongodb 연결 불가 문제
안녕하세요. .env에 MONGODB_URI를 못 읽어서 계속 mongodb connect 실패가 발생하고 있습니다. 혹시나 하여 app.modules.ts 에서 @Modules 앞 뒤로 MONGODB_URI를 콘솔로 찍어봤는데 @Modules 전에는 값이 안나오고 이후에는 잘 출력되는데요. 혹시 추가로 확인해야할 부분이 있을까요? 감사합니다.
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
common entity 상속 시 컬럼 순서 문제
안녕하세요 typeorm 강의에서 쓰신 common entity를 상속하는 코드를 사용하면 위와 같이 컬럼 순서가 나오는데 이렇게 되면 가독성이 안좋아서 컬럼 순서를 바꿔보려 했습니다. 검색해보니 엔티티를 상속했을때 컬럼 순서를 바꿀수 없다고 합니다. https://www.mrlatte.net/code/2020/11/03/typeorm-entity-inheritance.html 실무에서는 어떻게 사용하시는지 궁금합니다.
-
미해결따라하며 배우는 NestJS
BoardsController 못불러와요 ㅜ_ㅜ
안녕하세요, controller까지 작성하고 npm run start:dev로 테스트시 빈배열을 못불러오고 {"statusCode":404,"message":"Cannot GET /boards","error":"Not Found"} 통신이 안되네요 ㅜ_ㅜ 터미널을 보니, 모듈까지 불러오고 컨트롤러는 못불러옵니다ㅜㅜ MAPPED{/borads, GET} route도 못불러오구요.. 그냥 모듈까지 불러오고 스타트가 되는데 어떻게 해야할까요 ㅜㅜ?
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
핫 리로딩 질문
제로초님의 강의를 듣고 혼자 nestjs 개인 프로젝트를 해보려고 개발환경을 세팅하였습니다. 좋은강의 너무 감사드립니다. 세팅을 하던 중 핫 리로딩이 되지 않아 질문드립니다. nestjs 공식문서를 보고 핫 리로딩을 설정하였고, 파일을 수정하면 Error: No such label 'emitAssets' for WebpackLogger.timeEnd() 위와같은 에러가 나오며 실행이 종료됩니다. \Desktop\projects\github_visualization\backend\node_modules\webpack\lib\logging\Logger.js:123 throw new Error(`No such label '${label}' for WebpackLogger.timeEnd()`); 검색을 해보니 webpack 플러그인 문제라고 하는데, 해결 방법을 모르겠어서 질문드립니다.
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
NestJs, Apollo Federation 관련 질문 입니다.
nestjs를 리용하여 microservice를 만들고 있는데 gateway를 통하여 하위앱들에 접근하고 있습니다. applications- app에서 정의한 스키마 schoolyear.entity.ts를 users-app, students-app등 다른 여러 app 들에서 사용하려고 합니다. //application-app @ObjectType() @Directive( '@key(fields: "school_year_id, date_begin, date_end")', ) @Entity({ name: 'mth_schoolyear' }) export class SchoolYear extends BaseEntity { @Column() @Field(() => ID, { nullable: true }) @PrimaryGeneratedColumn() school_year_id?: number; @Column() @Field(() => Date, { nullable: true }) date_begin: Date; @Column() @Field(() => Date, { nullable: true }) date_end: Date; } //users-app @ObjectType() @Directive('@extends') @Directive( '@key(fields: "school_year_id , date_begin, date_end")', ) @Entity({ name: 'mth_schoolyear' }) export class SchoolYear extends BaseEntity { @Column() @Field(() => ID, { nullable: true }) @PrimaryGeneratedColumn() @Directive('@external') school_year_id?: number; @Column() @Field(() => Date, { nullable: true }) @Directive('@external') date_begin: Date; @Column() @Field(() => Date, { nullable: true }) @Directive('@external') date_end: Date; } //students-app @ObjectType() @Directive('@extends') @Directive( '@key(fields: "school_year_id , date_begin, date_end")', ) @Entity({ name: 'mth_schoolyear' }) export class SchoolYear extends BaseEntity { @Column() @Field(() => ID, { nullable: true }) @PrimaryGeneratedColumn() @Directive('@external') school_year_id?: number; @Column() @Field(() => Date, { nullable: true }) @Directive('@external') date_begin: Date; @Column() @Field(() => Date, { nullable: true }) @Directive('@external') date_end: Date; } 1. @Directive(@key(fields)) 와 @Directive('@external') 사이에 어떤 관계가 있는지? @Directive('@external')가 정의된 모든 field를 @Directive(@key(fields))에 정의해야 합니까? 2. Users-app에서 정의한 external field "date_begin", "date_end"가 stuents-app에도 중복존재하는데 오유가 아닙니까?
-
미해결따라하며 배우는 NestJS
findOne(id) 에서 에러가 발생한 경우 해결법
# Info 강의 업로드 연도(2021) 와 수강 연도(2022) 사이에 TypeORM 의 버전이 달라서, Repository.findOne() 메서드의 구성이 달라진 것 같다고 생각합니다.강의 대로 코드를 작성하면 후술할 에러가 발생하는데, 해당 부분을 해결하고 나서, 다른 수강생 분들 도 이런 문제를 겪을까 생각되어서 따로 글로 남기게 되었습니다. ## 문제 세 줄 요약 1. fineOne( id) 를 하면 에러가 발생 2. 관련 레퍼런스가 없어서 TypeORM docs 확인 3. fineOneBy({id}) 로 에러 해결 (2022-03-30) 자세한 내용은 ### 해결방법, ### 참고문서, ### 초기질문 참고해주세요.깃 : unchaptered/22-03-nestjs-board: Nest.JS (github.com) ### 해결방법 2022년 3월 30일 기준으로, this.boardsRepository.findOne( id ); 위와 같이 입력을 했는데 에러가 발생했다면, 해당 부분을 다음의 코드로 교체해서 해결할 수 있습니다. this.boardsRepository.fineOneBy({ id }); ### 참고문서 아래 페이지에서 Ctrl + F 로 fineOne 혹은 fineOneBy 를 검색해서 확인하시면 됩니다.TypeORM - Amazing ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, WebSQL databases. Works in NodeJS, Browser, Ionic, Cordova and Electron platforms. ### 초기 질문 boards.service.ts 의 getBoardById() 에서 this.boardsRepository.fineOne(id); 를 하면 id 에 붉은 경고가 다음과 같이 발생하고 있습니다. 혹시 해당 부분이 왜 문제가 되는지 알 수 있을까요? 정크 데이터까지만 푸쉬 해놓았지만, node_module 버전 문제일까 싶어서 깃 허브 링크도 최하단에 올려놓겠습니다. 위의 에러가 발생하는 해당 코드입니다. async getBoardById(id: number): Promise<Board> { const found = await this.boardsRepository.findOne(id); if (!found) throw new NotFoundException(`Can't find Board by ${id}`); return found; } 엔티티 import { BaseEntity, Column, PrimaryColumn, PrimaryGeneratedColumn } from "typeorm"; import { BoardStatus } from "./board-status.enum"; export class Board extends BaseEntity { @PrimaryGeneratedColumn() id: number; @Column() title: string; @Column() description: string; @Column() status: BoardStatus; } baords.repository.ts import { EntityRepository, Repository } from "typeorm"; import { Board } from "./entity/board.entity"; @EntityRepository(Board) export class BoardsRepository extends Repository<Board> { } 깃허브 : unchaptered/22-03-nestjs-board: Nest.JS (github.com)
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
파일을 클릭하면 제일 1번라인 import에 빨간줄 문의드립니다
안녕하세요 강사님 궁금하게 생겨 문의 드립니다. 다음 사진처럼 항상 파일을 클릭하면 상단 import줄이 저렇게 변하는데요 파일을 다시 닫으면 빨간줄이 사라집니다. 깃허브에 있는 tsconfig.json과 .eslintrc.js는 그대로 복붙했습니다. 제가놓친게있을까요?
-
해결됨탄탄한 백엔드 NestJS, 기초부터 심화까지
cats.module.ts에서 MongooseModule.forFeature 질문 드립니다
안녕하세요 강사님 cats.module.ts 파일에서 import: [MongooseModule.forFeature([{ name: Cat.name, schema: CatSchema }]),이부분에서 빨갛게 해논부분에 왜 Cat.name , name이 붙어있는 이유가 뭔지 알고싶습니다. 저기서 name에 할당한 값으로 Service에서 생성자 주입 받을때? Cat.name 으로 @InjectModel(Cat.name) 하는걸로 보이는데 왜 ".name" 이 붙은건가요?..
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
혹시 NestJS GraphQL - Apollo 강의도 가능할가요?
강의 정말 너무 유익하게 잘 들었습니다! 혹시 GraphQL 강의도 가능할까요?새롭게 내셔도 너무 좋을 것 같아요~
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
mvc패턴을 사용한 예제를 볼 수 있는곳이 있나요?
공식문서에서는 SSR방식을 사용한다고 하셨는데, CSR을 사용하는 방식과, MVC패턴을 사용한, 사용하지 않은 코드를 보면서 차이를 보고 싶습니다 예제 사이트와 코드는 어디서 찾을 수 있나요?
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
소셜 로그인 질문 (passport-apple)
저는 passport-jwt를 사용하여 로그인을 구현하였는데, 소셜 로그인을 위해 passport-apple 를 사용하여 유저 정보를 받아오려고하는데 막혔습니다. https://github.com/ananay/passport-apple/issues/30 nest.js에서 passport-apple사용시 Strategy 클래스의 validate함수에 인자가 제대로 들어오지않는 이슈가 있는것같습니다. 제가 유저정보를 받아온후 그것을 db에 저장후 jwt를 발행하여 다음요청부터는 애플을 거치지않고 제 서버로 jwt를 보내면 제가 유저정보 주는방식으로 구현하려고하는데, 유저 정보를 어떻게 받아와야하는지 모르겠습니다. 구글링해보니 idToken을 decode하면 유저정보가 들어있다고하는데, import { Injectable } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; import { PassportStrategy } from '@nestjs/passport'; import { DecodedIdToken, Strategy, VerifyCallback } from 'passport-apple'; @Injectable() export class AppleStrategy extends PassportStrategy(Strategy, 'apple') { constructor(private jwtService: JwtService) { super({ clientID: process.env.APPLE_CLIENT_ID, teamID: process.env.APPLE_TEAM_ID, callbackURL: process.env.APPLE_CALLBACK_URL, keyID: process.env.APPLE_KEY_ID, privateKeyString: process.env.APPLE_KEY.replace(/\\n/g, '\n'), passReqToCallback: false, }); } async validate( accessToken: string, idToken: string, profile: any, done: VerifyCallback, ) { const decodedIdToken: DecodedIdToken = this.jwtService.verify(idToken); console.log(decodedIdToken); const user = { provider: 'apple', snsId: decodedIdToken.sub, password: decodedIdToken.sub, }; console.log(user); done(null, user); } } 이렇게 코드를 짜니 [Nest] 31 - 02/06/2022, 8:41:18 AM ERROR [ExceptionsHandler] jwt malformed JsonWebTokenError: jwt malformed at Object.module.exports [as verify] (/usr/src/app/node_modules/jsonwebtoken/verify.js:63:17) at JwtService.verify (/usr/src/app/node_modules/@nestjs/jwt/dist/jwt.service.js:37:20) at AppleStrategy.validate (/usr/src/app/src/auth/strategies/apple.strategy.ts:25:60) at AppleStrategy.<anonymous> (/usr/src/app/node_modules/@nestjs/passport/dist/passport/passport.strategy.js:20:55) at Generator.next (<anonymous>) at /usr/src/app/node_modules/@nestjs/passport/dist/passport/passport.strategy.js:8:71 at new Promise (<anonymous>) at __awaiter (/usr/src/app/node_modules/@nestjs/passport/dist/passport/passport.strategy.js:4:12) at AppleStrategy.callback [as _verify] (/usr/src/app/node_modules/@nestjs/passport/dist/passport/passport.strategy.js:17:45) at /usr/src/app/node_modules/passport-oauth2/lib/strategy.js:205:24 이러한 에러가 뜹니다. idToken을 어떻게 해독해야하는지 알수있을까요..? 혹시 실무에서 애플로그인 서비스를 구현해보셨다면 이방법말고 다른방법이라도 있다면 알려주시면 감사하겠습니다!
-
해결됨탄탄한 백엔드 NestJS, 기초부터 심화까지
Comments Module에서 DB import를 하지않아도 상관없나요?
@Module({ imports: [MongooseModule.forFeature([{ name: Cat.name, schema: CatSchema }])], controllers: [CatsController], providers: [CatsService], }) Cat Module 에서는 위와 같이 import를 해줬는데 Comment Module에서는 import를 하나 안 하나 정상적으로 동작합니다 왜 Comment Module에서는 안 하신건가요?
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
swagger용 데코레이터 작성 방법
swagger를 위한 정보를 decorator를 통해 추가하다보면 ApiOperation 뿐만 아니라 ApiBody, ApiResponse 등 다양한 decorator가 추가되고 이에 대한 인자를 객체로 만들어서 넣어주는 과정에서 코드가 굉장히 지저분해지고, decorator에 들어가는 객체들에 대한 정보 관리가 어려워 지는 거 같습니다 . 이런 경우에 커스텀 데코레이터를 만들어서 하나로 합쳐서 사용하고 싶은데 이러한 커스텀 테코레이터에 대해서 간단하게 작성방법을 강의영상으로 추가해주실 수 있을 지 문의 드립니다.
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
안녕하세요 강사님 실행할때 오류가 발생해서 질문드립니다.
Error: Cannot find module 'app.model' Require stack: - D:\Study\Inflearn\NestJS\Express\letsStart\dist\app.js at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15) at Function.Module._load (node:internal/modules/cjs/loader:778:27) at Module.require (node:internal/modules/cjs/loader:1005:19) at require (node:internal/modules/cjs/helpers:102:18) at Object.<anonymous> (D:\Study\Inflearn\NestJS\Express\letsStart\dist\app.js:4:19) at Module._compile (node:internal/modules/cjs/loader:1101:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) { code: 'MODULE_NOT_FOUND', requireStack: [ 'D:\\Study\\Inflearn\\NestJS\\Express\\letsStart\\dist\\app.js' ] } npm run start:dev 했을때 이와같은 오류가 발생하고 postman도 마찬가지로 localhost:8000으로 get 검색시 찾지 못하는데 어느 부분에서 잘못됬는지를 모르겠습니다. 코드는 오타 없이 강사님이 작성한것과 동일합니다.
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
CQRS 패턴과 gql 강의 요청
혹시 NESTJS의 CQRS 패턴과 graphql(with dataloader and federation) 강의도 해주실 수 있나요??
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
하나의 게시물에 여러 개의 태그(카테고리)를 조회하고 싶습니다
현재 nestjs로 Stackoverflow와 유사한 교내 웹 개발 커뮤니티를 개발하는 학생입니다. 전체 질문글을 조회하는 기능을 개발하다가 한 가지 궁금점이 발생하여 질문하게 되었는데요! 주제넘게 설명을 드리자면 '전체 질문글 조회'는 velog나 stackoverflow와 같은 사이트의 루트페이지를 생각해주시면 될 것같습니다. 모든 질문글을 조회하는 과정에서 하나의 질문글에 여러 개의 카테고리가 저장되어 있을 경우 해당 질문글에 연관 돼있는 카테고리가 배열에 담겨 반환되는 것이 아닌 같은 질문글에 다른 카테고리를 가진 똑같은 질문글들이 조회됩니다. 즉, 다시 말해 질문글은 같지만 카테고리만 다른 데이터가 카테고리의 갯수만큼 조회됩니다..!! 이건 저희 프로젝트 erd입니다. 다음은 같이 querybuilder를 이용하여 left join을 한 코드입니다. 아래 사진은 위 querybuilder를 통해 도출된 결과입니다 위의 내용은 전체 조회에서 필요한 하나의 질문글에 대한 정보들은 조회한 사진입니다. 제가 원하는 출력 결과는 위의 카테고리가 따로 조회되는 것이 아닌 ```typescript TextRow { username: '송유현', '댓글내용': '댓글1', '제목': 'typeorm이 뭐에요', '내용': '제곧내', '좋아요': 3, '생성시간': 2021-12-21T15:00:00.000Z, '태그': [ [ '킥킥'] , ['typeorm'] ] }, ``` 의 형태로 출력하고 싶습니다..
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
제로초님 nestjs vscode에서 디버깅하는 것 좀 알려주시면 감사합니다.
안녕하세요 제로초님. 강의 잘 봤습니다. 그런데 제가 vscode에서 nestjs 프로젝트를 하면서 브레이킹 포인트로 디버깅을 하고 싶은데 브레이킹 포인트가 안 먹혀서 질문드립니다. 인터넷에서 보고 launch.json 파일도 만들어서 해봤는데 계속 타입스크립트로 디버깅이 안되더라고요. 방법을 알려주시면 감사하겠습니다.
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
안녕하세요 :) 스웨거 관련 질문이 있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 :) 강의해 주신 내용을 기반으로 소켓을 이용한 실 서비스를 구현해 보고 있는데요. 다름이 아니라 소켓 부하 테스트를 해보니 처리 못하는 요청 건수가 많아, NodeJS에서 기본적으로 제공해 주는 프로파일링을 해보았고, 그 결과 스웨거 프레임워크가 상당히 많은 CPU 리소스를 잡고 있는 것을 확인했습니다. (물론 사용 중인 AWS EC2의 사양이 낮기도 합니다.) 강의 중에 스웨거 다소 무겁다고 하셨었는데.. 실제로 체감해 보니, 스웨거가 왜 이렇게 많은 CPU를 차지하는 지, 그리고 강사님께서는 왜 무겁다고 하셨는 지 근본적인 원인이 궁금해졌습니다! 스웨거 단점을 인터넷에 찾아보니 무겁다는 측면에 대해서는 크게 언급이 없어 여기에 질문을 남깁니다! 최대한 기술적인 측면에서 답변을 해주시면 정말 감사하겠습니다!
-
해결됨탄탄한 백엔드 NestJS, 기초부터 심화까지
TypeORM 트랜잭션 질문드립니다.
안녕하세요 윤상석 강사님. TypeORM의 트랜잭션 관련으로 질문이 있습니다.TypeORM에서 트랜잭션을 다루는 방법은 이전 질문글에 답변해주셨듯이 크게 3가지인 것으로 알고 있습니다.1. QueryRunner2. getConnection, getManager3. @Transactional개인적으로는 @Transactional() 데코레이터를 사용하는것이 편리하여 사용하고 있었는데요.NestJS 공식문서에서 데코레이터를 이용하는 것을 권장하지 않고 있고,구글링을 해보아도 유닛 테스트에 어려움이 있어 권장하지 않는 분들이 많은 것을 알게되었습니다.여기서 첫 번째 질문이 있습니다.Q1. "유닛 테스트에 어려움이 있다"는 이야기가 구체적으로 무슨 의미인지 궁금합니다. 모킹이 어렵다. 내 마음대로 제어가 불가능하다 등의 이야기가 이해는 가는데 와닿지는 않아서 질문드립니다.----QueryRunner 방식을 이용하게 되면 try-catch-finally 코드가 강제가 되는 것 같아보입니다.여기서 두 번째 질문이 있습니다.Q2. 모든 에러를 감지하는 Filter를 적용해두었다면 QueryRunner를 사용하는 try-catch-finally 구문에서 에러 처리를 해버려 필터가 작동하지 않을 것 같은데 맞을까요?맞다면, 만약 Filter에서 요청이 실패하였을 때의 로깅기능이 있다고 가정한다면 로깅기능이 작동하지 않을 것 같습니다.그렇다면 catch 문에서 따로 Filter에서 구현한 로깅을 다시 구현해주어야 할까요?----트랜잭션 처리를 도와주는 typeorm-transactional-cls-hooked 패키지를 발견하였습니다.여기서 마지막 세 번째 질문이 있습니다.Q3. 해당 패키지는 유닛 테스를 할 때 트랜잭션 기능이 작동하지 않도록 모킹기능도 제공해주는 것 같습니다. QuerryRunner 보다 안 좋은점이 있다면 어떤 점이 있을까요?----질문이 너무 많은 것 같아 죄송합니다.좋은 강의와 답변해주셔서 항상 감사합니다.