Nodejs(16)
-
비동기 작업 처리를 위한 메시지 큐 연동 - Nestjs에서 BullMQ 사용하기
이전 글에서 BullMQ가 어떤 구조로 동작하는지, 왜 사용하는지에 대해 정리해봤습니다. 이번 글에서는 NestJS에서 BullMQ를 사용하는 방법에 대해 살펴보겠습니다. 1. @nestjs/bullmqNestJS는 BullMQ를 공식적으로 지원하며, `@nestjs/bullmq` 패키지를 사용하면 간단하게 연동할 수 있습니다.설치먼저 BullMQ 관련 패키지를 설치합니다.$ pnpm install @nestjs/bullmq bullmq BullMQ는 Redis 기반으로 동작하기 때문에, 실행 환경에 Redis가 먼저 실행되어 있어야 합니다. 저는 Docker 통해 실행하였습니다.$ docker pull redis:latest$ docker run -d -p 6379:6379 --name redis re..
2025.06.14 -
비동기 작업 처리를 위한 메시지 큐 연동 - BullMQ 이해하기
최근에 진행 중인 프로젝트에 LLM 기반의 챗봇 기능을 추가하게 되었습니다. 사용자 맞춤형 상담을 제공하기 위해, 미리 정의된 프롬프트와 함께 고급 추론이 가능한 모델을 호출하는 방식으로 구현하게 되었습니다. 그런데 실제로 서비스를 붙여보니, 모델의 응답 시간이 짧게는 1분, 길게는 3분 이상 걸리는 경우도 있었습니다. 단일 요청으로 처리하기에는 너무 긴 시간이었고, 이로 인해 시스템 응답성과 리소스 관리에 고민이 생기기 시작했습니다.처음에는 웹 소켓을 이용한 실시간 통신 방식도 고려했지만 모델 응답 시간이 길다 보니, 클라이언트를 계속 대기시키는 구조는 적절하지 않았고, 서버에서 작업이 완료되었을 때 클라이언트에 알림을 보내는 방식이 필요하다고 생각했기 때문입니다. 하지만 LLM 연동 자체도 처음이었고..
2025.06.03 -
NestJS + Swagger 사용 중 겪은 DTO 네이밍 충돌 이슈
API를 개발하다 보면, 프론트엔드나 외부 서비스가 연동할 수 있도록 요청과 응답의 형식이 명확하게 정의된 API 문서를 제공해야 합니다. 이때 사용되는 대표적인 도구가 바로 Swagger입니다.NestJS 프레임워크는 이를 위해 공식적으로 Swagger 모듈(@nestjs/swagger)을 제공하고 있으며, 간단한 데코레이터만 추가하면 DTO와 라우터 정보를 바탕으로 자동으로 API 문서를 생성해줍니다. 덕분에 문서화에 따로 시간을 들이지 않고도, 실시간으로 최신 API 문서를 유지할 수 있어 매우 편리합니다.저도 그래서 Swagger 모듈을 사용하여 API 문서를 제공하고 있습니다. 그런데 최근에 서로 다른 모듈에서 동일한 이름의 DTO를 사용하는 상황에서 Swagger 문서에 한쪽 정보만 표시되는 ..
2025.05.29 -
NestJS - EC2에 배포하고 HTTPS 적용하기
AWS에서 EC2에 HTTPS를 적용하려면 보통 Elastic Load Balancer(ELB)를 사용하는 것이 일반적입니다. ELB는 AWS에서 제공하는 관리형 로드 밸런서로, 자동 SSL 인증서 관리 및 트래픽 분산 기능을 제공합니다. 하지만, ELB는 거의 t3.small~t3.medium급 EC2 인스턴스 하나를 더 운영하는 것과 비슷한 추가 비용이 발생하고, 트래픽이 많지 않은 작은 프로젝트나 개인 프로젝트에서는 불필요한 경우가 많습니다.그래서 작은 프로젝트에서는 ELB 없이 EC2에 직접 HTTPS를 적용하여 사용하는 경우가 많습니다. 이 글에서는 NestJS 앱을 EC2에 배포하고, Nginx와 Certbot을 활용해 HTTPS를 적용하는 과정을 설명하려고 합니다. 1. NestJS 프로젝트..
2025.03.09 -
NestJS - @Res() 데코레이터와 Interceptor를 함께 사용하면서 겪었던 이슈
Node.js로 백엔드 개발을 시작하면 Express, Koa, Fastify 같은 프레임워크를 자주 접하게 됩니다. 특히 Express는 Nodejs 환경에서 가장 널리 사용되는 웹 프레임워크 중 하나입니다. 저 역시 첫 시작은 Express로 했고, 프로젝트의 특성에 따라 Koa를 활용해 더 미니멀한 방식으로 서버를 구축한 경험이 있습니다. 그러나 최근에는 NestJS를 사용하는 경우가 점점 많아지고 있습니다. 채용 공고만 살펴봐도 대부분 NestJS 사용 경험을 요구하는 경우가 많죠. 그렇다고 NestJS가 Express나 Fastify와 관련이 없는 것은 아닙니다. NestJS는 기본적으로 Express 또는 Fastify를 기반으로 동작하는 프레임워크로, 구조화된 아키텍처와 풍부한 내장 기능을 ..
2025.03.05 -
슬랙으로 RSS 알림 보내기 (6) - 배포
지난 글에서는 DynamoDB를 활용하여 중복 알림을 방지하는 기능을 구현해 보았습니다. 이번 글은 이 시리즈의 마지막으로, AWS에 최종 배포한 후, 실행하여 정상적으로 동작하는지 테스트하는 과정을 살펴보겠습니다.프로젝트 설정RSS 피드 가져오기슬랙에 메시지 전송하기중복 알림 방지하기배포1. 배포 시 CSV 파일 포함시키기앞에서 구현했던 것 처럼 RSS 피드를 가져올 레포지토리와 슬랙 채널 목록을 CSV 파일로 관리하고 있습니다. 하지만, 코드 이외의 파일들은 배포 시 자동으로 패키지에 포함되지 않습니다. 이를 해결하기 위해서 serverless.yml에 설정을 추가해야 합니다. 서버리스 프레임워크는 배포 시 모든 함수의 코드를 zip 파일로 패키징하는데, 이 zip 파일을 보다 세부적으로 제어하기 위..
2025.03.03