본문 바로가기

서버 인프라, 백엔드42

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.
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.
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.
AWS : 정적 사이트 배포 하는 4가지 방법 (feat: cloudfront / nginx /amplify / netlify) 웹사이트를 배포하는 방법에는 여러 가지 방법들이 있는 것 같습니다. 저도 회사를 다니면서 다양한 방법들로 웹사이트를 배포해 보았는데요, 오늘은 AWS, 및 여러 도구들을 활용하여 정적사이트를 배포하는 방법들과 각각의 장단점에 대해서 한번 정리해 보았습니다. 목차 AWS - EC2 + WebServer(Nginx) 를 활용한 배포 AWS - CloudFront + S3를 활용한 배포 AWS - Amplify를 활용한 배포 Netlify를 활용한 배포 위에서 설명드린 배포방법 4가지에 대해서 개념 및 장단점에 대해 설명드리겠습니다. EC2 + WebServer (Nginx)를 활용한 배포 ✏️ AWS EC2 인스턴스 위에 Nginx 웹서버를 이용하여 서버 호스팅을 진행하는 방법입니다. EC2는 하나의 작은 .. 2023. 4. 25.
AWS : EBS란? EBS 요금 분석 서론 AWS 웹 서비스를 구축하다 보면, EBS항목으로 요금이 청구될 때가 있습니다. 보통 EBS는 EC2 인스턴스를 생성할 때 자동으로 생성이 되는 저장소라고만 알고 있었는데요, 오늘은 EBS가 무엇인지 알아보고 요금은 어떻게 정산되는지 한번 정리를 해보도록 하겠습니다. EBS란? EBS란 Elastic Block Store의 약자로 일종의 하드디스크라고 생각하시면 됩니다. 보통 EC2와 비교해서 생각하면 EC2는 메모리, 그래픽카드 등 하드 디스크를 제외한 컴퓨터의 모든 부분이라고 생각하면 되며, EBS는 컴퓨터의 하드디스크라고 생각하면 됩니다. EBS의 약자에서 Block Store라는 의미를 이해하시려면, Object Storage와 비교하시면 이해가 쉽습니다. S3와 같은 Object Stora.. 2023. 3. 3.
Jeknins : pipeline을 이용하여 npm 빌드 후 S3 업로드 자동화 (+ cloud front 캐시 무효화) 서론 보통 React 앱을 빌드 후 배포할 때 S3 + Cloud front를 통해 배포를 하곤 했는데요, 이렇게 하다 보니 항상 빌드 후에 Drag-Drop으로 S3 버킷에 업로드한 뒤 Cloud Front 캐시 동기화를 눌러줘야 하는 번거로움이 있었습니다. Jenkins를 이용하여 이를 자동화하는 방법이 있어서 회사에서는 Jenkins를 적용하여 자동화를 구축하였는데요, 이에 대해 간단하게 알아보도록 하겠습니다. Jenkins pipeline을 이용한 S3 및 CloudFront 자동화 순서 Jenkins 파이프라인 자동화를 로직은 다음과 같습니다. 1. github 및 AWS 관련 Credential 을 등록한다. (+AWS Credential Plugin 설치) 2. Jenkins 파이프라인을 만.. 2022. 11. 28.
AWS : Lambda 요청시 413 payload 에러 해결 최근에 Lambda를 통해 개발을 하였는데, 이를 개발할 때 여러 문제를 겪었는데요, 앞으로 Lambda를 실제로 사용하면서 사용하면서 발생하는 여러 가지 에러나 문제에 대해서 해결방법에 대해 포스팅할 예정입니다. 이번에 다뤄볼 주제는 AWS Lambda의 413 payload 에러입니다. Lambda에 대해서 좀더 알고 싶으시면 아래 글을 참고해주세요. AWS Lambda 기초 개념 및 간단 사용 413 payload 에러의 원인 413 payload에러는 보통 nginx나 nodejs와 같은 서버에서 request의 max-size를 선언한 뒤, 해당 크기를 초과하는 request가 요청으로 들어올 때 발생합니다. { "message": "Request Too Long" } Lambda의 reques.. 2022. 9. 8.