본문 바로가기
728x90

TypeScript12

[NestJS] Schedule Lock NestJS 에서 Task Scheduling 을 통해 반복적인 작업을 진행할 때, 단일 인스턴스에서 실행되고 작업이 짧게 끝나는 경우에는 Lock 이 불필요하다. 하지만 아래와 같은 문제가 발생할 수 있기 때문에, Lock 을 설정해주는 것이 좋다.1. 중복 실행 문제 같은 배치 작업이 여러 개의 서버에서 동시에 실행되면 데이터가 중복 처리될 가능성이 있음ex. 이메일 발송, 결제 처리, 재고 업데이트 등2. 데이터 무결성 문제여러 개의 배치 프로세스가 동일한 데이터를 동시에 업데이트하면 데이터 충돌 발생 가능ex. 같은 주문을 여러 번 처리하거나, 같은 데이터를 여러 번 변경하는 경우 3. 리소스 낭비 동일한 배치 작업이 여러 번 실행되면, 불필요한 데이터베이스 요청이나 API 호출로 서버 부하 증가.. 2025. 4. 13.
[NestJS] Task Scheduling 서비스를 개발하다 보면 주기적으로 동일한 작업을 처리해야 하는 경우가 생긴다. Task Scheduling 은 특정 시간 간격으로 반복되거나, 특정 시간에 실행되도록 예약된 작업을 자동으로 수행하는 기법이다. 이를 통해 서버에서 반복적인 작업을 자동화하고, 백그라운드에서 실행할 수 있다. 1. Cron Jobs (리눅스)운영체제에서 제공하는 `cron` 스케줄러를 활용할 수 있다.# 1. crontab 편집$ crontab -e# 2. cron 추가# 매일 자정에 실행0 0 * * * /usr/bin/node /home/user/scripts/backup.js# 3. cron 실행$ service cron start ※ Cron 표현식 구조* * * * * *┬ ┬ .. 2025. 4. 7.
[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.
728x90
반응형