반응형

백엔드/NestJs 17

nestjs) 미들웨어,가드,필터

항상 nestjs를 사용하면서 이 세가지에 대해 개념이 헷갈리는 경우가 많아서 정리하고자 합니다.1. Middleware (미들웨어)Middleware란?Middleware는 컨트롤러에 도달하기 전에 요청을 가로채서 전처리하는 역할을 합니다.Express의 미들웨어와 유사하게, 로깅, 인증, 요청 변환, CORS 처리 등의 용도로 사용됩니다.✅ Middleware 특징요청(Request) → 미들웨어 실행 → 컨트롤러 실행next()를 호출해야 다음 미들웨어 또는 컨트롤러로 요청 전달 가능전역(Global), 모듈(Module), 특정 라우트(Route) 단위로 적용 가능 Middleware 예제: 역할(Role) 기반 접근 제한사용자의 역할(Role)에 따라 특정 API 접근을 제한하는 미들웨어를 만들..

백엔드/NestJs 2025.03.13

[typeorm] getRawMany(), getMany()

몇일전 nestjs 에서 레포지토리쪽 코드를 작성하는데 쿼리빌더에서 select를 해오지 못하는 현상이 발생하였다. 분명히 기존 다른 코드들은 getMany()로 select를 해서 그대로 사용했을 뿐인데 오류메세지가 'cant find databaseName' 이 발생하였다. 나는 어리둥절하면서 구글링을 열심히 해봤는데 db 커넥션을 조정해보라는 글밖에 찾지 못하다가 해결방법을 찾아냈다. 그거슨 바로 getRawMany()로 바꾸는 것이었다. 근데 대체 getRawMany()랑 getMany()가 뭔차이길래?!! 왜 데이터베이스 이름을 찾을수 없다고 뜨는걸까? 차이점이 그래서 뭔데?? - queryBuilder.getRawMany() 랑 queryBuilder.getMany() 의 주요 차이점은 반환되..

백엔드/NestJs 2023.12.12

[nestjs] PickType,OmitType, PartialType

nestjs에서 graphql을 사용할 때, ObjectType과 InputType을 통해 input과 output 스키마를 설정하게 된다. 이 때, ObjectType 및 InputType을 작성할 때, 엄청나게 많은 필드들을 중복적으로 다른 스키마에서 사용할 때가 있는데, 이 때마다 똑같은 필드들을 중복해서 작성하는 것은 비효율적이다. 이럴때 사용하는 것이 PickType, OmitType, PartialType 인데 아레에서는 각각 언제 사용하는지 설명하도록 하겠다. 1. PickType PickType은 특정 필드만을 선택하여 새로운 타입을 만들 때 사용된다. 만약 예를들어, 아래와 같은 ObjectType이 존재한다고 가정하겠다. @ObjectType('UserList') export class..

백엔드/NestJs 2023.09.25

리졸브필드(resolveField)

이번에 새로운 업무를 인수인계 받게 되었다. 인수인계 받은 서비스는 '운영관리자' 서비스였다. 운영관리자는 각 서비스에 해당하는 유통사 정보나 영업담당자 등 전반적인 데이터 관리를 하는 관리자 사이트이다. 운영관리자는 nestjs로 만들어져 있어서 조금은 이해하기 편하겠다 싶었는데... 이전에 나는 rest api만을 사용했는데 운영관리자에서는 graphql을 사용하고 있었다. 특히 이번에 코드를 보면서 @ResolveField 라는 데코레이터를 보게 되었다. 해당 데코레이터를 처음보는지라 어떤 역할인지 감이 안왔다. 희안하게도 메인 query가 있는데 해당 쿼리는 분명히 return 값으로 {hi:20} 에 대해서만 리턴하는데 query 리턴값으로 {hi, answer,wow} 등 여러가지 값들이 더 ..

백엔드/NestJs 2023.07.31

권한설정

nestjs에서는 데코레이터를 통한 접근 권한을 설정 할 수 있다. 이 때, 접근권한을 사용할 시에는 @useGuards() 라는 기본적인 가드 데코레이터를 사용할 수 있는데, 이 부분을 커스텀하여 어떠한 사용자가 어떤 api를 사용할 수 있는지 수정할 수 있다. 아래에는 예시 코드이다. 나는 @PermissionRole 이라는 데코레이터를 설정해서 해당 메뉴코드에 해당하는 유저만 해당 resolver를 접근할 수 있도록 설정했다. 그리고 query 또는 mutation 위에다만 데코레이터를 달면 해당 쿼리 및 뮤테이션만 권한이 설정되고, @Resolver 아래에 @UseGuars 또는 커스텀된 데코레이터를 작성하면 해당 resolver.ts의 모든 쿼리 및 뮤테이션에 권한설정이 지정된다. const M..

