[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
안녕하세요. 강의를 듣다가 원래 이런건가 하고 넘어갔던 이상한 부분이 있었는데, 방금 이건 좀 아닌것같다는 생각이 들어서 질문드립니다. 코팩님은 여러 파일을 수정하실때 마지막에만 저장하시는 것 같은데, 저는 파일 여러개를 수정하고 마지막 파일에서만 저장버튼을 누르면 서버 실행이 되지않습니다. 그래서 수정했던 모든 파일로 가서 커멘드s 를 눌러줘야 서버 실행이 잘 됩니다ㅠ 그리고 가끔 rename을 할때도 파일간 연동이 잘 안되는지, 각각 파일에 직접 가서 rename을 해줘야 합니다. 혹시 이유를 알고 계실까요?
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
강좌 잘 듣고 있습니다. 프로젝트를 진행하면서 듣고 있는거라서 부분적으로 보고 있는데.. 궁금한게 있어서 적어봅니다. nest.sj + graphQL + prisma로 현재 구축을 하고 있는데.. 이 경우 controller보다 resolver를 사용하면 된다고 해서, controller없이 작업중입니다. 이게 맞는지 궁금합니다. 문서랑 강의를 보고 이해를 하고 작업중이기는 한데, 확신이 없어서요.. ^^; 프론트엔드와는 graphql로 정보를 주고 받으려고 했는데.. 외부 업체와의 연동 때문에 REST API도 필요하게 되었습니다. 그래서 graphql을 rest api로 노출하기 위해서 swagger를 사용하고 있는데.. 여기 접근시 인증이나 이런게 필요 할까요?? 인증을 jwt로 해서 인증후 api에 접근하게만 해 주면 되는지 아니면 다른 방식으로 인증을 하는게 나은지.. 어떤 방법으로 구축을 해야 할지 확신이 없어서요.. 아.. 그리고 GraphQLSchemaHost를 사용하면 graphQL이 rest api로 제대로 출력이 되는지도 궁금합니다. 잘 된다.. 아니면 좀 이상하게 출력되는 경우가 많다.. 정도의 답변만으로도 감사하겠습니다.. ㅡ.ㅜ; 아직 초반이기는 한데, 방향 좀 짚어주시면 감사하겠습니다.. 그럼 디테일한 삽질은 강의 참조해서 제가 하겠습니다.. ㅎㅎ
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
강사님 yarn 버전이 1.22 를 사용하고 있는데 지금 4.x 버전까지 yarn berry(2.0 이상)의 zero install 이나 pnp 등 상당히 많은 업데이트가 진행되었습니다. nest/cli 신규 프로젝트 생성부터 yarn 버전으로 프로젝트 진행에 상당히 불편함을 느끼지 싶습니다. 시간이 되신다면 yarn 관련 강좌 업데이트 부탁드리겠습니다. 감사합니다.
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
강의 내용과는 조금 별개로 궁금한 점이 있어서 질문드립니다. 지금 테스트환경에서는 userModel을 한두개 생성해서 테스트하지만, 실제로 네임드 앱들은 유저의 수가 수억개씩 존재하는데, 그렇게되면 데이터베이스가 특정 PostModel에 해당하는 하나의 user객체를 식별하는데 오랜 시간이 걸리지 않나요? 그 시간 차이가 미비해서 따로 신경쓰지 않아도 되는건지, 혹은 컴퓨터만의 쿼리 탐색 방법이 따로 존재하는건지 궁금합니다!
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
작성했는데, validating C:\web\codeFactory\Nestjs\typeOrmPracticeReal\docker-compose.yaml: services.postgres Additional property enviroment is not allowed 라고 뜨면서 접속이 안됩니다. 무슨문제일까요?
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
예를 들어 자산을 관리하는 페이지가 있고 나의 자산조회 나의 자산환전 나의 자산전송 이와 같이 구성되고 여기서 선물이나, 현물로 분기된다고 쳤을때 모듈에 모듈이 들어가거나 컨트롤러에 컨트롤러가 중첩되어 들어가는 경우도 생기나요? 가지치기하듯 서비스가 확장되어갈때 어떤 방식으로 구조를 짜야할지 감이 안오네요
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
@Post() @UseGuards(AccessTokenGuard) @UseInterceptors(TransactionInterceptor) async postPost(@User("id") userId: number, @Body() body: CreatePostDto, @QueryRunner() qr: QR) { // temp -> posts로 옮긴다음에 포스팅 const post = await this.postsService.createPost(userId, body, qr); // throw new InternalServerErrorException("에러가 생겼습니다."); // 포스트만 생성하고, 이미지는 생성안해버림 throw 에러에서 걸림. 원래는 포스트 게시글이 생기면 안됨. for (let i = 0; i < body.images.length; i++) { await this.PostsImagesService.createPostImage( { post, order: i, path: body.images[i], type: ImageModelType.POST_IMAGE, }, qr, ); } // Transaction 타입에 따라서 Transaction이 커밋 되기전에 최신 값을 가져오지 못할 수 있다. (service에서 해당 문제 처리 직접 qr받아서) // 가장 최근상태의 포스트를 받아와서, 반환해줌. return this.postsService.getPostById(post.id, qr); Transaction 타입에 따라서 Transaction이 커밋 되기 전에 최신 값을 가져오지 못할 수 있다고 하셔서, getPostById service에서 직접적으로 qr을 주입받아서, 사용했는데 정확히 어떤 이유로 최신 값을 못받아오는지 잘 이해가 안가서, 자세히 설명을 해주실 수 있나요?
[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
// POST auth/login/email @Post('login/email') @UseGuards(BasicTokenGuard) // authorization 기준으로 rawToken을 받아옴. postLoginEmail(@Headers('authorization') rawToken: string, @Request() req) { // email:password -> base64 // adsfasdfasfdad => email:password const token = this.authService.extractTokenFromHeader(rawToken, false); const credentials = this.authService.decodeBasicToken(token); return this.authService.loginWithEmail({ email: credentials.email, password: credentials.password, }); } 질문이 있습니다. req.user.email , req.user.password 이런식으로 Guard를 통해 요청에 대한 값을 받아올 수 있다고 설명해주셨습니다. 실제로 guard 부분에서, 해당 extractTokenFromHeader부분과, decodeBasicToken 부분이 겹치는 것 같은데, 이중적으로 처리해주는 것이 맞는지 아니면 아래와 같이 req.user.password 부분을 디코드 해주어서, 중복 부분을 생략해 줄 수 있을 것이라고 생각하는데 어떤 접근방법이 맞는지 궁금합니다! 이 부분도 중복을 해결해야 하는 부분 아닌가 해서 궁금합니다! // POST auth/login/email @Post('login/email') @UseGuards(BasicTokenGuard) // authorization 기준으로 rawToken을 받아옴. postLoginEmail(@Headers('authorization') rawToken: string, @Request() req) { // 여기는 req.user.password를 직접 입력하게되면 인코드된 값이므로, 디코드 된 값이 들어가야 할 것 같긴합니다. (JWT 모듈같은 것을 활용해서!) return this.authService.loginWithEmail({ email: req.user.email, password: req.user.password, }); }