on
JavaScript 작동 방식: PM2, Strongloop 및 Forever 소개 + 프로덕션...
JavaScript 작동 방식: PM2, Strongloop 및 Forever 소개 + 프로덕션...
반응형
이것은 자바스크립트와 그 구성 요소를 탐구하는 데 전념하는 시리즈 중 45번째 포스트입니다. 핵심 요소를 식별하고 설명하는 과정에서 회사의 사용자 디지털 환경 최적화를 위해 강력하고 고성능이 필요한 자바스크립트 애플리케이션인 SessionStack을 구축할 때 사용하는 몇 가지 경험 법칙도 공유합니다.
소프트웨어를 구축하는 모든 조직의 목표는 고객에게 가치를 제공하는 확장 가능한 제품을 제공하는 것입니다. 즉, 프로그램이 원활하게 실행되고 다운타임이 발생하지 않도록 소프트웨어를 면밀히 모니터링해야 합니다. 그러나 확장 중에 소프트웨어가 충돌할 경우 또는 개발자가 애플리케이션을 모니터링하여 가동 시간과 기능 품질을 보장할 수 있는 방법은 무엇입니까?
이것이 생산 공정 관리자가 필요한 부분입니다. 개발자가 프로세스 또는 스크립트를 활성 상태로 유지할 수 있는 도구입니다. 운영 프로세스 관리자를 사용하면 오류 또는 충돌이 발생할 때 응용 프로그램이 다시 시작됩니다. 또한 프로덕션 관리자는 애플리케이션 상태에 대한 로그를 제공하기 때문에 애플리케이션을 보다 쉽게 모니터링할 수 있습니다.
이 기사에서는 다양한 프로덕션 프로세스 관리자, 필요한 이유 및 Node.js 기반 애플리케이션에서 이를 사용하는 방법에 대해 알아보겠습니다.
프로덕션 프로세스 관리자란?
프로덕션 프로세스 관리자는 애플리케이션의 프로세스를 지속적으로 실행하고 항상 활성 상태를 보장하는 도구입니다. 이것은 데몬으로 작동하며 백그라운드에서 응용 프로그램의 프로세스를 실행합니다.
데몬은 다중 작업을 실행하는 동안 백그라운드 프로세스로 실행되므로 대화형 사용자가 직접 제어할 수 없습니다. 예를 들어 대화형 사용자를 직접 제어하는 프로그램의 경우 프로그램 창을 닫으면 프로그램 실행을 중지할 수 있습니다. 그러나, 생산 공정 관리자의 경우, 사용자는 단순히 프로그램 창을 닫는 것만으로 프로그램이 실행되는 것을 막을 수 없다. 생산 프로세스 관리자의 실행을 중지하기 위해 개발자는 단일 애플리케이션 또는 프로세스 관리자에 연결된 모든 애플리케이션을 중지하는 명령을 실행합니다.
프로덕션 프로세스 관리자는 멀티태스킹에 탁월하지만, 시스템 관리 작업(환경 수정, 구성 편집, 장애 시 애플리케이션 재시작 등)도 중단 없이 수행합니다.
프로세스 관리자가 필요한 이유
프로세스 관리자는 특히 Node.js 기반 애플리케이션에 필요합니다.
고온 재장전
프로세스에 오류가 발생하면 Node.js 응용 프로그램이 중지됩니다. 이 경우 더 일찍 알아차리지 못할 경우 다운타임이 발생합니다. Node.js 응용 프로그램에서 종속성을 다운로드할 때 응용 프로그램을 다시 로드해야 하는 경우가 있습니다. 프로덕션 프로세스 관리자는 변경 사항이 있을 때마다 응용 프로그램을 다시 로드합니다. 또한 장애나 충돌이 발생할 때마다 응용 프로그램을 자동으로 다시 로드하여 다운타임이 없도록 합니다.
구성
개발자는 프로덕션 프로세스 관리자를 통해 애플리케이션에 고유한 동작을 구성할 수 있습니다. 애플리케이션의 이러한 동작 구성을 통해 애플리케이션을 쉽게 관리하고 모니터링할 수 있습니다. 예를 들어, 오류의 원인을 제대로 조사하기 위해 개발자는 각 응용 프로그램의 실패 또는 충돌로 인해 트리거되는 자동 다시 로드 전의 지연 시간을 지정할 수 있습니다.
멀티태스킹
생산 프로세스 관리자는 생산 환경에 적합할 뿐만 아니라 개발 환경에서도 사용할 수 있습니다. 대부분의 경우 여러 Node.js 애플리케이션을 관리하는 것이 너무 어려워질 수 있습니다. 생산 프로세스 관리자는 백그라운드에서 작업하므로 여러 애플리케이션을 동시에 처리하는 데 탁월합니다.
모니터링 및 관리
운영 프로세스 관리자는 애플리케이션 모니터링 수단으로 로그를 제공할 뿐만 아니라 개발자에게 메모리 및 CPU 사용량과 같은 애플리케이션의 주요 메트릭에 대한 액세스 권한을 제공합니다.
Node.js 응용 프로그램 설정
Node.js는 자바스크립트를 위한 오픈 소스 서버측 런타임 환경입니다. 크로스 플랫폼, 즉 다양한 환경에서 실행되며 매우 인기 있는 자바스크립트 런타임 환경입니다. 이 섹션에서는 Node.js 애플리케이션을 설정하고 생산 프로세스 관리자를 우리가 만든 애플리케이션에 통합합니다.
먼저 Node.js를 아직 설치하지 않은 경우 로컬 컴퓨터에 설치해야 합니다. 로컬 컴퓨터를 다시 시작하고 Node.js가 올바르게 설치되었는지 확인합니다.
node — version
그런 다음 Node.js 응용 프로그램에 사용할 폴더를 시스템에 만들고 폴더의 이름을 myapp으로 지정합니다. 단말기에서 cd myapp과 함께 myapp으로 이동하여 npm init을 실행합니다. 필요한 정보와 패키지를 제공합니다.사용자가 제공한 정보로 프로젝트의 루트에 json 파일이 생성됩니다. 폴더의 루트에 파일을 만들고 이름을 index.js로 지정합니다. 여기가 응용 프로그램의 시작점입니다. 방금 만든 index.js 파일에 아래 코드를 넣습니다.
터미널에서 아래 명령을 실행하여 익스프레스를 설치합니다.
npm i express
이제 node index.js를 실행하여 응용 프로그램을 시작합니다. http://localhost:3000/로 이동하면 페이지에 "This is Home Page"가 표시됩니다.
우리 응용 프로그램이 생산 프로세스 관리자에 연결되어 있지 않기 때문에 단말기를 종료하면 연결이 어떻게 손실되는지 알아두십시오. 또한 응용 프로그램을 수동으로 다시 시작하기 전까지는 응용 프로그램이 최근 변경 사항에 영향을 미치지 않습니다. 이제 방금 만든 애플리케이션을 프로덕션 프로세스 관리자와 연결해 보겠습니다.
Node.js 기반 응용 프로그램에 프로세스 관리자 사용
Node.js 기반 응용 프로그램에는 서로 다른 프로덕션 프로세스 관리자가 있습니다. 다양한 프로세스 관리자와 사용 방법에 대해 알아보겠습니다.
PM2
PM2는 모든 스크립트에서 실행할 수 있는 고급 프로덕션 프로세스 관리자입니다. 이 프로덕션 프로세스 관리자는 다른 프로덕션 프로세스 관리자와 마찬가지로 개발자가 애플리케이션을 영구적으로 유지하고 시스템 관리 작업을 중단 없이 수행할 수 있도록 지원합니다. PM2는 멀티태스킹이 가능한 애플리케이션 관리, 로드 밸런싱을 제공하여 개발자가 자신의 필요에 맞게 애플리케이션을 구성할 수 있도록 지원합니다.
Node.js 응용 프로그램에 PM2를 설치하려면 터미널에서 아래 명령을 실행합니다.
// Install with npm npm install pm2 -g // Install with yarn yarn global add pm2
pm2 종속성이 package.js 파일에 어떻게 추가되었는지 확인합니다. 이제 node index.js를 실행하여 프로그램을 시작하는 대신 아래 명령을 실행하여 pm2로 프로그램을 시작하십시오.
pm2 start index.js
터미널을 닫으면 응용 프로그램이 여전히 실행 중임을 알 수 있습니다. 또한 응용 프로그램에 적용하는 새 변경 사항은 반영되지 않습니다. 그 이유는 응용 프로그램에 대해 시청을 사용할 수 없기 때문입니다. 응용 프로그램을 감시하려면 아래 명령을 실행하여 응용 프로그램을 감시로 다시 시작하십시오.
pm2 restart index.js — watch
클러스터 모드
클러스터 모드로 pm2에서 애플리케이션을 실행하면 네트워크 Node.js 애플리케이션(http/tcp/udp 서버)을 사용 가능한 모든 CPU로 확장할 수 있습니다. 클러스터 모드는 사용 가능한 CPU 수에 따라 애플리케이션의 성능을 향상시킵니다.
응용 프로그램을 클러스터 모드에서 실행하려면 아래 명령을 실행합니다.
pm2 start index.js -i max
-i 플래그가 클러스터 옵션인 반면 max는 pm2가 사용 가능한 CPU 수를 감지하여 가능한 많이 실행하도록 지시합니다.
영구 응용 프로그램 - 컴퓨터가 예기치 않게 중지될 경우 발생하는 작업
pm2 monit 명령을 사용하여 개발자는 프로세스를 모니터링할 수 있습니다. 애플리케이션을 제대로 모니터링할 수 있도록 애플리케이션의 대시보드를 보려면 단말기에서 아래 명령을 실행하십시오.
pm2 monit
응용 프로그램의 실행을 중지하려면 터미널에서 아래 명령을 실행합니다.
pm2 stop index.js
그러나 애플리케이션이 여전히 pm2 테이블에 어떻게 표시되는지 확인하십시오.
pm2 테이블에서 응용 프로그램을 제거하려면 아래 명령을 실행합니다.
pm2 delete index.js
하지만 컴퓨터가 예기치 않게 종료되면 어떻게 됩니까? 다운타임을 방지할 수 있습니까?
시작 스크립트를 생성하면 부팅 시 PM2가 자동으로 다시 시작됩니다. pm2 startup 명령을 실행하면 PM2가 자동으로 시작 스크립트를 생성하고 구성합니다. 시작 스크립트를 사용하려면 시스템에 지원되는 init 시스템이 있는지 확인합니다. 지원되는 init 시스템의 목록은 다음과 같습니다.
pm2 startup 명령을 실행하면 PM2에 의해 init 시스템이 자동으로 감지됩니다. init 시스템 없이 시작 스크립트를 실행하려고 하면 다음과 같은 오류가 발생합니다.
PM2는 Windows에 대한 기본 제공 시작 지원이 없지만 pm2 설치 프로그램은 공백을 채우는 경향이 있으므로 개발자가 시작 명령을 사용할 수 있습니다.
구성 파일
여러 애플리케이션을 관리할 때 터미널에서 구성을 전달하기가 어려워집니다. PM2를 사용하면 간단한 자바스크립트 구성 파일을 생성하여 구성을 관리하고 구성할 수 있습니다.
구성 파일을 만들려면 아래 명령을 실행합니다.
pm2 init simple
이 명령은 프로젝트의 루트에 ecomatic.config.js 파일을 생성합니다. 구성 파일을 사용하면 이름과 유일한 플래그를 전달하여 하나의 응용 프로그램만 시작할 수 있습니다.
pm2 start ecosystem.config.js — only index.js
또한 개발자가 개발 및 생산 변수를 지정하는 구성 파일에도 있습니다.
이렇게 하면 환경 이름을 전달하여 실행할 환경을 결정할 수 있습니다. 예를 들어 프로덕션 환경에서 실행하려는 경우 아래 명령을 실행합니다.
pm2 start ecosystem.config.js — env production
PM2를 통한 정적 서비스 및 배포
PM2에는 운영 환경에서 애플리케이션을 쉽게 업그레이드할 수 있는 강력한 배포 시스템이 있습니다. 먼저 ecosystem.config.js 파일에 배포 특성을 추가합니다. 다음은 간단한 배포 구성입니다.
그런 다음 원격 서버에 PM2를 설치하고 서버를 프로비저닝합니다. 서버를 프로비저닝하려면 아래 명령을 실행합니다.
pm2 deploy production setup
서버를 프로비저닝한 후 아래 명령을 실행하여 애플리케이션을 배포하십시오.
pm2 deploy production
또한 로컬 환경에서 PM2를 사용하는 동안 serve 명령을 사용하여 http를 통해 정적 파일을 쉽게 호스팅할 수 있습니다.
pm2 serve
경로 또는 포트를 지정하지 않으면 현재 폴더가 경로로 사용되고 기본 포트 8080이 포트로 사용됩니다.
StrongLoop 프로세스 관리자
Strongloop 프로세스 관리자는 PM2와 같은 또 다른 생산 프로세스 관리자이다. 그러나 strongloop 프로세스 관리자는 Node.js 기반 프로세스 관리자이며 Node.js 기반 애플리케이션에서만 실행할 수 있다. strongloop 프로세스 관리자는 PM2와 비슷해 보이지만 서로 다릅니다. 예를 들어, PM2는 정적 파일을 신속하게 제공하기 위한 HTTP 프록시로서 NGINX의 사용을 허용하지만 strongloop 프로세스 관리자는 그렇지 않다. 이제 강력한 루프 프로세스 관리자와 그 기능에 대해 알아보겠습니다.
Strongloop 프로세스 관리자는 로컬 컴퓨터 또는 원격 환경의 애플리케이션에 연결할 수 있습니다.
원격 사용을 위한 Strongloop
npm 또는 도커를 사용하여 프로덕션 환경에서 사용할 수 있도록 strongloop를 설치할 수 있습니다. npm으로 strongloop을 설치하려면 아래 명령을 실행합니다.
npm install -g strong-pm
업스타트 또는 systemd를 지원하는 Linux 분산 시스템의 경우 시스템이 부팅될 때 로그 등을 제대로 집계하기 위해 시작할 수 있도록 프로세스 관리자를 서비스로 설치하는 것이 좋습니다. strongloop를 서비스로 설치하려면 아래 명령을 실행합니다.
또는 아래 명령을 사용하여 도커와 함께 strongloop를 설치합니다.
sudo sl-pm-install — driver docker
배포된 앱을 "도커라이즈"하도록 strongloop 프로세스 관리자를 설정하면 앱이 도커 이미지로 전환된 다음 도커 컨테이너에서 실행됩니다. 아무것도 설치하지 않으려면 도커 허브에서 PM2를 실행할 수 있습니다. 아래 명령을 실행하여 이미지를 다운로드하고 strongloop 프로세스 관리자 컨테이너를 시작한 다음 upstart 또는 systemd 구성 파일을 만드십시오.
curl -sSL https://strong-pm.io/docker.sh | sudo /bin/sh
그런 다음 slc 빌드를 사용하여 애플리케이션을 구축한 다음 아래 명령을 실행하여 애플리케이션을 배포하십시오.
slc deploy http://your.remote.host
이제 응용 프로그램을 배포했으므로 아래 명령을 실행하여 응용 프로그램의 상태를 확인할 수 있습니다.
slc ctl status — control http://your.remote.host
PM2와 마찬가지로 strongloop 프로세스 관리자를 사용하면 원격 호스트의 클러스터 크기를 변경할 수 있습니다. 기본적으로 strongloop 프로세스 관리자는 CPU당 하나의 프로세스를 실행합니다. 그러나 필요에 따라 클러스터 크기를 변경하도록 선택할 수 있습니다. 예를 들어 아래 명령을 사용하여 원격 호스트의 클러스터 크기를 2로 변경할 수 있습니다.
slc ctl — control http://your.remote.host set-size 2
응용 프로그램의 소스 코드가 변경되면 응용 프로그램을 빌드한 다음 배포 명령을 사용하여 프로덕션 호스트에 배포하여 응용 프로그램을 다시 배포할 수 있습니다. 이렇게 하면 strongloop 프로세스 관리자가 모든 프로세스의 롤링 재시작을 자동으로 수행하므로 다운타임이 발생하지 않습니다.
로컬용 Strongloop
Strongloop 프로세스 관리자를 로컬 컴퓨터에서 사용하여 응용프로그램을 모니터링하고 유지할 수도 있습니다. 먼저 아래 명령을 사용하여 로컬 환경에 strongloop를 설치합니다.
npm install -g strongloop
그런 다음 slc start로 프로그램을 시작합니다.
아래 명령을 사용하여 프로그램 상태를 확인하여 프로그램이 성공적으로 시작되었는지 확인할 수 있습니다.
slc ctl status
또한 로그 덤프 명령을 사용하여 프로그램의 로그를 확인할 수 있습니다.
slc ctl log-dump
영원히.
Forever는 Node.js 스크립트를 영구적으로 실행하는 명령줄 인터페이스 도구입니다. 다른 프로세스 관리자와 마찬가지로 은 Node.js 스크립트를 데몬으로 백그라운드에서 계속 실행합니다. PM2가 Node.js 기반 스크립트가 아닌 다른 스크립트를 실행할 수 있는 것과 마찬가지로 영원히. Forever는 CLI 도구이지만 개발자는 영구 모니터를 설치하여 CLI 없이 프로그래밍 방식으로 이 도구를 사용하도록 선택할 수 있습니다.
영원한 CLI
영구 도구를 설치하고 CLI를 사용하려면 터미널에서 아래 명령을 실행합니다.
npm install forever -g
이제 아래 명령을 사용하여 응용 프로그램을 시작할 수 있습니다.
forever start index.js
다른 프로덕션 프로세스 관리자와 마찬가지로 구성 파일을 만들고 앱별 구성을 구성 파일에 쓸 수 있습니다. 예를 들어, 다음과 같은 파일 구조를 가진 응용 프로그램을 생각해 보십시오.
│ └── development.json └── package.json └── index.js
아래와 같이 development.json 파일에 앱별 구성을 쓸 수 있습니다.
터미널에서 아래 명령을 실행하여 이 응용 프로그램을 시작할 수 있습니다.
forever start ./forever/development.json
프로그래밍 방식으로 영구 사용
Forever 모니터를 사용하면 다른 종속성처럼 코드 내부에서 영원히 사용할 수 있습니다. 먼저 설치 - 아래 명령을 사용하여 npm을 통해 영구 모니터링하십시오.
npm install forever-monitor
그런 다음 다른 종속성을 선언하는 것처럼 응용 프로그램의 종속성을 선언합니다.
var forever = require(‘forever-monitor’);
이제 여러 프로세스를 생성하여 애플리케이션을 모니터링할 수 있습니다.
다음은 Forever에서 자주 사용하는 명령 목록과 해당 설명입니다.
프로덕션 프로세스 관리자 사용에 대한 팁
프로덕션 프로세스 관리자는 대개 빠르고 강력하므로 애플리케이션을 효율적으로 관리할 수 있습니다. 로컬 머신에서 프로덕션 프로세스 관리자를 사용하는 방법에 대해 알아보았습니다. 프로덕션 환경에서 프로덕션 프로세스 관리자를 사용하는 모범 사례를 살펴보겠습니다.
개발 및 생산은 가능한 한 비슷하게 유지하십시오. 이는 프로덕션의 큰 변화가 응용 프로그램을 손상시킬 수 있기 때문입니다.
ecosystem.config.js 파일에 환경 구성을 저장하여 개발 환경에 맞는 구성이 프로덕션 환경 구성과 혼합되지 않도록 합니다.
응용 프로그램을 계속 다시 시작하지 않도록 관리/관리 작업을 일회성 프로세스로 실행합니다. 필요한 경우에만 프로그램을 다시 시작하십시오.
종속성을 명시적으로 선언하고 격리합니다. 예를 들어 노드 모듈 폴더에 종속성이 포함되어 있으므로 감시 기능을 해제해야 합니다.
pm2 start env.js — watch — ignore-watch=”node_modules”
결론
애플리케이션의 서버에 오류가 발생하면 제대로 관리되지 않으면 오작동이 발생하고 다운타임이 발생할 수 있습니다. 개발자는 프로덕션 프로세스 관리자를 통해 애플리케이션을 모니터링하고 애플리케이션에 대한 주요 메트릭을 얻습니다.
nodemon과 같은 일부 툴은 파일의 변경사항이 발견될 때마다 Node.js 응용 프로그램을 재시작할 수 있지만, 실패 시 재시작이나 멀티태스킹 및 백그라운드에서 실행 등과 같은 프로덕션 프로세스 관리자가 제공하는 다른 기능을 제공하지 않습니다.
이 기사에서 논의한 생산 프로세스 관리자는 Node.js 기반 애플리케이션에 사용되는 인기 있는 생산 프로세스 관리자입니다. Node.js 기반 애플리케이션에서 사용할 수 있는 다른 생산 프로세스 관리자 중 일부는 감독자와 시스템D입니다.
프로덕션 프로세스 관리자를 통해 SessionStack과 같은 제품을 클라우드에서 서비스로 사용할 수 있고 지속적인 가용성을 확보할 수 있습니다. SessionStack은 고객 이동 중에 동작 데이터를 수집하여 비디오로 재생할 수 있도록 합니다. SessionStack은 많은 양의 동작 데이터를 동시에 수집하기 때문에, 신뢰할 수 있고 강력한 서비스를 제공할 수 있는 당사 스택의 중요한 측면입니다.
SessionStack을 사용해 보고 싶은 경우 무료 평가판을 제공합니다.
시리즈의 이전 장을 놓친 경우 다음 사이트에서 찾을 수 있습니다.
엔진, 런타임 및 통화 스택 개요
Google의 V8 엔진 내부 + 최적화된 코드를 작성하는 방법에 대한 5가지 팁
메모리 관리 + 4가지 일반적인 메모리 누수 처리 방법
이벤트 루프 및 비동기 프로그래밍의 증가 + 비동기/대기 상태에서 코딩을 개선하는 5가지 방법
SSE를 통해 WebSockets 및 HTTP/2에 대한 심층 분석 + 올바른 경로 선택 방법
WebAssembly와의 비교 + 경우에 따라 JavaScript를 통해 사용하는 것이 더 나은 이유
웹 작업자의 구성 요소 + 사용 시기 5가지 사례
서비스 작업자, 작업자의 수명 주기 및 사용 사례
웹 푸시 알림의 메커니즘
MutationObserver를 사용하여 DOM의 변경 사항 추적
렌더링 엔진 및 성능 최적화를 위한 팁
네트워킹 계층 내부 + 성능과 보안을 최적화하는 방법
CSS 및 JS 애니메이션의 보호 아래 + 성능을 최적화하는 방법
구문 분석, 추상 구문 트리(AST) + 구문 분석 시간을 최소화하는 방법에 대한 5가지 팁
Babel과 TypeScript의 클래스 내부 및 상속 + 트랜스파일링
스토리지 엔진 + 적절한 스토리지 API를 선택하는 방법
섀도 DOM의 내부 + 자체 구성 요소를 구축하는 방법
WebRTC 및 피어 투 피어 연결의 메커니즘
사용자 정의 요소 + 재사용 가능한 구성 요소 구축에 대한 모범 사례
예외 + 동기 및 비동기 코드에 대한 모범 사례
5가지 유형의 XSS 공격 + 예방 팁
CSRF 공격 + 7가지 완화 전략
반복기 + 발전기에 대한 고급 제어권 획득에 대한 팁
암호화 + MITM(Man-in-the-middle) 공격에 대처하는 방법
기능적 스타일 및 다른 접근 방식과 비교 방법
다형성의 세 가지 유형
정규식(RegExp)
드노 소개
크레셔널, 구조 및 행동 디자인 패턴 + 4가지 모범 사례
MVC를 통한 모듈화 및 재사용성
크로스 브라우저 테스트 + 사전 릴리스 브라우저에 대한 팁
이 변수 및 실행 컨텍스트
고성능 코드 + 8가지 최적화 팁
디버깅 개요 + 비동기 코드에 대한 4가지 팁
통화 깊이 들어가 적용 및 바인딩
그래픽의 진화
Node.js 응용 프로그램 도킹
장식가들에 대한 깊이 파고들.
데이터 컴플라이언스 모범 사례
프록시 및 반사
SVG 및 그 사용 사례(파트 1)
클래스 정적 블록 + 제안된 의미론 6개
그래프 및 트리 소개
from http://it-ground.tistory.com/225 by ccl(A) rewrite - 2021-09-24 03:27:30