전체 글
-
서비스 로직 검증에서 Custom pipe로NestJs 2025. 5. 14. 11:48
1. 기존 코드 문제multipart/form-data 로 들어오는 데이터의 경우 @UseGuards(JwtAuthGuard) @UseInterceptors(FilesInterceptor( "images", 1, { limits :{ files :1 }, fileFilter: (req, file, callback)=>{ callback(null, true) } } )) @ApiPatchOrganizationInfoDTO() @Patch('organization/personal') async updateOrganizationMemberInfo( @CheckUse..
-
NestJS 스웨거 명세 - 표현하고자 하는 값이 여러개인경우NestJs 2024. 12. 12. 14:37
request body가 여러개거나, response body가 여러개인 경우를 어떻게 swagger에 명시할것인지를 찾는 분들이 있을텐데 request body 및 ApiResponse의 명세중같은 경우이지만 다른 경우의 응답값이 필요한 경우들이 있을것이다.이와 같은 경우 찾아봤을때 content를 사용하라고 하지만 현재 버전(@nestjs/swagger : 7.0.3)에서는 content 사용이불가하다. 따라서 이게 최선의 경우인지는 모르겠지만 다중으로 명시할 수 있도록 하는것은export const ApiUpdateAttachmentDecorator = () => applyDecorators( ApiOperation({ summary: 'id로 특정 attachment 데이터 수정' }), ..
-
NestJs - winston과 NestJS 연결하기NestJs 2024. 6. 10. 11:51
사용한 라이브러리winston, winston-daily-rotate-file변경이 일어난 파일app.module.ts, main.ts,config/ ,새로 생긴 파일error.filter.ts, logger.config.ts, log.intercepter.ts1. 왜 winston인가?커스텀 로거를 쓰면 되는데 왜 winston을 사용했는가?라는 질문에는 express가 있는데 왜 nest써? 라는 질문과 마찬가지인 답변이 나올것 같다.이미 만들어진 수레바퀴고, 형식을 지정한다면 바로 적용이 되는 편리한 부분을 안쓸 이유가 없다고 설명하고 싶다.2. winston 기초 세팅logger.config.tsimport { utilities as nestWinstonModuleUtilities, Winston..
-
NestJs - interceptorNestJs 2024. 6. 10. 11:50
1. RxJs이벤트 스트림을 다루는 라이브러리, 유저의 액션에따른 이베트 값, API 응답 결과 등 비동기적 값들이 들어오고, 이를 Operator를 통해 변환함, NestJs에서는 기본적으로 깔려있는 라이브러리이며 Observable 과 같은 기능을 제공합니다.Observableevent가 흐르는 stream, 누군가 구독해야만 event를 발행하고, Observer가 Observable을 구독하면서 next, error, complete 키워드를 사용해 Observable에 흐르는 event를 처리함ObserverObservable을 구독하는 대상, Observer를 정의하고 next, error, complete 세가지를 정의하고 Observable에 구독을 하면 완성이 됨, next는 Observ..
-
Nestjs - Socket 연결하기NestJs 2024. 5. 2. 16:27
사용한 라이브러리@nestjs/websockets,@nestjs/platform-socket.io,@types/socket.io 변경된 부분main.tsapp.module(자동추가)추가된 부분socket.module(하위코드 전부 추가)전체 순서서버 시작 시 소켓 서버 가동(기존 서버 url/socket)client 에서 소켓 연동 로그인시 특정 room으로 client 접속redis에서 ‘test’ 이벤트 발행시 연결된 socket room으로 메시지 전송 코드socket.service.tsimport { Injectable } from '@nestjs/common';import { Server, Socket } from 'socket.io';@Injectable()export class SocketS..
-
redis라이브러리로 Redis를 nestjs에 연결하기NestJs 2024. 4. 30. 15:14
1. 왜 'redis' 라이브러리만 사용하였는가? liaoliaots, cachemanager등 redis를 nestjs 에 편하게 연결하는 방법들은 다양하지만, 가장 많이 쓰이는 liaoliaots가 현재 서비스 에 사용되는 nest 10.0.0 과 호환이 되지 않아 직접 구현하여 연결그럼 cachemanger는? 이라고 할 수 있지만, 순환 참조 오류가 발생한다는 포스트를 봤기 때문에 직접 구현하는 방향으로 작업 진행2. 아키텍처redis 모듈을 작성(싱글톤 패턴), exports 배열에 redisService를 추가사용하려는 모듈에서 redisModule import3. 실제 코드1. redis.module.tsimport { Module } from '@nestjs/common';import ..
-
TypeORM - 수백만건의 데이터 0.1초만에 조회하기Typescript 2024. 4. 12. 19:21
물론 제목은 어그로다... 기존데이터 데이터 수 100만건 100만건 조회 시간 10분이상 0.1초 조회 방식 like tsvector 1. tsvector란? like & like 연산자가 db를 풀 스캔하고 있을때 너무나 시간이 오래 소요된다. 이를 해결하기 위해서 postgresql 에서 제공하는 데이터 유형으로, 텍스트 검색을 위한 벡터 데이터를 저장하는 방식을 말한다. 이 데이터는 주로 텍스트 문서의 내용을 토큰화 하고, 효율적으로 검색할 수 있게 인덱싱을 하는데 사용된다. 각 토큰은 문서에서의 위치와 옵션으로 가중치도 포함이 가능해진다. 풀 텍스트 검색에서는 문서의 텍스트를 어휘적 분석을 거쳐 중요 토큰으로 나누고 이 토큰들을 TSVector로 변환합니다. 특히 배열이나 JSON 같은 복잡한 ..
-
AI 로 7,000,000건 데이터 압축하기AI 2024. 4. 11. 17:33
1. 기술을 찾게 된 이유 텍스트를 풀 스캔하는 경우의 데이터가 존재, 이를 정제하여 ‘키워드’ 추출이 필요한 상황이였음(18000글자 → 100글자로 최소화)2. 요약 AIpython 에서 구글이나, 다른 기업들에서 제공하는 ai를 로컬에서 사용할 수 있도록 라이브러리 형태로 AI를 제공하고 있음단 여기서 로컬에 설치가 되어있지 않은 경우에는 1회 설치가 필요(자동설치)from transformers import pipelinefrom transformers import AutoTokenizersummarizer = pipeline("summarization", model="google/pegasus-large", tokenizer="google/pegasus-large")tokenizer = Auto..