묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨인프런 클론코딩 Part 1: Next.js와 NestJS로 시작하는 실전 프로젝트
3000포트 겹치네요
혹시 헤메시는 분들을 위해next.js nest.js 모두 기본 포트를 3000번 사용합니다. 간단하게 수정하시려면 backend/main.ts파일에서 app.listen(port)를 변경 하셔서 사용하시면 됩니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
schema.gql 질문 드립니다.
entity 등으로 생성된 tpye 에서 강의에서 사용된 코드로 예시를 들면# product.entity.ts @JoinTable() @ManyToMany(() => ProductTag, (productTags) => productTags.products) @Field(() => [ProductTag], { nullable: true }) productTags: ProductTag[];위와같이 nullable 을 사용하여#schema.gql type Product { productId: String productName: String! description: String! productPrice: Int! isSoldout: Boolean! productSalesLocation: ProductSalesLocation productCategory: ProductCategory user: User productTags: [ProductTag!] }productTags: [ProductTag!] 와 같이 할 수 있었습니다.위에서 productTags: [ProductTag!]를 productTags: [ProductTag] 와같이 변경 해보려고합니다.방법이 있나요?@Field(() => [ProductTag, { nullable: true }], { nullable: true })에러는 발생하지 않지만 안됩니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스
서버 재실행시 Many to Many
yarn start:dev 를 할 경우Many to Many 로 자동으로 생성되는 table이자꾸 문제를 일으키네요. 서버 재 실행시 기존에 만들어진 중간테이블 강의에서는 상품_상품태그 테이블이 되겠네요.해당 테이블을 삭제후 실행하지 않으면 에러발생시키네요.원인을 찾아보면 아래 코드의 주석된 custom join table 이 문제였는데요.기본 @JoinTable 사용시 문제는 사라집니다. // @JoinTable({ // name: 'PRODUCT_TO_PRODUCT_TAG', // 원하는 중간 테이블명 // joinColumn: { // name: 'PRODUCT_ID', // Product 엔티티 ID를 참조하는 컬럼명 // referencedColumnName: 'productId', // Product 엔티티의 실제 ID 컬럼명 (기본값은 PrimaryColumn 이름) // }, // inverseJoinColumn: { // name: 'PRODUCT_TAG_ID', // ProductTag 엔티티 ID를 참조하는 컬럼명 // referencedColumnName: 'productTagId', // ProductTag 엔티티의 실제 ID 컬럼명 // }, // }) @JoinTable() @ManyToMany(() => ProductTag, (productTags) => productTags.products) @Field(() => [ProductTag], { nullable: true }) productTags: ProductTag[]; 질문 1. 위의 문제를 해결할 수 있는 방법입니다.질문 2.DB 컬럼에는 UPPER_CASE (SCREAMING_SNAKE_CASE) 로 작성하지 않나요?그렇기 때문에 custom / 각 컬럼마다 @Column({ name: 'BOARD_TITLE', type: 'varchar', length: 50, nullable: false, }) @Field(() => String) boardTitle: string;위와 같이 컬럼명을 하나하나 지정해줬습니다.typeorm 또는 요즘 실무 컨벤션에서는 강의에서처럼 카멜표기법으로 사용하나요?Node 강의지만 Java기준 스프링 기본설정에서 카멜케이스조차도 스네이크로 자동 변환하는데 말이죠!msa 구조에서는 테이블은 공통된걸 사용할수도 있으니 궁금해서 질문 드립니다.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
직접 생성해서 사용하는 pipe class에 대한 질문입니다.
안녕하세요! DefaultValuePipe와 이번 강의에 나온 인자를 받는 Custom Pipe Class는 반드시 인자를 받아야 하는 구조이기 때문에 무조건 직접 생성해서 사용해야한다. 라고 이해하였는데 맞을까요? 또한, 강의에서 MaxLengthPipe와 MinLengthPipe 각각 @Injectable() 데코레이터를 붙여서 작성하셨는데, 직접 생성해서 사용하는거라면 굳이 필요없지 않을까 생각하여서 빼고 테스트 해보니 문제없이 잘 동작하는 것 같습니다. 특별히 붙여야만 하는 이유가 있는걸까요?!
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
Postman 다운로드
지금 강의를 순서대로 듣고 있는데 20강에 들어가보니 postman이라는 걸 사용하더라구요근데 20강 초입에 보면 이전에 다운을 했다고 하는데 혹시 몇 강에 있는지 알려주실 수 있으실까요..?그냥 제가 해보려고 다운을 해보니 계속 문제가 생기더라구요
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
row update 후 find의 기본 정렬에 대해 궁금합니다.
안녕하세요. 수업 열심히 잘 듣고 있습니다 (__) 다름이 아니라, postman 실습 할 때마다 느끼는게, 특정 id 값에 해당하는 값을 update 하였을 때, 별도의 정렬 조건 없이 find 하여 나오는 get 요청의 결과값 리스트에 항상 update 된 row이 최하단으로 정렬되어 나오는 걸 볼 수 있었습니다. 그래서 개인적으로 추측해보기에 updateColumn()으로 지정된 updatedAt이 row가 업데이트 될 때마다 같이 갱신되므로, find에 아무런 정렬 조건을 기재하지 않았을 때, updatedAt 기준으로 알아서 맞춰서 정렬을 해주나보다 싶었는데, updatedAt 컬럼을 삭제하고 데이터베이스 초기화 후 다시 해봐도 똑같이 update 된 row가 마지막에 나오네요. 실제로 실무에서는 order를 거의 기재를 하면서 진행 하기에 문제는 없겠지만, 이렇게 동작하는 이유에 대해 궁금합니다. 감사합니다.
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
Docker Compose 파일 작성해보기 강의 관련 질문입니다~
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 도커 강의 해주시면서,"컨테이너"란, Dockerfile를 가지고서 생성하는 하나하나의 프로그램들을 컨테이너라고 설명해주셨는데, 그렇다면 도커의 이미지는 어떤 개념이라고 정의할 수 있을까요?
-
미해결[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
RootNavigator 리렌더링 시점
(너무 초보적인 질문이라면 죄송합니다 ㅠ.. 리액트 초보여서,,) 제가 알기로는 리액트에서는 컴포넌트 리렌더링 시점이 컴포넌트 함수를 직접 재호출하거나, 내부 state가 변경됐을 때로 알고 있는데요, 그런 개념을 가지고 코드를 살펴보면 RootNavigator에서 로그인 여부에 따라 분기처리를 하고 있는데, 여기서 내부 state를 가지고 있는 것도 아닌데, useAuth의 로그인이나 로그아웃 메서드 호출만으로 리렌더링이 되어서 스크린이 변경되고 있는데 어떻게 이 동작이 가능한건지가 궁금합니다.리렌더링을 발생시키는 조건이 궁금합니다.
-
미해결[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
useGetRefreshToken 에서 성공/실패 시 useEffect로 감싸서 동작
안녕하세요!useGetRefreshToken 에서 응답 성공/실패 시에 각각 useEffect로 감싸서 후속처리를 하게 작성해주셨는데요, 해당 로직들은 항상 해당 함수가 호출되고 나서 응답이 온 후에 순차적으로 실행되어야 하는 로직으로 생각이 들어서 비동기로 동작하는 useEffect를 굳이 사용할 필요가 없다고 생각이 드는데요, useEffect로 사용하신 특별한 이유가 있으실까요!?
-
미해결[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
버전으로 인한 오류 이슈
저를 포함한 많은 수강생분들께서 설치시 Gem 과 rn 버전등 강의와 latest 버전의 충돌로 인해 많은 어려움을 겪고 계신 것 같아 2025년 5월 기준 제가 해결한 방법을 공유드리려고 올려둡니다! React Native 공식 문서는 최신이 아닌 0.73 버전으로 확인합니다 => 0.73 버전 안내 링크프로젝트 생성시에는 @latest 가 아닌 0.73 버전으로 설치를 합니다npx react-native@0.73 init 사용하실프로젝트명 --version 0.73설치되어 있는데도 CLT가 기본 설정이면, Xcode 경로로 전환해줘야 합니다터미널에서 xcode-select -p 를 입력해서 경로를 확인합니다. 만일 결과가/Library/Developer/CommandLineTools이렇게 되어있다면 오류가 나는 원인 중 하나입니다! 이 경우 아래 3-b 순서를 통해 변경해줘야 합니다터미널에서 sudo xcode-select -s /Applications/Xcode.app/Contents/Developer를 입력해 경로를 변경해줍니다터미널에서 xcode-select -p를 입력해 /Applications/Xcode.app/Contents/Developer 와 같이 경로가 변경되었는지 확인해줍니다여기까지 한 후에도 npm start 가 오류가 발생하면cd ios rm -rf Pods Podfile.lock pod install cd .. 이를 통해서 cocoapod 관련 찌꺼기를 없애고, bundle install 를 해서 필요한 gem 들을 다시 .install 해줍니다. 이렇게 한 후 npm start 를 하여 오류를 수정했었습니다! IOS 는 또 어떤 요류로 잘 안 될 수 있는지 모르니 .. 그냥 최신 버전으로 하고 강의 내용을 최신 버전에 맞추는게 현명할지도..
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
onDelete의 set default 옵션에 대해서 질문드립니다.
강의 내용에서 "set default는 테이블에서 no action, cascade, set null, restrict 중 기본으로 설정된 값을 따른다"라고 설명해주셨습니다.하지만 제가 알고 있는 바로는 "부모 테이블의 row가 삭제될 때, 이를 참조하는 자식 테이블 row의 외래키는 부모 테이블에서 기본값으로 지정된 외래키를 가진다"라고 알고 있습니다.혹시 typeorm이 실제로 구현하고 있는 내용은 제가 알고 있는 내용과 다른 것일까요...?ㅠㅠ
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
localhost:3000
localhost:3000 하는데 Home Page 가 안뜨고 Hello world 가 뜨는 이유가 뭔가요 ? 코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨커머스 서비스로 배우는 NestJS 실전 개발 (w. Prisma, Docker, Redis, Kafka)
PrismaClientInitializationError: Prisma Client could not locate the Query Engine for runtime "linux-arm64-openssl-3.0.x". 에러
도커 컨테이너 실행 명령어를 입력했는데 아래와 같은 에러가 발생했습니다.(프리즈마 버전 강의와 동일함)PrismaClientInitializationError: Prisma Client could not locate the Query Engine for runtime "linux-arm64-openssl-3.0.x". This happened because Prisma Client was generated for "darwin-arm64", but the actual deployment required "linux-arm64-openssl-3.0.x". Add "linux-arm64-openssl-3.0.x" to `binaryTargets` in the "schema.prisma" file and run `prisma generate` after saving it: generator client { provider = "prisma-client-js" binaryTargets = ["native", "linux-arm64-openssl-3.0.x"] }// schema.prisma generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") }
-
해결됨커머스 서비스로 배우는 NestJS 실전 개발 (w. Prisma, Docker, Redis, Kafka)
Module '"@prisma/client"' has no exported member 'cart'. 에러
안녕하세요. 프리즈마에서 정의한 모델타입을 import 할 때 강의랑 동일하게 아래처럼 입력하면 Module '"@prisma/client"' has no exported member 'cart'. 에러가 발생합니다. schema.ts 파일에는 model cart 로 정의되어있고 npx prisma generate 명령어를 통해 클라이언트 생성도 잘 되었습니다. 서칭해보니 Prisma는 모델 이름을 PascalCase로 자동 변환한다는데 그래서 그런건가요? 강의와는 버전차이인걸까요?import { cart } from '@prisma/client';
-
미해결탄탄한 백엔드 NestJS, 기초부터 심화까지
캡슐화 추가 설명 중 단일책임원칙 관련 질문
안녕하세요! 캡슐화 추가 설명 강의 중 궁금한 것이 있어 질문 드립니다. 상위 모듈인 app 모듈의 providers에서 하위 모듈들의 service나 repository를 주입 받아 사용하게 되면 다음과 같은 문제가 있다고 하셨습니다. 모듈들의 관리가 힘들어진다.단일책임원칙이 깨진다.추가적인 학습으로 알게된 1번에서 발생할 수 있는 문제는 다음과 같습니다.-상위 모듈의 providers에서 인덱스 순서대로 service를 불러 오기 때문에 만약 하위 클래스끼리의 의존성이 존재한다면, 그 순서를 관리해줘야 되는 복잡성이 발생한다 . 순환참조 또한 일어날 수 있다.하지만 2번 단일책임원칙이 깨진다는 문제점이 발생한다는 것은 아직 이해하지 못했습니다. app 모듈안에서 다른 클래스들의 기능을 사용할 때 참조하는 방식이 잘못된 것이지, 해당 클래스의 기능의 책임이 확장된 것은 아니라는 생각이 듭니다. 여전히 기능의 변경이 일어났을 때 해당 클래스만 수정하면 된다고 생각하기 때문입니다.제 이해가 잘못된 것인지, 강사님께서 SRP원칙의 의미를 조금 더 확장해서 말씀해주신 것인지 궁금합니다!
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
create_chat에서 빈 객체 보낼 때 ValidationPipe 예외 안 던지는 현상이 있습니다.
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 중 WebSocket에서 create_chat 이벤트에 빈 객체 {}를 보냈을 때, ValidationPipe가 예외를 잘 던져서 클라이언트(Postman)에서 exception 이벤트가 잘 발생하는 걸 확인했습니다.그런데 제가 강의 코드와 동일하게 다음과 같이 작성했는데요그런데 제가 Postman에서 {}만 보냈을 때는 ValidationPipe가 예외를 던지지 않고,exception 이벤트도 발생하지 않아서 디버깅에 꽤 시간이 걸렸습니다.CreateChatDto에 @IsDefined()를 추가하니까 그제서야 예외가 발생해서 Postman에서 exception이 감지됐습니다. 왜 강의에선 @IsDefined() 없이도 {}만 보내면 예외가 잘 발생하던데, 현재는 왜 @IsDefined()를 추가해야만 예외가 던져지는 걸까요?
-
미해결[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core
Node 설치했는데 NPM 버전 확인 안될때
PS C:\Users\devee> node -vv22.15.0PS C:\Users\devee> npm -vnpm : 이 시스템에서 스크립트를 실행할 수 없으므로 C:\Program Files\nodejs\npm.ps1 파일을 로드할 수 없습니다. 자세한 내용은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오.위치 줄:1 문자:1+ npm -v+ ~~~ + CategoryInfo : 보안 오류: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess 라는 오류를 발견했을 때, PS C:\Users\devee> Get-ExecutionPolicyRestrictedPS C:\Users\devee> Set-ExecutionPolicy RemoteSignedPS C:\Users\devee> Get-ExecutionPolicyRemoteSignedPS C:\Users\devee> npm -v10.9.2 실행 정책 변경하자
-
해결됨[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
컴포넌트 자동 import 관련
안드로이드 윈도우로 개발중에 있습니다 강의를 보면 <Button/> 컴포넌트 <Text/> 컴포넌트 추가하면 자동으로 import 부분에 추가가 되던데 전 안되서.. 혹시 어떤 설정해야하나요? 아님 어떤 Extension 설치해야하나요?? /** * Sample React Native App * https://github.com/facebook/react-native * * @format */ import React from 'react'; import {Button, StyleSheet, Text, View} from 'react-native'; function App(): React.JSX.Element { return ( <View style={styles.conatiner}> <Text>텍스트</Text> <Button title="버튼이름" /> </View> ); } const styles = StyleSheet.create({ conatiner: { backgroundColor: 'red', }, }); export default App;
-
해결됨[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
lecture/섹션-수업코드 github
안녕하세요 lecture/섹션-수업코드 github 404 뜨더라구요ㅜ
-
해결됨프론트 개발자를 위한 백엔드 101 (NestJS, TypeORM)
NestJS, TypeORM의 typeorm.ts에서 autoLoadEntities: true와 entities: []의 공존
안녕하세요.TypeORM 마이그레이션 실습에서 아래와 같은 typeorm.ts 파일을 작성했습니다.import { registerAs } from '@nestjs/config'; import { DataSource, DataSourceOptions } from 'typeorm'; const config = { type: 'postgres', host: `${process.env.DB_HOST || 'localhost'}`, port: parseInt(`${process.env.DB_PORT || '5432'}`, 10), username: `${process.env.DB_USERNAME || 'test'}`, password: `${process.env.DB_PASSWORD || 'test'}`, database: `${process.env.DB_DATABASE || 'inflearn'}`, entities: ['dist/**/**/*.entity{.ts,.js}'], migrations: ['dist/migrations/*{.ts,.js}'], autoLoadEntities: true, synchronize: false, }; export default registerAs('typeorm', () => config); export const connectionSource = new DataSource(config as DataSourceOptions); 이 때, autoLoadEntities: true 항목이 있음에도, entities: [] 항목이 있어야 할 필요가 있나요? 없어도 코드 동작에 차이가 없는 것인가요?앞선 강의에서 autoLoadEntities: true 인 경우, entities: []를 따로 설정하지 않아도 된다는 내용이 있었던 것 같아서 헷갈립니다.감사합니다.