728x90 TypeScript10 [Nest.js] swagger ApiResponse 에서 generic dto 사용하기 백엔드 개발자로서 API 를 만들다 보면 `GET` 요청에 따른 response 에 pagination, count 등과 같이 공통으로 들어가야 하는 필드들을, 각 dto 마다 한땀한땀 추가해주며 고통받았던 기억이 있을 것이다. 만약 이 표준 응답에 새 필드를 추가해줘야 한다면?또 모든 dto 를 수동으로 업데이트해줘야 할 것이고, 어느덧 샷건 치고 있는 내 자신을 발견할 수 있다. generic 을 적용해보자!이 고통을 타개할 방법이 무엇이 있을까 생각해보다가 generic 을 적용해보기로 했다. import { ApiProperty } from '@nestjs/swagger';import { IsBoolean, IsNumber } from 'class-validator';class BaseResp.. 2024. 11. 14. [TypeScript] as const TypeScript 에서 상수를 선언할 때, `as const` 라는 구문을 습관처럼 붙였던 경우가 있을 것이다. 근데 `as const` 를 왜 붙이지?TypeScript3.4 버전에서 추가된 const assertion 기능을 활용하기 위한 구문으로, 객체나 배열을 리터럴 타입(literal type) 으로 지정하기 위해 사용된다. 이 구문은 TypeScript가 해당 값을 변경할 수 없는 불변 타입(immutable type) 으로 취급하도록 만든다. let foo = 'foo';// let foo: stringlet foo = 'foo' as const;// let foo: 'foo' 즉, 값을 string 이나 number 등의 일반 타입이 아닌, 정확한 리터럴 타입으로 유지한다. const.. 2024. 10. 16. [Nest.js] 카프카(Kafka) 세팅하기 NestJS 는 다양한 마이크로서비스 기능을 제공하고 있는데, 그 중에 카프카 역시 존재한다. 카프카란 무엇인가: https://yonikim.tistory.com/143 1. 설치 $ npm i @nestjs/microservices kafkajs 2. 카프카 세팅 ▷ main.ts import { ConfigService } from '@nestjs/config'; import { NestFactory } from '@nestjs/core'; import { Transport } from '@nestjs/microservices'; import { AppModule } from '/src/app.module'; async function bootstrap() { const app = await Nes.. 2023. 12. 7. [Nest.js] DataDog 를 이용하여 trace id, span id 심기 로그는 중요하다. 로그는 애플리케이션, 네트워크 또는 서버에서 발생하는 모든 일에 대한 기록이기 때문이다. 즉, 애플리케이션 모니터링, 오류 추적 및 오류 보고를 위한 기반이 되어주므로 옵저버빌리티에 반드시 필요한 요소이다. 그러나 불행히도 일반적으로 로그는 호출된 서비스와 같은 상황별 정보가 부족하기 때문에 코드 실행을 추적하는데는 그다지 유용하진 않다. * 옵저버빌리티(Observability) 란?: 로그, 메트릭 및 추적 등 시스템에서 생성하는 데이터를 기반으로 시스템의 현재 상태를 측정하는 기능 그렇다면 코드 실행까지 추적하기 위해선 어떻게 하는게 좋을까? 보통 OpenTelemetry 과 같은 추적 관련 서비스를 심는듯 하나, 우린 이전에 DataDog 를 우리의 애플리케이션에 심었었다. (참.. 2023. 10. 17. [Nest.js] 버전 별로 스웨거 관리 이번에 앱 리뉴얼로 인해 API 도 버전 분리를 하기로 결정했다. Header 에 버전을 추가하여 구분하기로 했는데 문제는 스웨거였다. JAVA 나 .NET 에서는 스웨거 버저닝 싱크 프로세스가 잘되어 있는데, Nest 에서는... https://github.com/nestjs/swagger/issues/1810 우리와 같은 Needs 를 가진 사람들이 많으나, Nest 공식 사이트에선 답이 없는데... (열일해라 Nest...⭐️) 이 방법 저 방법 시도해보다가, 결국 아래와 같은 방법으로 해결했다. TypeScript 개발자 모두 화이팅...! 1. 버전 별로 Controller, Service, Module 을 분리한다. ▷ 폴더구조 ├── src │ ├── common │ │ └── control.. 2023. 1. 11. [TypeORM] 데코레이터 - Entity Entity 데이터베이스 테이블을 정의하기 전에 실행해야 하는 데코레이터이다. 테이블명을 따로 지정하지 않으면 클래스명으로 매핑한다. @Entity("USER") export class User () 추가적으로 지정할 수 있는 인자값에는 다음과 같이 있다. name: 테이블명 database: 데이터베이스명 schema: 스키마명 engine: 테이블 생성 중에 설정할 수 있는 DB 엔진명 synchronise: false 로 설정할시 스키마 싱크 생략 orderBy: `QueryBuilder` 와 `find` 를 실행할 때 엔티티의 기본 순서를 지정 @Entity({ name: 'USER', engine: 'MyDatabase', database: 'DEV_CUSTOMER', schema: 'SCHEM.. 2022. 9. 19. 이전 1 2 다음 728x90 반응형