1. 실행 환경
- 실행환경이란 ? : 애플리케이션을 실무, 개발, 테스트 모드로 실행하는 방법.
- 개발, 실무, 테스트 세가지가 '표준' 환경이며, 스테이징, 연습환경도 만들 수는 있다.
- 익스프레스는 실행환경을 지원한다.
- app.set('env', 'production') 을 호출해서 실행 환경을 지정할 수 있지만 권장하지 않는다.
- 실행환경을 지정할 경우에는 NODE_ENV를 사용하는 것이 더 좋다.
- app.get('env')를 호출해서 현재 실행 중인 모드를 보고하게 만든다.
- 실무 모드로 바꾸는 방법: 터미널에 이렇게 친다.
$ export NODE_ENV=production
$ node 파일명
- node 파일명으로 서버를 실행시키면 'Express started in production mode at local:3000' 이라고 뜬다.
- 익스프레스를 실무모드로 실행하면 적합하지 않은 구성 요소에 대한 경고가 표시된다. ex) 이전에 봤던 메모리 저장소 등
2. 환경별 설정
- 실행 환경만 바꿔서 달라지는 건 없다. (기부니가 좀 다름)
- 실무 모드에서는 뷰 캐싱이 기본으로 활성화된다. (뷰 템플릿을 미리 메모리에 캐싱해서 I/O 코스트를 줄인다.)
- 세 가지 환경 사이의 차이를 최소화하는 것이 좋다.
서버에 로그 기능을 추가해보자.
- morgan 미들웨어를 사용한다(npm i morgan)
- 이제 서버를 시작하고 사이트를 방문하면 콘솔에 로그가 시작된다.
- NODE_ENV를 production으로 설정하면 터미널에는 기록되지 않지만, 활동 내용이 아파치의로그 형식으로 저장된다.
- 모건에는 여러가지 옵션이 있다. 구글링 해보셈
3. 노드 프로세스 실행
- 현재는 계속 node 어쩌고 이렇게 서버를 실행했을건데, 앱이 충돌하거나 예기치 못한 종료 상황에서 복구할 방법이 없어서 사업이 망할 수 있다.
- 그래서 Process Manager를 사용한다.
- 호스팅의 서비스에 따라서 제공을 하기도 한다. (AWS EC2는 제공하지 않으니 그냥 배워서 쓰자)
- Forever 라는 게 있고(간단)
- PM2라는 게 있다. (국룰, 취업용)
- cf) nodemon 이라는 애도 있는데, 개발할 때 수정사항을 저장할때마다 계속 서버를 알아서 재시작 해주는 개발환경 매니저도 있다.
forever 사용해보자
설치
npm install -g forever
시작
forever start 서버이름.js
- 재시작은 start 자리에 restart, 종료는 stop을 넣으면 된다.
- 뭐 포스팅 할 껀덕지도 없다 넘어가자
4. 웹사이트 확장 (지루하지만 좋은 얘기들)
- 수직적확장 : 더 빠른 CPU, 더 좋은 OS, 더 많은 코어, 메모리를 사용해서 서버 자체의 성능을 올리는 것
- 수평적확장 : 서버 숫자를 졸라게 늘리는 것
- 클라우드컴퓨팅이 늘어나게 되면서, 가상화가 국룰이 된 요즘에는 수평적 확장이 가성비가 높은 선택이 되었다.
- 노드 개발에서는, 항상 수평적 확장을 염두에 둬야 한다.
- 노드는 수평적 확장을 아주 잘 지원하고, 따로 고민하지 않아도 앱에 적용하기가 쉽다.
- 웹사이트 설계에서 중요한 것은 지속성이다. 파일 기반 스토리지로 지속성을 구현하려고 한다면 그것은 언젠가 지옥의 프로젝트가 된다
- 하지만, 로그나 백업같은 읽기전용 데이터는 괜찮다. DB연결 실패에 대비해서 폼 제출 데이터를 파일에 백업하는 경우도 괜찮다.
5. 앱 클러스터를 통한 스케일 아웃
- 노드는 자체적으로 앱 클러스터(app cluster)라는 수평적 확장 방법을 지원한다.
- 앱 클러스터를 사용하면 시스템에 설치된 코어(CPU) 하나마다 독립적인 서버 운영이 가능하다.
- 장점 : 서버의 성능을 최대한 끌어낼 수 있다.(가상머신도)
- 장점2 : 병렬 서버 운영상황을 최소한의 비용으로 테스트 할 수 있다.
클러스터 지원을 추가해보자 (내장된 cluster 모듈을 이용한다)
- 일반적으로 하나의 마스터프로세스와 여러개의 워커프로세스가 있다.
- 마스터프로세스 : 워커프로세스를 생성 및 관리하는 프로세스. 워커프로세스 간의 통신을 조정하며, 워커프로세스가 종료될 경우 필요에 따라 새 워커프로세스를 생성한다.
- 워커프로세스 : 클러스터 모듈을 사용하는 node앱에서 병렬로 실행되는 자식 프로세스. 각 워커 프로세스는 독립된 실행 환경을 가지며, 자체 메모리 공간을 사용한다. 앱 로직을 처리하고, 요청을 처리한다.
- 오라클의 버추얼박스같은 가상화를 사용하고 있다면, VM에서 CPU 여러 개를 사용하도록 설정한다. 기본적으로 가상 머신은 대개 CPU 하나만 사용한다.
- 다음 미들웨어를 라우트 앞단에 두어 각 요청마다 다른 워커가 요청을 처리하는 것을 확인할 수 있다.
'더이상 하지 않는 Backend - NodeJS > Node-Express 개론(완)' 카테고리의 다른 글
[O'REILLY] Node & Express - 13장 : 지속성(Persistence) (0) | 2023.04.10 |
---|---|
[O'REILLY] Node & Express - 12장 : 실무 환경 - 2 (0) | 2023.04.08 |
[O'REILLY] Node & Express - 11장 : 이메일 전송 (0) | 2023.04.04 |
[O'REILLY] Node & Express - 10장 : 미들웨어 (0) | 2023.04.03 |
[O'REILLY] Node & Express - 9장 : 쿠키와 세션 (0) | 2023.04.03 |
댓글