본문 바로가기

서버 인프라, 백엔드/Nodejs, PM25

PM2 : logrotate 모듈을 이용하여 PM2 로그 용량 줄이기 문제점 AWS의 EC2를 사용하고 있는데 용량이 늘어나는 문제를 발견하게 되었습니다. 용량을 차지하는 파일을 찾던중 NodeJS 프로세스를 관리하는 PM2 에서 적재되고 있는 로그가 용량을 많이 차지한다는것을 알게 되었습니다. 이에 대해서 해결하는 방법에 대해 한번 알아보겠습니다. PM2 로그 파일 기본적으로 pm2는 로그를 `/home/ubuntu/.pm2/logs` 에 적재하고 있는데요 (우분투 기준), pm2로 시작한 애플리케이션의 이름별로 로그파일이 적재되게 됩니다. 현재 platform-api-nodejs 라는 애플리케이션의 로그가 2.8G 이상 차지하는것을 확인할 수가 있습니다. PM2 logrotate 모듈 위에서 알아본 로그들은 서비스가 운용될수록 점점 쌓이면서 커지게 될 텐데요, 계속 쌓.. 2024. 1. 8.
NestJS : Custom Validation 데코레이터로 유효성 검사 수행하기 NestJS를 개발하다 보면 들어오는 요청에 대해 유효성검사를 수행해야 할 때가 있습니다. NestJS에서는 class-validator, class-transformer가 구축된 ValidationPipe를 제공해 주는데 이를 통해 유효성 검사를 수행할 수 있습니다. 저는 개발 중에 기본적으로 제공하는 class-validator의 데코레이터가 아닌 커스텀한 Validation 데코레이터를 작성할 필요가 있었는데요, 기본적으로 class-validator가 많은 데코레이터를 제공해 주지만 원하는 데코레이터가 없을 때 어떻게 적용하는게 좋은지 정리해 보도록 하겠습니다. NestJS의 유효성 검사 먼저 class-validator의 기본 데코레이터를 활용하여 유효성을 검사하는 적용하는 방법을 한번 알아보겠.. 2023. 12. 10.
pm2 : 1개의 cluster에서만 cronjob 수행하기 (instance_var 옵션) 개요 최근에 회사에서 nodeJS 통해 백엔드 개발을 하고 있습니다. 그러던중 특정 시간에 실행되는 CronJob 서비스를 구현해야할 일이 생겼습니다. echosystem.config.js 환경을 만들고 pm2를 통해 서비스를 구동시키고 있는데요, 로직을 다 만들고 나니 문제가 하나 발생하였습니다. pm2를 통해 하나의 EC2 인스턴스의 core갯수에 맞게 cluster 들을 구성한것은 좋았지만, 각각의 cluster들에서 특정시간에 cron작업이 동시에 일어난다는 문제가 발생하였습니다. 사실 cronJob 작업은 모든 cluster에서 동작해야 하는 것이 아니라 특정 시간에 1개의 cluster에서 한번만 일어나면 되기 때문에 이러한 부분을 어떻게 해결해야 될지 고민하였습니다. 이에 대해서 pm2 옵션.. 2023. 7. 23.
PM2 : 무중단 서비스 배포 적용하기 (graceful reload) 개요 NodeJS의 express 프레임워크를 통해 백엔드를 개발하고 배포하던 중에 pm2 통해 무중단 서비스를 운영하게 되었습니다. pm2를 이용하더라도 pm2에 대한 원리를 모르면 우리가 말하는 완벽한 무중단 서비스를 적용하기 힘들다는 것을 알게 되었습니다. pm2를 이용하여 무중단 서비스를 구축하기 위해서 어떤 작업을 express에서 추가적으로 해줘야 하는지 한번 알아보도록 하겠습니다. 중단 배포 vs 무중단 배포 중단 배포란, 앱을 일시적으로 미리 막고 앱을 잠시 중단한뒤에 수정 후 배포하는 것을 말합니다. 보통 사용자들이 많이 사용하지 않는 새벽 시간대를 이용하거나 미리 사용자들에게 공지를 하고 서비스를 잠시 중단하게 됩니다. 반대로 무중단 배포는 서비스를 멈추지 않고 앱을 배포하는 것을 말하.. 2023. 7. 11.
nodejs의 모듈 시스템 : export, import 모듈 시스템 자바스크립트는 예전부터 리소스 관리가 어려운 문제가 있었습니다. 리소스는 웹페이지를 구성하는 자원들인데 현재 웹에서는 해당 페이지에 필요한 모든 파일을 불러 와야 하고 그 파일들이 곂치지 않는지 잘 살펴봐야 합니다. 하지만 npm 과 같은 패키지 관리 툴을 사용하여 여러 자바스크립트 라이브러리들을 개발자들이 쉽게 사용할 수 있도록 구현하였고, 자신이 구현한 자바스크립트의 리소스들도 쉽게 다른 파일에서 사용할 수 있게 관리 할 수 있습니다. 기존의 모듈 시스템 require require React from 'react'; require from 'react-dom' 과 같은 형태로 이용이 가능합니다. 모듈 시스템 import import React from ‘react’; Import fro.. 2018. 9. 27.