본문 바로가기

분류 전체보기154

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.
MongoDB.local Seoul 2023 행사 메모 및 후기 MongoDB.local Seoul 2023 행사 참여 이번에 MongoDB Local Seoul 2023 행사에 다녀왔습니다. 간단히 세션별로 내용을 요약해서 공유드리고 후기를 적어보도록 하겠습니다. 각 세션에 대해 PDF 파일도 필요하시면 받아가시면 좋을것 같습니다. 세션 1 : DevOps Engineer의 저녁이 있는 삶, MongoDB Atlas 도입기 첫번째 세션은 MongoDB Atlas 도입 이후의 서비스 개선 사례에 관련된 내용 정리한 세션이었습니다. Atlas 마이그레이션 삼성전자의 가전전자들에서 발생하는 Smart Home DB 구축을 위해 MongoDB 도입하고 Self Host부터 MongtoDB Atlas까지 기존 Smart Home DB 마이그레이션 도입 이유는 scale-up.. 2023. 9. 29.
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.
React Native : 다른 Screen 이동후 돌아왔을 때 새로고침 방법 (stack screen / tab screen) React Navigation 사용 시 원래 화면으로 돌아왔을 때 새로고침 React Navigation의 Stack Navigator 이나 BottomTab Navigator을 통해 화면이동을 하고 난 뒤 원래 화면으로 돌아왔을 때 원래 Screen 의 화면을 새로고침해야 할 때가 있습니다. 하지만 React Navigation의 Navigator를 통해 화면이동을 할때, 기존의 상태를 저장하기 때문에 다시 원래 화면으로 돌아온다고 해도 화면 컴포넌트의 라이프사이클이 다시 수행되지 않아서 새로고침이 되지 않는 문제가 있습니다. 저도 개발을 하던 도중에 원래 Screen으로 돌아올 때마다, AsyncStorage에서 데이터를 갱신해야 하는 상황이 생겼었는데요, 이러한 경우에 어떻게 해결하면 좋을지 한번 .. 2023. 8. 30.
GIT : 태그 추가 및 삭제 명령어 간단 정리 개요 Git을 사용할때 사용하는 태그 사용법에 대해서 자주 사용되는 명령어들을 간단하게 정리해보도록 하겠습니다. 사용 이유 보통 개발을 하게 되면 수백개의 커밋들이 쌓이게 됩니다. 우리는 그 커밋들 중에 중요한 내용들만 태그로 지정해두고 나중에 필요할때 이동하거나 버전별로 비교해볼수가 있게 됩니다. 보통 Git에서 태그를 사용할때는 보통 소프트웨어 버전관리를 위해 사용되는데요, 예를 들면 소프트웨어 버전이 올라갈때 v1.0, v1.1 이러한 식으로 태깅을 해놓게 됩니다. 커밋과의 차이점은, 커밋은 변경사항을 기록하는 작업이며, 커밋의 내용을 수정하거나 변경할수가 있습니다. 커밋의 메세지를 수정하거나 변경사항을 추가하여 다시 커밋할수가 있습니다. 반면에 태그는 특정 커밋에 대한 읽기전용이기 때문에, 해당 .. 2023. 8. 15.
React Native: 안드로이드 빌드시 mergeLibDexDebug 개요 React Native를 통해 안드로이드 빌드를 진행할때 mergeLibDexDebug 에러가 발생하였습니다. mergeLibDexDebug 에러가 무엇인지 알아보고 해결법을 간단히 공유해보겠습니다. 문제점 여러가지 문제가 있지만 보통 아래와 같은 이유로 발생한다고 합니다. Dex 메서드 제한 초과 => 의존성 패키지들에서 사용하는 메서드들이 너무 많을때 의존성 충돌 => 다양한 라이브러리와 의존성 충돌. 즉 비슷한 라이브리를 사용하는 경우에 Dex 파일에 중복된 메서드 포함됨. 멀티덱스 설정 문제 => Gradle 플러그인이 여러 Dex파일을 생성하고 하나의 Dex파일로 병합하는 설정에서 문제 발생 해결법 먼저 multiDex 설정상 문제가 발생할 가능성이 있기 때문에 아래와 같이 적용해보았습니다.. 2023. 8. 2.
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.