묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - Part 1 NestJS Core
섹션 26. 이미지 업로드 - 클래식 방법에서 질문이 있습니다!
안녕하세요!이미지 업로드 클래식 방법을 듣다 막히는 부분이 있어 질문 드립니다! @Post() @UseGuards(AccessTokenGuard) @UseInterceptors(FileInterceptor('image')) postPosts( @User('id') userId: number, @Body() body: CreatePostDto, @UploadedFile() file?: Express.Multer.File, console.log(userId); return this.postsService.createPost(userId, body, file?.filename); }컨트롤러에 해당 셋팅까지 마무리하고 postman으로 요청을 보내려고 시도를 했습니다. 하지만 400에러가 발생하더라고요 ㅠㅠ에러 message는 "Multipart : Malformed part header" 라고 표출이 됩니다. postman의 헤더 설정 문제인가해서 header셋팅하는 쪽 살펴보니 자동으로 header 설정이 되고 있어서 문제는 없는 것 같습니다.. 일단 컨트롤러에 요청자체가 걸리지 않는 것 같습니다ㅠ혹시 어떤 이유 일까요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - Part 1 NestJS Core
청개구리 기질로 npm을 쓰는 분들을 위한 launch.json 파일 공유
청개구리 기질로 npm으로 하고 싶어서 강의를 따라오다 여기서 막혀서 구글링 삽질로 해결 했던 정보를 공유 해요~// launch.json{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "node", // 세팅의 타입 "request": "launch", // launch 실행하는거, attach 실행되있는거에 붙는거 "name": "Debug NestJS", // 어떤 이름으로 부를건지 "runtimeExecutable": "npm", // 어떤걸로 실행 할건지 node, yarn ... "runtimeArgs": ["run", "start:debug"], // npm run start:dev 에서 npm이 runtime이고 run start:dev가 Args임 "console": "integratedTerminal", // intergratedTerminal은 vscode에서 실행하는 터미널임 "restart": true, // 자동 연결 할건지 "port": 9229, "autoAttachChildProcesses": true // 디버거를 자동으로 process에 붙을지 말지 결정 } ] }
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - Part 1 NestJS Core
vscode의 디버거를 덕분에 알게 되었는데
강의를 다 보고 나니 너무 좋은 기능인것 같고, 실제로 해당 기능을 개발 단계에서 사용 할때는 따로 winston이나 내장 logger나 console.log 필요 없이(production에선 사용) 해당 디버거를 이용해서 하는게 훨씬 좋아 보이는데, 실무에서도 자주 사용 하시나요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - Part 1 NestJS Core
3분50초쯤에 오버라이드라고 말씀 하셨는데
Column().d.ts에서 declare로 정의 되어 있는것들을 오버라이드라고 말씀 하셨는데, 인자값에 따라 다른 호출을 하는건 오버로딩이 아닌가해서요!
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
오 !!! 좋은 강의를 계속 보니 실력이 늘었나 봅니다
강사님 덕분에 처음에 문제보고 여러울것 같았는데,생각보다 쉽게 금방 풀었습니다. 감사합니다!!interface Attributes { firstName: string; lastName: string; age: number; } type AttributeGetters = { [key in keyof Attributes]: () => Attributes[key]; }; type tests = [ Expect< Equal< AttributeGetters, { firstName: () => string; lastName: () => string; age: () => number; } > > ];
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
생각나는게 맵드 타입스라 이걸로 풀어봤습니다!
감사합니다.type Route = "/" | "/about" | "/admin" | "/admin/users"; type RoutesObject = { [key in Route]: key; }; type tests = [ Expect< Equal< RoutesObject, { "/": "/"; "/about": "/about"; "/admin": "/admin"; "/admin/users": "/admin/users"; } > > ];
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
Uppercase 유틸 타입에 대해 알게 되었네요
강의 제목을 보고 찾아보니 Uppercase 유틸 타입이 있네요그걸 활용해서 풀었습니다type Event = `log_in` | "log_out" | "sign_up"; type ObjectOfKeys = Record<Uppercase<Event>,string>; type tests = [ Expect< Equal< ObjectOfKeys, { LOG_IN: string; LOG_OUT: string; SIGN_UP: string; } > >, ];
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
이번껀 좀 어렵네요. ㅠㅠ 고민 많이 했는데 못 풀었네요
type ObjectOfKeys = { [`${string}`]:string; }뭔가 이런 안되는 방법들로 계속 시도 했지만, 못풀었네요 해설을 보니 Record와 프로퍼티의 규칙적인 단어들을 캐치 했어야 했네요!
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
문제를 맞추긴 했는데, 궁금한게 있습니다.
import { Equal, Expect } from "./helper"; type Top = "t-shirt" | "shirts" | "jacket"; type Bottom = "jeans" | "skirt" | "slacks"; type Outfit = `${Top} with ${Bottom}`;type tests = [ Expect< Equal< Outfit, | "t-shirt with jeans" | "t-shirt with skirt" | "t-shirt with slacks" | "shirts with jeans" | "shirts with skirt" | "shirts with slacks" | "jacket with jeans" | "jacket with skirt" | "jacket with slacks" > > ];typescript 특징인건지 신기하게 문자열 리터럴 타입들이 마치 수학 분배법칙처럼 되는 이유가 무엇일까요?
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
제 방식대로 풀고 정답을 보니 확실히 더 이해가 잘되는것 같습니다
type Routes = "/users" | "/users/:id" | "/products" | "/products/:id"; type DynamicRoutes = Extract<Routes, `/${string}/:id`>; type tests = [Expect<Equal<DynamicRoutes, "/users/:id" | "/products/:id">>];먼저 풀어보고 이렇게 정답을 확인하니 이해가 잘되네요!
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
Template literals와 extract를 활용해서 풀어보았습니다
정답은 맞췄지만, 좋은 방법인지는 모르겠습니다import { Equal, Expect } from "./helper"; type Routes = "/users" | "/users/:id" | "/products" | "/products/:id"; type DynamicRoutes = `${Extract<Routes, "/users/:id"> | "/products/:id"}`; type tests = [Expect<Equal<DynamicRoutes, "/users/:id" | "/products/:id">>]; 다음 영상을 보면 알게 되겠지요!
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
영상을 멈추고 풀었습니다!
감사합니다.type Path = `/${string}`;export function makeUrl(path: Path) { return `https://mywebsite.com${path}`; } makeUrl("/users"); makeUrl("users/1")
-
미해결[코드팩토리] [초급] 8시간만에 끝내는 코드팩토리의 Typescript 완전정복 풀코스
class decorator의 파라미터가 좀 헷갈립니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.class decorator function이 파라미터로 function을 받는데... 왜 바로 출력을 하면 class 자체가 나오고Object.freeze(constuctor)로 얼려버릴수 있는거죠?parameter로 Object를 받아야하는게 아닌가요? 코드팩토리 디스코드https://links.codefactory.aiFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
-
미해결[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
정주행 시작했습니다. 강의 PPT 파일은 어디서 다운 받을수있나요?
정주행 시작했습니다. 강의 PPT 파일은 어디서 다운 받을수있나요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - Part 1 NestJS Core
common.service 의 cursorPaginate 일반화 할때 nextUrl 생성시 질문입니다.
common.service 의 cursorPaginate 일반화 관련 질문입니다.nextUrl 생성할 때 아래와 같이 searchParams 를 생성하는데 이 부분은 일반화 할 수없는건가요?if (nextUrl) { 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'; } nextUrl.searchParams.append(key, lastItem.id.toString()); }
-
해결됨[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편
제네릭에 never가 들어올 때 분배법칙
분배법칙의 작동방법 이해가 어려워 타입스크립트 교과서를 보던 중 모르는 부분이 생겨서 질문드립니다!해당 내용은 타입스크립트 교과서 p.111에 있는 내용인데요type R<T> = T extends string ? true : false; type RR = R<never>; 이 코드의 설명 부분이 아래와 같이 되어 있습니다.RR 타입이 true가 아니라 never인 이유는 T가 never가 되면서 분배법칙이 일어났기 때문이다.never는 공집합과 같으므로 공집합에서 분배법칙을 실행하는 것은 아무것도 실행하지 않는 것과 같다.따라서 결과는 never다.설명이 잘 이해가 되지 않아 질문 드립니다!분배법칙이 일어났다는 것은 never가 never|never로 유니언으로 분리되서 각각 타입검사를 하게 되는건가요?그렇다면 never extends string ? true : false 가 되어서 분배 되어 각각 타입검사를 해서 true | true 가 되고 최종적으로 true 가 되어야하지 않나요?공집합에서 분배법칙을 실행하는 것은 아무것도 실행하지 않는 것이라는 말이 무슨 말인지 잘 모르겠습니다..
-
해결됨[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지
cjs방식인 이유가 있으신가요? require, import
강의에 나온대로 require()로 따라하던 중 import가 더 최신방식이라는 이야기를 듣게 되었습니다. 구글링을 해보니require()를 쓰는 쪽은 CommonJS(CJS)이고 import 쓰는 쪽이 ESM이라는 걸 알게되었습니다Es6(2015)부터 import를 쓸 수 있던거 같은데그 이후에 나온 강의가 require를 쓰게된 이유가 있을까요?사용되는 패키지의 호환성 이슈인지 다른 이유인지 궁금합니다
-
해결됨[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - Part 1 NestJS Core
postgresql 연결실패
docker-compose.yml파일에 아래와같이 작성했습니다.포트번호를 5808로 지정해준 이유는 5432로 지정해서 접속했을때 현재 pc에 설치했던 postgresql과 충돌이 나서 로그인이 안돼서 바꾸어 주었습니다.도커 컴포즈 실행후 postgresql 컨테이너는 정상적으로 실행이 됐으나 nest앱과 postgresql explorer에서도 연결이 되지 않았습니다. 어떻게 해결해야하는지 질문드립니다# 서비스정의 services: postgres: image: postgres:15 # 실행시마다 재시작 restart: always # 도커컴포즈 파일에 존재하는 위치에 실제 데이터를 hostOS에 저장 volumes: # 현재 도커컴포즈 파일이 존재하는 경로 : 이미지안에존재하는 경로 매핑 - ./postgres-data:/var/lib/postgresql/data ports: #hostport:이미지의포트 #5432포트 요청 -> 이미지의 포트로 요쳥 - '5808:5432' environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: '1111' POSTGRES_DB: postgresimport { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { PostsModule } from './posts/posts.module'; import { TypeOrmModule } from '@nestjs/typeorm'; import { PostsModel } from './posts/entities/posts.entity'; @Module({ //다른 모듈을 등록 //forRoot메서드는 typrorm과 nestjs와 연결할떄 사용 (DB) imports: [ PostsModule, TypeOrmModule.forRoot({ //데이터베이스 타입 type: 'postgres', host: '127.0.0.1', port: 5808, username: 'postgres', password: '1111', database: 'postgres', //entities폴더에 작성한 PostsModel 가져오기 entities: [PostsModel], synchronize: true, }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {}
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
정답을 맞춘 후 뭔가 동전을 더블클릭 된건지
이미 뽑았다는 메세지가 나오더라고요,꽝인지 당첨인지 보지도 못했다는... ㅠㅠ
-
해결됨실전 연습으로 익히는 고급 타입스크립트 기술
이게 맞는가 모르겠지만 풀어 보았습니다!
감사합니다.const rgb = ["red", "green", "blue"] as const; type RedAndBlue = (typeof rgb)[0 | 1]; type RGB = (typeof rgb)[0 | 1 | 2]; type tests = [ Expect<Equal<RedAndBlue, "red" | "green">>, Expect<Equal<RGB, "red" | "green" | "blue">> ];