묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
jwt, local authguard에 관해서
안녕하세요. 저번에 NESTJS를 이용해서 MSA환경에서 gRPC프로토콜을 이용하는 시스템을 만들고있다고 질문했었는데, jwt와 local을 이용한 인증전략을 구성하는데 문제가 생겨서 ,질문 남깁니다.서버는 gateway를 통해 클라이언트와 통신하고, 각 서버끼리는 gRPC를 통해 통신하고, 클라이언트와는 HTTP통신을 합니다.jwt, local 가드는 게이트웨이의 각 모듈(user의 컨트롤러 등)에서 사용되기때문에 게이트웨이 모듈의 프로바이더에 JwtStrategy, LocalStrategy를 작성해놨는데Nest can't resolve dependencies of the LocalStrategy, Nest can't resolve dependencies of the JwtStrategy의 오류가 납니다.인증 전략을 가져오는데 문제가 생긴거같은데, 게이트웨이가 아닌 서버의 모듈에 추가해야하는건가요?일반적인 방법이 궁금합니다. 검색을 해보면 다 auth모듈을 만들어서 사용하는데, 저는 그냥 strategy파일만 만들어서 inject하려고 합니다...
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
GraphQL Docs 작성부분 백틱 내부 색깔
const typeDefs = `#graphql input CreateBoardInput { writer: String title: String contents: String } type MyResult { number: Int wrtier: String title: String contents: String } type Query { fetchBoards: [MyResult] #배열 안에 객체 1개 이상을 의미 } type Mutation { # createBoard(writer: String, title: String, contents: String): String createBoard(createBoardInput: CreateBoardInput!): String } `; 이 백틱 사이의 부분이 VSCode 안에서 전부 주황색으로 나오네요. 수업과 같이 예쁘게 표시 되려면 따로 설정해야하는 것이 있을까요?제 에디터 모습입니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
graphql에서 restapi로 변경
안녕하세요! 강의에서 nestjs와 graphql로 구현을 하셨는데요, 이 걸 restapi로 바꿔서 구현해보고자 합니다. 지금 일단은 강의코드에서 api를 rest로 하나씩 바꿔보는중인데 혹시 typeORM이나 nest내의 다른 설정들도 바꿔야만 하는지 간략하게나마 가이드해주시면 감사하겠습니다!
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
Join시 정의하는 테이블 명이 entity에 있는것이 맞을까요?
product.service.ts에서 join을 하기 위해 return this.productsRepository.find({ relations: ['productSaleslocation']})이렇게 해주었는데요.여기에 들어가는 productSaleslocation이라는 테이블 명이 product.entity.ts에서 조인이 되는 대상 컬럼 @JoinColumn()@OneToOne(() => ProductSaleslocation)@Filed(() => ProductSaleslocation)productSaleslocation: ProductSaleslocation 이 부분의 정의 때문에 그렇게 명명하는 것일까요?relation에 들어가는 테이블명은 딱히 정의한 곳을 못찾아서요. 실제 DB상의 테이블 명이랑은 다르고... 만약 제 추측이 맞다면@OneToOne, @MayToOne을 붙인 Filed명이 테이블 명 처럼 사용되는 것이죠?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
async, await를 사용하는 이유?
product.service.ts에서 create, findOne, findAll을 만들때는 async, await를 사용하지 않았습니다. 그리고 create 만들 때 nest에서는 이걸 호출하는 곳(resolver)에서 자동으로 기다리고 있기 때문이라고 하셨는데요.다만, 시간이 걸리기 때문에 Return type은 Promise<Product>로 했고요. 근데 update, delete를 하실때는 async, await를 사용하셨는데요.어떤 이유가 있을까요??
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
안녕하세요 선생님, 제가 강의를 다듣고 난후 코드랑 학습자료보고 복습식으로 공부하는게 좋을것 같아서요, 혹시 수업시간에 작성한 예제코드들은 어디서 받을수 있나요?
안녕하세요 선생님, 제가 강의를 다듣고 난후 코드랑 학습자료보고 복습식으로 공부하는게 좋을것 같아서요, 혹시 수업시간에 작성한 예제코드들은 어디서 받을수 있나요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
안녕하세요!
훈훈한 Javascript섹션4-for문과 while문마지막 예제에서let i = 0; while(i < 10) { console.log(i) i = i + 1 }결과 10이 출력되는건 반복 횟수이고 0~9 까지 출력이 맞는거 같은데 확인 부탁드립니다!
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
HttpExceptionFilter에 단순 HttpException 예외처리도 필요하지 않나요?
HttpExceptionFilter에서 에러처리시exception.getStatus() 로 err 변수값을 넣을떄HttpException 의 경우 string 타입BadRequestException, UnauthorizedException 와 같이 미리 정의된 경우 { message: any; statusCode: number } 타입class-validator의 경우 { error: string; statusCode: 400; message: string[] } 타입의 3가지 형태가 되는데이번강의에서 string 타입 자체를 제거하셧는데 HttpException 를 사용하게되면 에러 메시지가 제대로 안 날라 가게 됩니다. class-validator를 도입하면서 HttpException 케이스를 제거 하신거 같은데 해당 예외도 포함은 되어있어야 하지 않나요?class-validator 가 완전히 HttpException 를 대체하게 한다면 HttpException를 사용못하게 막을 방법이 있을까요?import { ExceptionFilter, Catch, ArgumentsHost, HttpException, } from '@nestjs/common'; import { Response } from 'express'; @Catch(HttpException) export class HttpExceptionFilter implements ExceptionFilter { catch(exception: HttpException, host: ArgumentsHost) { const ctx = host.switchToHttp(); const response = ctx.getResponse<Response>(); const status = exception.getStatus(); const err = exception.getResponse() as | string | { message: any; statusCode: number } | { error: string; statusCode: 400; message: string[] }; //class-validator if (typeof err !== 'string' && err.statusCode === 400) { return response.status(status).json({ success: false, code: err.statusCode, data: err.message, }); } //HttpException if (typeof err == 'string') { return response.status(status).json({ success: false, code: status, data: err, }); } //BadRequestException, UnauthorizedException return response.status(status).json({ success: false, code: status, data: err.message, }); } }
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
module.ts에서도 process.env 대신 configService를 사용할수 있나요?
이전강의떄 app.module.ts에서 외부에서 Env값을 불러오는 방법도 있다는것을 알려주셧는데 const getEnv = async () => { //외부에 저장된 Env값 // const response = await axios.get("/loadEnv") // return response.data; return { DB_PASSWORD: '~~~', }; }; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: [getEnv] }), UsersModule, ChannelsModule, DmsModule, WorkspaceModule, TypeOrmModule.forRoot({ type: 'mariadb', host: process.env.DB_HOST, port: parseInt(process.env.DB_PORT, 10), username: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_DATABASE, entities: ['entities/*.js'], // autoLoadEntities: true, // TypeOrmModule.forFeature 내의 entities를 읽어서 자동 연결 synchronize: true, logging: true, keepConnectionAlive: true, //핫리로딩시 연결종료 방지 charset: 'utf8mb4', }), ], controllers: [AppController], providers: [AppService, ConfigService], }) export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer.apply(LoggerMiddleware).forRoutes('*'); } } @Injectable() export class AppService { constructor(private configService: ConfigService) {} getHello() { return this.configService.get('PORT'); } }제가 이해한 바에 따르면 app.module.ts 에서 ConfigModule을 임포트하여 app.service.ts에서 ConfigService를 사용하여 외부 env값을 사용할수 있는데 app.module.ts 에서도 자체적으로 외부env를 이용하여 db설정값을 지정할수 있는지 궁금합니다.
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
백엔드부터 해도 되나요???
git에서 소스 안받고 강의보면서 직접 타이핑해가면서학습하려고 합니다.백엔드 강의부터 진행해도 문제 없을까요?
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
터미널 명령어에서 특수문자를 일반 택스트로 인식시키는 방법이 있나요?
mysql의 비밀번호를 자동생성을 통해 생성해서 ~+kmisB1[@l1&FH 로 설정해 놓았는데 아래 명령어에서 특수문자로 인해 인식이 정상적으로 못하는것 같습니다. & 앞에 \를 추가하여 ~+kmisB1[@l1\&FH 로 시도해도 인식이 되지 않았습니다.명령어 : npx typeorm-model-generator -h localhost -d sleact -u root -x ~+kmisB1[@l1&FH -e mysql 에러 : 필수 인자를 받지 못했습니다: e'FH'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
msa환경에서 서버끼리는 gRPC로 통신을 하는 형태로 만들어보려고 합니다.
안녕하세요. 이번에 신입으로 입사한 주니어 개발자입니다.입사한 회사에서 msa환경에서 서버끼리는 gRPC통신를 이용해서 통신을 하고 클라이언트와는 게이트웨이를 통해서 통신하는 프로젝트를 nest.js를 이용해서 만드는 온보딩 미션을 주셨는데요.공식문서를 계속 읽어보고 하는데 아직 gRPC와 msa환경을 처음 접해서 그런가 만들어보려니 감이 잡힐거같으면서도 어렵네요.먼저 nest.js의 기본적인 http로 통신하는 시스템을 만들어보고 그 이후에 리팩토링해서 요구조건을 만족하게 만드는게 나을까요?
-
미해결Slack 클론 코딩[백엔드 with NestJS + TypeORM]
슬랙 참여주소가 작동하지않습니다.
확인 부탁드립니다~
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
docker volume 설정 시 mount 에러
영상에서 알려주신대로 파일을 설정하고 실행하면 다음과 같은 에러가 발생합니다.잘 안보일 수 있어서 아래에 적습니다.Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/run/desktop/mnt/host/e/Study-App/codecamp-backend/class/section04/04-07-docker-compose-with-mongoose-board2/backend/index.js" to rootfs at "/myfolder/index.js": mount /run/desktop/mnt/host/e/Study-App/codecamp-backend/class/section04/04-07-docker-compose-with-mongoose-board2/backend/index.js:/myfolder/index.js (via /proc/self/fd/9), flags: 0x5000: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type 결국 경로를 못찾는다는 얘기로 이해했는데요.그래서 yaml파일을 다음과 같이 고쳐봤습니다. 그러면 실행이 되는 것처럼 나오지만 이러한 에러가 발생합니다. 근데 이상한건 다른 터미널에서 docker ps를 실행하면 다음과 같이 하나만 실행된 것처러럼 나오는데... 막상 현재 실행되고 있는 터미널에서 ctrl + c를 하면 다음과 같이 2개가 중지되는걸로 나옵니다. 어디서부터 잘못된 걸까요 ㅠ_ㅠ
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
nodejs mysql 도커 컴포즈관련해서 문의 드립니다
docker-compose.yml파일의 코드는이렇게 구성하였는데요도커컴포즈하면 mysql데이터 가져오고싶은데 어떻게 해야하나요? volume으로 해봤는데 해당 데이터들은 못가져오고 새로 table을 생성되는데이렇게 구성되어있습니다 main스키마의 table들을 가져오고싶습니다.이렇게해봤는데도 원하는대로 데이터를 가져오지못했습니다mysql연결도 안되는 상황입니다 어떻게 해야 해결할수있을까요?
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
궁금한 사항
강의보던중 front 도 시작하시는걸봤는데 프론트없어도 클론코딩할 수 있는건가요??
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
docker-compose의 image 옵션 사용시 docker가 1개만 만들어집니다.
docker-compose.yaml에서 강의대로 소스를 수정했습니다.그 후 yarn add mongoose를 하고index.js를 수정한 후그리고 docker-compose build를 했는데요. my-backend는 만들어졌는데 my-database가 만들어지지 않습니다. my-database 부분은 아예 실행조차 하지 않은것처럼 보이는데요. 구글에서도 잘 찾아지지 않아 질문 드립니다.
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
제네레이트 마이그레이션 오류
yujinseung@yujinseung-ui-MacBookPro slack_nest % npm run db:generate-migration > study_nest@0.0.1 db:generate-migration > npm run typeorm migration:generate -- ./src/migrations -d ./dataSource.ts > study_nest@0.0.1 typeorm > typeorm migration:generate ./src/migrations -d ./dataSource.ts Error during migration generation: Error: Unable to open file: "/Users/yujinseung/Desktop/slack_nest/dataSource.ts". Cannot use import statement outside a module at CommandUtils.loadDataSource (/Users/yujinseung/Desktop/slack_nest/node_modules/typeorm/commands/CommandUtils.js:22:19) at async Object.handler (/Users/yujinseung/Desktop/slack_nest/node_modules/typeorm/commands/MigrationGenerateCommand.js:68:26)yujinseung@yujinseung-ui-MacBookPro slack_nest % npm run db:migrate > study_nest@0.0.1 db:migrate > npm run typeorm migration:run -- -d ./dataSource.ts > study_nest@0.0.1 typeorm > typeorm migration:run -d ./dataSource.ts Error during migration run: Error: Unable to open file: "/Users/yujinseung/Desktop/slack_nest/dataSource.ts". Cannot use import statement outside a module at CommandUtils.loadDataSource (/Users/yujinseung/Desktop/slack_nest/node_modules/typeorm/commands/CommandUtils.js:22:19) at async Object.handler (/Users/yujinseung/Desktop/slack_nest/node_modules/typeorm/commands/MigrationRunCommand.js:41:26)위 두 오류가 뜹니다..! 뭐가문제일까요..ㅠㅠ
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
섹션 29 10-1 Entity 구현 선행 강좌
섹션 28에서는 스타벅스를 가지고 ERD 까지 그렸는데, 섹션 29에서 새로운 ERD를 가지고 Entity 구현하는 것 같네요. 강의가 업데이트가 안된걸까요?
-
해결됨Slack 클론 코딩[백엔드 with NestJS + TypeORM]
이 강의에 관해서 출판 된 책이나 문서 같은 건 없는 건가요?
완강후 실무에 써먹어 보려는 데 종종 다시 찾아봐야 할 때가 있을꺼 같아서요.없어도 크게 불편 할 것은 없습니다.