본문 바로가기
728x90

TypeScript8

[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.
[Nest.js] Custom Decorator interceptor 작업을 진행하다 보니 product 라는 같은 서비스 내부에서 이게 product 이벤트인지 item 이벤트인지 구분이 필요했다. 그리하여 작업하게 된 Custom Decorator. reflect-metadata 라이브러리를 사용하기로 결정했다. npm install reflect-metadata ▷ tsconfig.json { "compilerOptions": { "target": "ES5", "experimentalDecorators": true, "emitDecoratorMetadata": true } } ▷ sns.decorator.ts import "reflect-metadata"; export const UseSnsDecorator = ( serviceName: stri.. 2022. 4. 12.
[Nest.js] Custom Interceptor 상품은 이커머스의 꽃으로, 검색 및 다른 서비스들에서 상품 데이터를 Meta 로 들고 있다 보니 상품 데이터가 변경될 때마다 Sync 를 맞춰줘야 했다. N분에 한번씩 스케쥴링 하여 ETL 하는 방법도 있겠지만 그렇게 하면 데이터베이스에 과부하가 심할거 같아서 상품의 create/update/delete 이벤트가 발생할 때마다 AWS SNS 에 메시지를 보내는 방식으로 구현하기로 결정했다. 상품 backend api 내에 있는 function 별로 코드 내부에 삽입하는 방법도 있지만, 코드가 너무 더러워진다고 생각되어 Custom Interceptor 를 만들기로 결정했다. ▷ sns.interceptor.ts 우리는 grpc 통신을 이용하여 각 서비스 별로 통신하고 있었기에 Service 단에 해당 I.. 2022. 4. 11.
728x90
반응형