본문 바로가기

서버 개발 (AWS, Linux, DevOps)31

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.
리눅스 : 시스템 로그(journal) 사이즈 줄여서 용량 확보하기 EC2의 용량을 줄이려고 찾아보던 중에, 리눅스의 로그가 차지하는 용량이 대해서 알게 되었고, 리눅스의 시스템에서 발생하는 로그의 용량을 어떻게 줄일 수 있는지 한번 알아보았습니다. 로그 용량 확인하기 기본적으로 리눅스에서는 시스템/서비스를 관리하기 위한 systemd 라는 프로세스 매니저가 동작하는데요, systemd에는 전체 시스템 로깅을 담당하는 systemd journal 이라는 서비스가 돌고 있습니다. 해당 서비스에서는 시스템에서 발생한 로그데이터를 journal 이라는 바이너리 형식으로 저장하게 됩니다. 이러한 시스템에서 발생한 로그파일은 journalctl 명령어 도구를 통해 확인할 수 있습니다. journalctl 만약 journal 파일을 전체 크기를 알아보고 싶으면 아래와 같이 명령어를.. 2024. 1. 14.
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.
Github Action : Treating warnings as errors because process.env.CI = true. 에러 해결 Github Action 빌드중 CI 에러 발생 Github Action을 통해 React App을 빌드 후 Code Deploy를 통해 배포하는 workflow를 구성하였는데요, 아래와 같은 에러가 발생할때가 있습니다. 해결법 (Solution) Treating warnings as errors because process.env.CI = true. 라는 메세지가 나오면서 Github Action이 중단되는 것을 확인할 수 있습니다. process.env.CI 는 현재 코드가 CI로 환경에서 실행중인지를 나타내는 환경변수인데요, 해당 환경변수를 통해 경고를 오류로 처리하거나, 테스트를 실행하거나 하는 등의 작업을 처리할수 있습니다. 문제는 현재 npm run prod로 수행되는 react 빌드 명령어에.. 2023. 10. 8.
Nginx : alias vs root 지시어의 차이점 알아보기 Nginx에서 root와 alias 지시어의 차이 Nginx 설정을 하다보면 root 지시어와 alias 지시어를 만나게 됩니다. 두 지시어의 설정은 뭔가 비슷하면서도 다른 부분이 있습니다. (지시어는 다른 말로 directive라도고 합니다.) 공통점은 둘 다 nginx에서 특정 웹 리소스를 찾기 위해 사용되는 디렉터리 경로를 설정하는 지시어라는 점입니다. 차이점은 동작하는 방식이 약간 다르다는 점인데요, 아래에서 해당 설정에 대해서 알게 된 내용을 간단하게 공유드리도록 하겠습니다. Root 지시어 root 지시어는 Nginx가 웹 서버에서 정적 파일을 찾을때의 기본 디렉터리를 설정합니다. server { listen 80; server_name example.com; root /var/www/html.. 2023. 9. 24.
mkcert : 개발용 SSL 인증서 생성하기 개발용 SSL 인증서 프론트엔드 개발을 Dev 환경에서 수행할 때 SSL 인증서가 필요한 경우가 있습니다. 예를 들어 Webpack Dev Server을 local 환경에서 구축하거나 Nginx를 local 환경으로 구축할 때 인증서가 필요합니다. 보통 SSL/TLS 인증서는 인증 기관(Certificate Authorities)이 있는 경우와 인증 기관이 없는 경우가 있는데요, 인증 기관이 있는 경우 공인 SSL 인증서라고 하며 줄여서 공인 CA 라고도 합니다., 인증 기관이 없는 경우 인증서의 경우 사설 SSL 인증서라고 하며 줄여서 사설 CA 라고 부르기도 합니다. 웹 사이트를 실제로 배포할때 SSL을 적용하는 경우에는 보안상으로 안전한 공인 SSL 인증서를 적용하여야 하지만, 개발용으로 테스트할 .. 2023. 9. 5.
Nginx + React : Nginx를 이용하여 서브디렉토리에 React 프로젝트 여러개 배포하기 개요 React와 같은 Single Page 앱을 Nginx를 통해 배포할 때 해줘야 하는 설정들이 있습니다. 예를 들어, React에서 BrowserRouter를 사용할 때에는 Nginx의 try_files와 같은 설정을 해주어야 합니다. 하지만 여러 개의 React 앱을 하나의 Nginx로 배포할 때에는 추가적인 설정이 필요할 수가 있습니다. 오늘은 여러개의 React 프로젝트를 하나의 Nginx를 통해 배포하는 방법에 대해 알아보도록 하겠습니다. React 앱을 설정 없이 Nginx로 배포했을 때 발생하는 문제 빌드된 React 앱을 단순하게 Nginx의 웹루트로 배포해도 처음에는 잘 동작됩니다. react-router를 쓰지 않는 React 앱일 경우에는 크게 문제가 없이 페이지전환도 잘 됩니다... 2023. 6. 19.