묻고 답해요
143만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
debug
강의중 debug 내용이 너무 좋아보여서실행하려고 하는데, 첫 step 부터 문제가 생겼습니다.말씀하신 대로에서 create a launch.json file 을 클릭했는데위 이미지 처럼 nodejs 가 나오지 않습니다. 몇시간 동안 검색을 했지만, 추가하는 방법을 찾지 못해 질문드립니다.혹시 수강생 중에 비슷한 상황을 겪어 보신 분..해결방법을 아시는 분 도움을 부탁드립니다.^^ [1] node -vv20.11.0v18.19.0 모두 테스트 해봤습니다.[2] 혹시나 해서 vscode 새로 설치도 해봤습니다.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
다음 nest강의는 prisma는 사용안하실까요?
현업에서 typeorm 만큼이나 prisma를 많이 사용한다고 하는데 이쪽은 자료때문에 공부하기가 좀 힘들어서요
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
where과 order가 적용안되는
내림차순을 확인하려고 param에 DESC를 넣었는데 내림차순 적용 되지 않길래 디버깅하다 문제에 직면했습니다.* eslint-disable prettier/prettier */ /* eslint-disable @typescript-eslint/no-unused-vars */ import { BadRequestException, Injectable } from '@nestjs/common'; import { BasePaginationDto } from './dto/base-pagination.dto'; import { FindManyOptions, FindOptionsOrder, FindOptionsWhere, Repository, } from 'typeorm'; import { BaseModel } from './entity/base.entity'; import { FILTER_MAPPER } from './const/filter-mapper.const'; import { HOST, PROTOCOL } from './const/env.const'; @Injectable() export class CommonService { paginate<T extends BaseModel>( dto: BasePaginationDto, repository: Repository<T>, overrideFindOptions: FindManyOptions<T> = {}, path: string, // api path의 일반화를 위해 ) { if (dto.page) { return this.pagePaginate(dto, repository, overrideFindOptions); } else { return this.cursorPaginate(dto, repository, overrideFindOptions, path); } } // page기반과 cursor기반 페이지네이션 2가지 만들기 /**page기반 CommonService paginate*/ private async pagePaginate<T extends BaseModel>( dto: BasePaginationDto, repository: Repository<T>, overrideFindOptions: FindManyOptions<T> = {}, ) {} /**cursor기반 CommonService paginate*/ private async cursorPaginate<T extends BaseModel>( dto: BasePaginationDto, repository: Repository<T>, overrideFindOptions: FindManyOptions<T> = {}, path: string, ) { /** * where__likeCount__more_than * * where__title__ilike */ const findOptions = this.composeFindOptions<T>(dto); const results = await repository.find({ ...findOptions, ...overrideFindOptions, }); const lastItem = results.length > 0 && results.length === dto.take ? results[results.length - 1] : null; // 새로운 URL을 생성할 때 새로운 쿼리값을 추가하는 방법 const nextUrl = lastItem && new URL(`${PROTOCOL}://${HOST}/posts`); if (nextUrl) { // dto의 키값들을 loop /** * dto의 키값들을 루핑하면서 * 키값에 해당되는 밸류가 존재하면 * param에 그대로 붙여넣는다. * * 단, where__id_more_than 값만 lastItem의 마지막 값으로 넣어준다. */ for (const key of Object.keys(dto)) { if (dto[key]) { if ( key !== 'where__id__more_than' && key !== 'where__id__less_than' ) { nextUrl.searchParams.append(key, dto[key]); // 나머지는 변경되지 마지막 아이템과 연관없이 동일하니까 } } } // 오름차순인지 내림차순인지 체크 let key = null; if (dto.order__createdAt === 'ASC') { key = 'where__id__more_than'; } else { key = 'where__id__less_than'; } // URL에 추가하니까 string으로 nextUrl.searchParams.append(key, lastItem.id.toString()); } return { data: results, cursor: { after: lastItem?.id ?? null, }, count: results.length, next: nextUrl?.toString() ?? null, }; } private composeFindOptions<T extends BaseModel>( dto: BasePaginationDto, ): FindManyOptions<T> { /** * where, * order, * take, * skip -> page 일때만 */ /** * DTO의 현재 생긴 구조는 아래와 같다 * { * where__id__more_than: 1, * order__createdAt: 'ASC' * } * * 현재는 where__id에 해당되는 where 필터만 사용중이지만 * 나중에 likeCount에 해당되는 추가 필터를 넣고싶으면 * 모든 where 필터들을 자동으로 파싱할 수 있을만한 기능을 제작 * * 1) where로 시작한다면 필터 로직을 적용한다. * 2) order로 시작한다면 정렬 로직을 적용한다. * 3) 필터 로직을 적용한다면 '__' 기준으로 split 했을 때 * 3개의 값으로 나뉘는지 2개의 값으로 나뉘는지 확인한다. * 3-1) 3개의 값으로 나뉜다면 FILTER_MAPPER에서 해당되는 operator 함수를 찾아서 적용한다. * 3-2) 2개의 값으로 나뉜다면 정확한 값을 필터하는 것이기 때문에 operator 없이 적용한다. * 4) order의 경우 3-2와 같이 적용한다. */ let where: FindOptionsWhere<T> = {}; let order: FindOptionsOrder<T> = {}; for (const [key, value] of Object.entries(dto)) { if (key.startsWith('where__')) { where = { ...where, ...this.parseWhereFilter(key, value), }; } else if (key.startsWith('order__')) { order = { ...order, ...this.parseWhereFilter(key, value), }; } } return { where, order, take: dto.take, skip: dto.page ? dto.take * (dto.page - 1) : null, }; } private parseWhereFilter<T extends BaseModel>( key: string, value: any, ): FindOptionsWhere<T> | FindOptionsOrder<T> { const options: FindOptionsWhere<T> | FindOptionsOrder<T> = {}; /** * 예를들어 where__id__more_than * __를 기준으로 나눴을때 * * ['where', 'id', 'more_than']으로 나눌 수 있다. */ const split = key.split('__'); if (split.length !== 2 && split.length !== 3) { throw new BadRequestException( `where 필터는 '__'로 split 했을때 길이가 2 또는 3이어야합니다 - 문제되는 키값 ${key}`, ); } /** * 길이가 2일 경우는 * where__id = 3 * * FindOptionsWhere로 풀어보면 * 아래와 같다 * * { * where: { * id: 3, * } * } */ if (split.length === 2) { // [where, id] const [_, field] = split; // field => id // value => 3 /** * { * id: 3 * } */ options[field] = value; } else { /** * 길이가 3일 경우에는 Typeorm 유틸리티 적용이 필요한 경우 * * where__id_more_than의 경우 * where는 버려도 되고 두번째 값은 필터할 키값이 되고 * 세번째 값은 typeorm 유틸리티가 된다. * * FILTER_MAPPER에 미리 정의해둔 값들로 * field 값에 FILTER_MAPPER에서 해당되는 utility를 가져온 후 * 값에 적용 해준다. * */ // ['where', 'id', 'more_than'] const [_, field, operator] = split; // where__id__between = 3, 4 // 만약에 split대상 문자가 존재하지 않으면 길이가 무조건 1이다. // const values = value.toString().split(','); // field -> id // operator -> more_than // FILTER_MAPPER -> MoreThan 함수 // if (operator === 'between') { // options[field] = FILTER_MAPPER[operator](values[0], values[1]); // } else { // options[field] = FILTER_MAPPER[operator](value); // } options[field] = FILTER_MAPPER[operator](value); return options; } } } 디버깅으로 중단점 눌러가며 확인해봤는데 parseWhereFilter 메서드에서 options은 올바르게 key, value를 생성하고 반환하는데composeFindOptions 메서드에서 밑의 코드를 중단점 확인했을 때 let where: FindOptionsWhere<T> = {}; let order: FindOptionsOrder<T> = {}; for (const [key, value] of Object.entries(dto)) { if (key.startsWith('where__')) { where = { ...where, ...this.parseWhereFilter(key, value), }; } else if (key.startsWith('order__')) { order = { ...order, ...this.parseWhereFilter(key, value), }; } } return { where, order, take: dto.take, skip: dto.page ? dto.take * (dto.page - 1) : null, };order와 where가 빈 객체로 반환되는 것을 확인했는데 어떻게 고쳐야 할까요
-
미해결mongoDB 기초부터 실무까지(feat. Node.js)
await 관련해서 질문드릴게 있습니다!!
안녕하세요 강사님 !! ㅎㅎ 강의 재밌게 듣고 있습니다. async await 방식이 코틀린의 코루틴과 굉장히 유사하다고 생각이 되는데 그럼 다음과 같이 Promise.all 대신 await를 늦추는 방식으로 풀어써도 똑같이 동작하나요?? async createBlog() => { await Promise.all([ Blog.insertOne({...}), // 1000ms User.UpdateOne({...}) // 1000ms ]) } // 실행시간 : 1000ms // 질문코드 async createBlog() => { const blogPromise = Blog.insertOne({...}) // 1000 ms const userPromise = User.updateOne({...}) // 1000 ms A(await blogPromise, await userPromise) } // 실행시간 : 1000ms(?)
-
미해결가장 빠른 풀스택: 파이썬 백엔드와 웹기술 부트캠프 (flask/플라스크와 백엔드 기본) [풀스택 Part1-1]
갑자기 웹 서버 띄울때 이상하게 나옵니다
갑자기 이렇게 나오는데 뭐가 잘못됐나요?
-
미해결가장 빠른 풀스택: 파이썬 백엔드와 웹기술 부트캠프 (flask/플라스크와 백엔드 기본) [풀스택 Part1-1]
가장빠른 Vue와 flask, 그리고 REST API 1 강의 질문입니다. (2)
안녕하세요. 말씀주신대로 render_template을 활용해서 작성을 해보았는데요, 이번엔 아래와같은 문제가 발생하였습니다.제가 작성한 코드도 아래 공유드립니다.어디가 잘못되었는지를 모르겠습니다.. 강사님의 강의화면은 render_template을 사용하지 않아도 제대로 들어가지는데, 저는 render_template을 사용해도 왜 안되는걸까요...??
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
모든 Route 기본 Private로 만들고 IsPublic Annotation 작업하기 강의부분 질문드립니다
안녕하세요 너무 잘듣고있습니다 '모든 Route 기본 Private로 만들고 IsPublic Annotation 작업하기' 수업듣는 중 질문이있어 글남깁니다.POSTMAN에서 DELETE기능을 눌렀을때 에러가 발생합니다 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ[터미널에 나온 에러 내용][REQ] GET /posts?order__createdAt=DESC&take=5 2024. 3. 6. 오후 7:44:07[REQ] DELETE /posts/122 2024. 3. 6. 오후 7:44:32[Nest] 9576 - 2024. 03. 06. 오후 7:44:32 ERROR [ExceptionsHandler] update or delete on table "posts_model" violates foreign key constraint "FK_40cd89c6655ec7b102842feacab" on table "image_model"QueryFailedError: update or delete on table "posts_model" violates foreign key constraint "FK_40cd89c6655ec7b102842feacab" on table "image_model"at PostgresQueryRunner.query (C:\Users\manjin han\OneDrive\바탕 화면\flutter 폴더 및 파일\cf_sns\src\driver\postgres\PostgresQueryRunner.ts:331:19)at processTicksAndRejections (node:internal/process/task_queues:95:5)at DeleteQueryBuilder.execute (C:\Users\manjin han\OneDrive\바탕 화면\flutter 폴더 및 파일\cf_sns\src\query-builder\DeleteQueryBuilder.ts:77:33)at PostsService.deletePost (C:\Users\manjin han\OneDrive\바탕 화면\flutter 폴더 및 파일\cf_sns\src\posts\posts.service.ts:332:7) [postman 에러 내용]{ "statusCode": 500, "message": "Internal server error" } ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ강의상terminal창에, 이렇게 화면이 나와야하는데해당화면처럼 에러가 나오네요몇일 고민해도 안되서 질문 드립니다
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
docker, flower 질문
안녕하세요 강사님 강사님께서 설명해주신대로 해봤는데 아무리 해봐도 실행이 증상은 같아서 플라워만 제외하고 했을대는 잘 redis, celery는 잘올라가는데 flower를 넣으면 계속 문제가 생기더라구요 일단 깃허브에 올려서 코드한번만 봐주실수 있을까요?감사합니다https://github.com/nomzzang/new
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
영상 음성이 끊겨서 진짜 듣기 힘드네요 ㅠㅠ
여러분들은 음성이 안끊기나요??ㅠㅠ섹션25process 객체를 이용해서 환경변수 불러오기12~20초 사이 한 3번은 끊기네요 ㅜㅜ그런데 저런 일이 전체 영상의 거의 배부분 저래요 ㅜㅜ(브라우져 하드웨어가속 기능 꺼져있어요 ㅠ) 강의 내용은 참 좋은데 말이 끊기니까 진짜 듣기 힘드네요 ㅠㅠ
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
docker 컨테이너 환경설정 문제
docker 컨테이너를 바로 생성하지 않고 따로 실행하는 걸로 했을때 아래와 같은 실행화면까지 나오고 잠시후에 에러메세지가 뜨는데 여기서 더이상 방법을 못찾아서 헤매고 있습니다 ㅎㅎ 윈도우라서 그런건 아니겠죠?[I 240227 01:42:46 command:177] Registered tasks:['celery.accumulate','celery.backend_cleanup','celery.chain','celery.chord','celery.chord_unlock','celery.chunks','celery.group','celery.map','celery.starmap'][E 240227 01:42:54 events:191] Failed to capture events: 'Error 11001 connecting to redis:6379. getaddrinfo failed.', trying again in 2 seconds.[E 240227 01:42:54 base_events:1771] Future exception was never retrieved 따로 실행하는 이유는 처음에 docker-compose up --build -d 해서 생성할때 flower에서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: exec: "flower": executable file not found in $PATH: unknown에러가 발생해서 찾아보니 따로 실행하면 된다고 그래서 현재 따로 실행중에있습니다. version: '3' services: app: build: ./python_app volumes: - ./python_app:/usr/src/app ports: - "8000:8000" # 필요한 경우, 앱이 외부에 노출할 포트를 지정 redis: image: "redis:alpine" celery_worker: build: ./python_app command: celery -A tasks worker --loglevel=info volumes: - ./python_app:/usr/src/app depends_on: - redis celery_beat: build: ./python_app command: celery -A tasks beat --loglevel=info volumes: - ./python_app:/usr/src/app depends_on: - redis flower: image: mher/flower command: flower --broker=redis://redis:6379/0 --port=5555 ports: - "5555:5555" depends_on: - redis
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
@Column update 프로퍼티
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 통합 링크https://links.codefactory.aiFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다! -- 질문강사님은 update 프로퍼티를 false로 설정하고 patch 요청을 보내면 500 에러가 발생하였는데 저는 다시 해봐도 업데이트는 실제로 안되었지만.. 500에러는 발생이 안되네요. 설정을 잘못한것일까요?.
-
미해결[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발
[Filter] Admin 에서 굳이 JsonFilter를 사용한이유
User api에서 ssn,paaword가 안보인 이유는 @JsonIgnoreProperties때문에 안보인 것 이고, AdminUser클래스에서는 @JsonIgnoreProperties를 제거 했기 때문에 굳이 SimpleFilterProvider를 사용할 필요는 없어 보입니다. 잘못된 사용 예로 보입니다..굳이 해당 예제 에서는 SimpleFilterProvider를 쓸필요는 없지만 이런식으로 필드 제어가 가능하다는 것 을 보여주시려고 이렇게 하시 건지 궁금합니다..\
-
미해결가장 빠른 풀스택: 파이썬 백엔드와 웹기술 부트캠프 (flask/플라스크와 백엔드 기본) [풀스택 Part1-1]
가장빠른 Vue와 flask, 그리고 REST API 1 강의 질문입니다.
궁금한 내용은 다음과 같습니다. flask_test.py파일의 코드는 다음과 같습니다.위 사진은 flask_test.py파일의 내용입니다. 해당 코드를 실행하면 boostrap_test.html파일이 실행이 되는거같은데요,flask_test.py파일에 템플릿을 렌더하는 경로가 없는데도 어떻게 boostrap_test.html을 찾아서 실행하는지가 궁금합니다.flask_test.py파일을 실행하면 다음과 같이 출력이 됩니다.강의 내용에서는 부스트랩을 활용해서 HTML의 내용을 GET, POST, PUT, DELETE로 변경하고, 8082포트로 접속을 하면 HTML의 내용이 GET, POST, PUT, DELETE가 출력이 되지만, 제 경우에는 위와같은 화면이 출력이 됩니다. 어디서 문제가 발생했는지, 그리고 어떻게 해결을 해야될지를 모르겠습니다. 위와같이 2개의 사항이 궁금합니다.
-
미해결가장 빠른 풀스택: 파이썬 백엔드와 웹기술 부트캠프 (flask/플라스크와 백엔드 기본) [풀스택 Part1-1]
Fast api 추가 강좌 개설여부 질문드립니다!.
풀스택 로드맵 열심히 주행하고 있는 학생입니다.다름이 아니라, 이번에 그누보드6가 파이썬 fast api로 만들어졌다는 소식을 듣고, fast api 파트가 가장 기대되는 챕터였는데초반 파이썬입문 강의에서는 향후 계획에flask, rest api과 함께 fast api 까지 커리큘럼에 있었는데,뒤에서 fast api 챕터만 빠진거 같더라구요!혹시 차후에 fast api 챕터 업데이트나,혹은 따로 fast api 강의 계획이라도 있으실까요?아쉬운 마음에 질문 남겨봅니다.꼭 잔재미코딩 선생님한테 배우고싶어서요..!
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
debug toolbar가 거슬리시는 분 주목
debug toolbar는 위치 설정 값은 commandCenter, docked, floating, hidden 인데요. 이 설정값의 기본 값은 floating 입니다. 이 위치 상태 기본 값을 변경하기 위해서 다양한 선택지가 있지만 기본적으로 세팅할 수 있는 방법을 알려드립니다. 프로젝트 내 .vscode/settings.json이 있으신 분{ ..., "debug.toolBarLocation": "commandCenter" }작업영역 세팅을 바꾸는 방법command+shift+p 입력 후 Preferences: Open Workspace Settings 입력Debug: Tool Bar Location 입력드롭다운 메뉴에서 원하는 위치 설정
-
미해결가장 빠른 풀스택: 파이썬 백엔드와 웹기술 부트캠프 (flask/플라스크와 백엔드 기본) [풀스택 Part1-1]
flask_cors설치 오류
pip install flask_cors를 통해 설치가 완료된뒤 석세스라는 메세지까지 출력이 되었는데요, from flask_cors import CORS를 입력하면 flask_cors부분에 밑줄이 그어지면서 modulenotfinderror가 발생을 합니다. 어떻게 해결을 해야지 좋을까요..?? 참고로 맥 쓰고있습니다. flask_cors를 지운뒤, brew install flask_cors를 해도 같은 에러메세지가 출력이 되고있습니다
-
미해결가장 빠른 풀스택: 파이썬 백엔드와 웹기술 부트캠프 (flask/플라스크와 백엔드 기본) [풀스택 Part1-1]
부스트랩 html 다운
부스트랩 홈페이지 어디에서 다운을 받을수있는건가요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
TypeOrm 1:N을 설정하는데 before initialization 에러가 발생합니다.
안녕하세요.강의 잘 듣고 있습니다! TypeOrm으로 OneToMany relation을 추가하려고 하는데 before initialization 에러가 발생하고 있는데 해결이 안되고 있습니다ㅠ확인 부탁드려요!@Entity('new_users') export class UserModel { @PrimaryColumn() id: string; @Column() name: string; @DeleteDateColumn({ name: 'deleted_at' }) deletedAt: Date; @CreateDateColumn({ name: 'created_at' }) createdAt: Date; @UpdateDateColumn({ name: 'updated_at' }) updatedAt: Date; @OneToMany(() => UserSocialModel, (userSocial) => userSocial.user) userSocials: UserSocialModel[]; }@Entity('new_user_socials') export class UserSocialModel { @PrimaryColumn() id: string; @Index() @ManyToOne(() => UserModel, (user) => user.userSocials) user: UserModel; }
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
celery-worker, beat, flower, docker-compose 질문
안녕하세요 강사님 프로젝트 진행중입니다! ㅎㅎ 현재 장고없이 celery, beat, flower 를 로컬에서는 정상적으로 동작하는데 Docker 컨테이너로 해서 할 때 worker와 redis간의 포트문제가 발생하고 flower는 설치가 안되는 현상이있는데 장고없이 저 세가지를 컨테이너로 생성해서 정상적으로 동작할수 있는 docker-compose, dockerfile 작성 하는 팁이 따로 있을까요? 추가적으로 celery가 윈도우에서 멀티프로세싱이 안된다고 하는데 그것이 영향이 있어서 그런건가요?
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
4-1 공식문서
안녕하세요 4-1강의에서 본 공식문서혹시 링크 받을 수 있을까요??제가 찾은건 이거밖에 없어서요https://docs.djangoproject.com/ko/5.0/topics/db/models/