Server/NodeJS & NestJS 47

NestJS) 의존성주입에서 객체 초기화 문제

먼저 백그라운드를 정해본다. 1. AppModule에 임포트 순서대로 모듈의 초기화가 진행된다.import { Module } from '@nestjs/common';import { TypeOrmModule } from '@nestjs/typeorm';import { AppController } from './app.controller';import { AppService } from './app.service';import { EnvConfigModule, TypeOrmConfigService,} from './config';import { AuthModule } from './modules/auth/auth.module';import { AdminModule } from './modules/adm..

NestJS) try-catch Error handling with TS

기본적인 트라이 캐치문 사용이다.try { } catch (error) { } TS에서 에러 타입지정을 하면 에러가 발생한다.try { } catch (error: Error) { } interface Error로 사용하려 했지만,캐치문에서 네스트 프레임워크는 에러를 unknown으로 지정하라고 강요한다.항상 에러가 아닌, 특정 객체가 올 수 있기 때문.ex) throw "error string";throw 123;throw {};throw new Error(); 그래서 개발자가 캐치문에서 에러를 에러로 강제 지정하고 메세지를 출력하려면 아래와 같이 사용해야 한다.try { } catch (error) { console.error((error as Error..

싱글스레드에서 비동기 함수의 이해

node.js, NestJS를 처음 시작하고 await을 사용한 비동기는 펜딩 결과를 기다려주는 것이라고 이해했다.await을 사용하지 않고 결과값을 출력해보면 Pending만 남았었기 때문이다.async/await 비동기 함수는 pending이 아닌 결과값을 기다리기 위한 수단이라고 이해하고 있었다. C++을 1년 넘게 사용하면서, 멀티스레드 환경에서 비동기 방식을 다룰 때 혼동이 있었다.TCP 통신에 대한 간단한 로직을 살펴보자. 스레드를 1개만 사용할 경우,메인스레드 A는 데이터를 수신하기 위해 recv함수에 진입하고 결과값을 기다린다.이 상태는 시스템이 멈춘 블락킹 상태이다.recv함수에서 결과값을 받은 A 스레드는 다음 로직을 수행한다. 스레드를 2개 사용할 경우,메인스레드 A는 데이터를 수신하..

NodeJS) error log 남기기 - fs

서버에서 DB connection 에러가 생길 경우, 재화를 지급하는 insert 구문에서 에러가 난다면 큰일이다. 해당 유저들이 받아야 할 재화의 히스토리를 에러로그로 남기려 했다. 보통은 winston 모듈을 사용한다고 하는데, 나는 빠르게 처리하기 위해 fs 모듈을 사용했다. // Utils/File.ts import fs from 'fs'; import path from 'path'; import moment from 'moment'; export const writeFile = (folerPath: string, msg: string) => { const root = folerPath; const folder = fs.existsSync(root); if (!folder) { fs.mkdirSy..

NodeJS) Bulk Job 만들기 - async/await & Promise

필수 지식 정의흐름작업 수제어권동기 (Sync)순차적 실행앞 작업이 끝나야 다음 작업 시작단일 작업. 순차 처리호출자가 결과를 기다림비동기(Async)요청 후, 나중에 알림 받음요청 후, 다음 작업을 바로 실행.완료는 콜백/이벤트로 통보동시 요청 가능. 병렬 아님호출자는 기다리지 않음.결과는 나중에 받음. - for문은 동기적으로 작동하지만, await과 함께 사용시 비동기 순차실행이 가능하다.- forEach, map과 같은 배열 람다식은 동기로 작동한다.내부에서 await을 사용해도 각 반복이 비동기 처리를 기다리지 않는다. => https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach..

Node) google news에서 많이 사용된 단어 추출하기

AI모델로 학습된 자연어 처리 모델인 nlp를 사용했다. 특정 단어들은 명사로 인지 되지 않는 불편함이 있었다. 그래서 단순한 단어 추출 라이브러리인 keyword_extractor도 함께 사용했다. NBA 기사 세가지 중, 5번 이상 사용된 단어를 찾았다. import nlp from 'compromise'; import keyword_extractor from "keyword-extractor"; (async () => { const news: { [key: string]: string[] } = {}; const keywords: { [key: string]: number } = {}; const mostUsedKeywords: { [key: string]: number } = {}; const n..

Node) google news rss로 읽어오기

npm i rss-parser import Parser from "rss-parser"; const parser = new Parser({ customFields: { item: ["source"], }, }); // 24시간 이내 영어로 작성된 nba 기사 가져오기 const rss = await parser.parseURL(`https://news.google.com/rss/search?q=when:24h+nba&hl=en-US&gl=US&ceid=US:en`); console.log(rss.items); } https://www.npmjs.com/package/rss-parser rss-parser A lightweight RSS parser, for Node and the browser. Late..