서버 인프라, 백엔드42 Nginx : X-Forwarded-For(XFF) 헤더를 통해 IP 로그 남기기 Nginx의 기본 로그 포맷 Nginx에서는 기본적으로 IP에 대한 아래와 같이 기본적으로 정의되어 있는 combined 로그 포맷으로 로그를 남겨줍니다. 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)" 해당 로그 포맷은 보통 아래와 같은 규칙에 따라 표현됩니다. log_format combined '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_.. 2024. 6. 13. Nginx : autoindex 를 통한 파일 목록 출력하기 오늘은 간단하게 Nginx에서 autoindex 기능을 통해 파일 목록을 출력하는 방법에 대해 알아보겠습니다. autoindex가 false일때 nginx 동작 기본적으로 nginx에서는 autoindex가 꺼져있는데요 이때 nginx에서 호스팅하고 있는 webroot를 기준으로 존재하는 폴더로 이동했을때에는 아래와 같이 404 not found가 출력됩니다. autoindex가 true일때 nginx 동작 하지만 요구사항에 따라 디렉토리 내의 파일을 목록화해서 파일을 다운로드 할 수 있는 디렉토리 리스팅 기능을 켜고 싶을때가 있는데요, 즉 파일리스트를 출력하고 싶을때 autoindex 기능을 사용합니다. 설정은 아래와 같습니다. 단순히 서버 block 안에서 `autoindex on;` 이라고 명시해.. 2024. 3. 11. AWS : SES 에서 554 message reject 에러 발생 원인 및 해결방법 (sandbox 환경 Production으로 전환하기) NodeJS 환경에서 고객 회원가입 메일 전송 기능을 테스트하던중 에러가 발생하였습니다. SMTP 메일서버는 AWS 의 SES(Send Email Service) 를 사용하고 있었는데요, 실제 로그를 찍어보니 아래와 같은 메세지가 발생하였습니다. `Message failed: 554 Message rejected: Email address is not verified. The following identities failed the check in region AP-NORTHEAST-2` 에러 발생 원인 에러발생 원인은 현재 SES 메일 계정이 Sandbox용으로 되어 있기 때문에 발생한것이었습니다. 공식문서에서 확인해보면 `메일박스 시뮬레이터(즉 sandbox)` 에서 제공하는 수신자를 제외한 메일에서.. 2024. 2. 27. NestJS : mongoose virtual field를 사용해서 원하는 값만 반환하기 NestJS에서 Mongoose를 사용해서 백엔드 개발을 진행하고 있습니다. 이때 return으로 모델을 반환하면 response로 반환하고 싶지 않은 정보들도 같이 반환될때가 있습니다. 이럴때 mongoose 에서 제공하는 virtual 속성을 통해 반환을 위한 값들을 제거하고 원하는 필드만 반환하도록 설정할 수 있습니다. Mongoose v8.1.1: Mongoose Tutorials: Mongoose Virtuals Mongoose Virtuals In Mongoose, a virtual is a property that is not stored in MongoDB. Virtuals are typically used for computed properties on documents. Your Fir.. 2024. 2. 9. 리눅스 : 시스템 로그(journal) 사이즈 줄여서 용량 확보하기 EC2의 용량을 줄이려고 찾아보던 중에, 리눅스의 로그가 차지하는 용량이 대해서 알게 되었고, 리눅스의 시스템에서 발생하는 로그의 용량을 어떻게 줄일 수 있는지 한번 알아보았습니다. 로그 용량 확인하기 기본적으로 리눅스에서는 시스템/서비스를 관리하기 위한 systemd 라는 프로세스 매니저가 동작하는데요, systemd에는 전체 시스템 로깅을 담당하는 systemd journal 이라는 서비스가 돌고 있습니다. 해당 서비스에서는 시스템에서 발생한 로그데이터를 journal 이라는 바이너리 형식으로 저장하게 됩니다. 이러한 시스템에서 발생한 로그파일은 journalctl 명령어 도구를 통해 확인할 수 있습니다. journalctl 만약 journal 파일을 전체 크기를 알아보고 싶으면 아래와 같이 명령어를.. 2024. 1. 14. 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. AWS : EC2 User Data를 이용하여 인스턴스 재시작시 원하는 Script 실행시키기 EC2 시작(Launch) 시 사용자 데이터(User Data)를 이용하여 Script 실행 EC2에서 맨 처음 생성되었을때 수행할 동작을 사용자 데이터(User Data) 에 정의할수 있는데요, 원하는 스크립트를 기입하면 EC2가 맨 처음 Launch 된 직후에 기입한 명령어들이 수행됩니다. #!/bin/bash # Node.js 설치 curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - sudo apt-get install -y nodejs # pm2 설치 sudo npm install -g pm2 # Git 설치 (필요한 경우) sudo apt-get install -y git # 애플리케이션 코드 클론 git clone https://g.. 2023. 10. 27. AWS : 인스턴스 재부팅시 PM2 자동 시작 시키기 (pm2 startup) EC2에서 PM2 실행 EC2 인스턴스는 AWS의 컴퓨팅 서비스 중 하나로 클라우드에서 가상 서버를 띄우기 위해 사용되며, PM2는 Node.js 애플리케이션을 실행, 관리, 모니터링 하기 위해 사용되는 프로세스 관리자입니다. 보통 EC2 서버에 Node.js 애플리케이션을 띄워야할때 클라우드 환경에서 EC2에 배포할수 있는데요, node.js 서비스를 단독으로 띄우는 것이 아니라 PM2를 이용하여 구성을 하게 되면 안정성과 신뢰성을 보장하고 클러스터링 기능을 사용할수 있으며 그 밖에도 여러 이점이 있기 때문에 대부분 PM2와 같은 Node.js 프로세스 관리자를 사용하여 배포하게 됩니다. AWS EC2 재부팅시 PM2 자동 시작의 필요성 PM2 는 기본적으로 프로세스를 모니터링하여 프로세스가 죽으면 자.. 2023. 10. 23. AWS : Cloudfront + S3로 mpeg-dash 영상 업로드 후 테스트해보기 (with FFmpeg) Streaming 프로토콜이 필요한 이유 웹에서 태그를 통해 홈페이지에 올라가 있는 큰 영상파일을 출력하면 비디오 미디어 파일을 모두 다운로드 하기전에 재생이 안됩니다. 이를 해결하기 위해 영상의 일부를 먼저 다운로드하고 재생을 하고 다음 일부를 다운로드하고 재생하는 스트리밍 방식을 사용할수 있는데요, 가장 대표적인게 HLS와 MEPG-DASH 라고 하는 스트리밍 프로토콜입니다. 위와같은 Streaming 프로토콜을 통해 영상의 일부를 먼저 다운로드 받아서 빠르게 재생을 할 수 있을 뿐 아니라 동적으로 비트레이트(bitrate)를 조절하여 환경에 따라 적절한 bitrate의 영상을 불러올수도 있고 , Client의 저장공간을 효율적으로 사용하거나, 실시간으로 라이브 방송을 스트리밍할수도 있는 다양한 장점.. 2023. 10. 18. 이전 1 2 3 4 5 다음