백엔드/NestJs 2023.07.18

[nestjs] new DataLoader

DataLoader?? DataLoader는 데이터 로딩 및 캐싱을 최적화하기 위한 유틸리티입니다. 주로 GraphQL에서 N+1 문제를 해결하고 중복 로드를 방지하기 위해 사용됩니다. DataLoader는 여러 개의 요청을 배치로 처리하여 데이터베이스나 외부 API와의 라운드트립 횟수를 최소화하고 성능을 향상시킵니다. 따라서 DataLoader는 데이터 로딩과 관련된 문제를 해결하기 위한 효과적인 도구이다. DataLoader는 주로 데이터베이스에서 값을 가져오는 데 사용됩니다. 일반적으로 데이터베이스에서 쿼리를 실행하여 결과를 반환하고, DataLoader는 이러한 쿼리 결과를 캐싱하고 중복된 요청을 효율적으로 처리합니다. 따라서 DataLoader는 데이터베이스로부터 값을 가져오는 데 주로 사용됩니..

백엔드/NestJs 2023.07.02

[nestjs] nx 모노레포??

이번에 회사에서 기존의 업무에서 다른 업무를 인수인계 받게 되었다. 내가 새로 할 업무에서는 프레임워크로 nestjs를 사용하고 있는데, 기존에 내가 알던 방식이 아닌 모노레포 방식을 채용하여 운영중에 있었다. 그러면 monoRepo란 대체 뭘까?? 1. 모노레포 도입배경 현재 내가 인수인계 받을 업무는 운영관리자로서 우리 회사 서비스를 전반적으로 관리하는 백오피스이다. 그렇기 때문에 운영관리자는 여러가지 서비스에 대한 DB를 직접적으로 접속하고 다룰 수 있어서 처음 운영관리자를 설계할 때에는 각각 서비스 마다의 관리자 repo를 만들어서 관리를 했다고 한다. 하지만 이렇게 각각 repo를 구성하는것이 아마 비효율적이라고 생각했는지 기존의 리더분께서 모노레포로 구성하자고 제안을 하셔서 지금의 모노레포 형..

백엔드/NestJs 2023.06.25

[nestjs 강의] graphql & typeorm part2~3

1. graphql 내용 1. #2.0 Apollo Server Setup 1) Graphql은 apollo-server-express를 기반으로 동작함. -- 명령어-- $npm i @nestjs/graphql graphql-tools graphql @apollo/server => 23년 6월 기준 아래로 변경 $npm i @nestjs/graphql @nestjs/apollo @apollo/server graphql 2) app.moudule에서 Grahqpl을 설정할 때, forRoot()는 root module 을 설정하는 것이다. 2. # 2.3 @Args 는 graphql 에서 받아오는 인자값을 뜻한다. 3. #2.4 1) @InputType() InputType dto 를 만들어서 @Args..

백엔드/NestJs 2023.06.18

typeorm 1:1, 1:N 관계

nestjs에서 일대일, 다대일, 다대다 관계를 설정할 때에는 entity에 다음과 같이 작성을 한다. 1. 일대일 관계(1:1) // Product entity import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, JoinTable, ManyToMany, ManyToOne, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm'; import { ProductSaleslocation } from '../../productsSaleslocations/entities/productSaleslocation.entity'; import { ProductCategory..

백엔드/NestJs 2023.06.11

필수 패키지 설치

1. dotenv $npm i --save @nestjs/config $npm i cross-env 2. typeorm(postgresql or mysql) $npm install --save @nestjs/typeorm typeorm pg $npm i mysql2 3. validation $npm install class-validator $npm install class-transformer 4. apollo server setup & graphql $npm i @nestjs/graphql graphql-tools graphql apollo-server-express $npm i @nestjs/apollo 5. 가상환경설정 $npm i cross-env 해당 패키지는 가상 변수를 설정할 수 있게 해주..

백엔드/NestJs 2023.05.02
반응형