// package.json
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "NODE_ENV=DEV node index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
// index.js
console.log(process.env.NODE_ENV);
npm run start

 

MacOS 환경에서 start 스크립트를 실행하면 파일에서 선언한 NODE_ENV 값(DEV)을 사용할 수 있다

하지만 윈도우OS 환경에서 start 스크립트를 실행하면 값이 제대로 들고 오지 못할 때가 있다

 

npm run start
// package.json
{
  "scripts": {
    "start": "cross-env NODE_ENV=DEV node index.js"
}

 

cross-env 패키지 설치 후, 실행하면 윈도우 환경에서도 환경 변수 값을 사용할 수 있다

// package.json
{
  "scripts": {
    "start:windows": "cross-env NODE_ENV=DEV node index.js",
    "start:mac": "NODE_ENV=DEV node index.js"
}

'JavaScript > Node' 카테고리의 다른 글

PM2를 활용한 앱 관리  (0) 2023.08.05
[Node Express] PayloadTooLargeError  (0) 2023.05.11
카페24 노드 서버 구축하기  (2) 2020.12.01

PM2 (Process Manager)는 JavaScript 런타임 Node.js의 프로세스 관리자이다.

설치

# Install
npm install pm2@latest -g
yarn global add pm2
# Update
pm2 update

 

어플리케이션 실행

pm2 start app.js

 

프로세스 확인

pm2 [list|ls|status]

 

로그 모니터링

# To display logs in realtime
pm2 logs
# Here is a realtime dashboard that fits directly into your terminal
pm2 monit
# Web based dashboard, cross servers with diagnostic system
pm2 plus

pm2 monit

 

설정 파일

# You can also create a configuration file, called Ecosystem File, 
# to manage multiple applications.
pm2 ecosystem
# And start it easily
pm2 start ecosystem.config.js
// ecosystem.config.js
module.export = {
     apps: [{
      name: 'app_name',
      script: './app.js',
      instances: 0,
      exec_mode: 'cluster'
    }]
}

instances 값을 0으로 설정하면 CPU 코어 수 만큼 프로세스를 생성하겠다는 뜻이다.

 

프로세스 개수 늘리기

# 프로세스 4개 추가
pm2 scale app_name +4 
# 프로세스 4개 제거
pm2 scale app_name 4

 

프로세스 관리

pm2 stop <app_name> # 또는 파일 경로 (ex. /home/server.js)
pm2 delete <app_name>
pm2 restart <app_name>
pm2 reload <app_name>
pm2 show <app_name>

 

 


 

참고 사이트

PayloadTooLargeError: request entity too large

413 Payload Too Large

Body 요청 시, JSON 길이가 길면  클라이언트는 413 코드 응답을 받게되고, 서버에서는 PayloadTooLargeError 가 발생한다.

 

app.use(express.json({
  limit: "50mb"
}))

위 코드를 추가하여 해결

1. 데이터베이스 (MySQL 연결하기)

호스팅관리 - 기본관리 - 서비스 사용현황 - MySQL 외부 IP 접근설정

사용하는 컴퓨터의 공인 IP를 설정 ( 네이버 IP주소 검색 )

 

HeidiSQL 설치
호스팅 관리 - 서비스 접속관리 - MySQL 웹어드민

DB 호스트명 : 접속 URL ( /WebMysql 제외 )

사용자 : 아이디

암호 : 설정한 DB 비밀번호

 

[호스팅 계정에 phpMyAdmin 직접 설치하여 접속]

Filezilla 또는 웹FTP를 이용해서 하는 방법이 있는데, 제가 선택한 서비스로는 사용할 수 없는지 Filezilla에서 연결이 안되더라고요. ( 자주 묻는 질문에서 git으로 배포하라고 나와 있는데, 이 방법은 사용 못하는 것 같습니다. )

-> Git 명령어를 통해 앱 관리를 하시면 됩니다. 

 

 

2. 서버 구축하기

2-1. 앱 생성관리 메뉴에서 앱 생성

2-2. Public key 관리 메뉴에서 Public Key 등록 ( 카페24 public key 생성 매뉴얼 )

C:\Users\hostname\.ssh - id_rsa ( 유형 : PUB 파일 ) 내용을 복사 Public Key에 입력

Public Key 이름은 아무 내용이나 적어도 상관 X

 

Public key를 등록한 후,  위 캡처에서 [Key 할당] 버튼을 통해 앱에 등록해주시면 됩니다.

2-3-1. Git 명령어

# 프로젝트 폴더 접속 후, git 초기화
$ git init
# 원격 저장소 설정. 일반적으로 origin 또는 원하는 원격 저장소 이름
# git remote add <name> <url>
$ git remote add origin <Git URL>
# 원격 저장소 확인
$ git remote -v

# cafe24 앱에 소스 배포
# git push <remote> <branch>. `git branch` 명령어를 통해 현재 branch 확인
$ git push origin master

 

2-3-2. 소스 배포하기 (Sourcetree 설치)

설정을 눌러 원격 저장소 경로를 등록 ( 경로는 앱 생성/관리 - 앱 리스트 - 저장소 주소가 적혀있습니다. )

 

$ git push cafe24(원격 저장소 이름) master

비밀번호는 Public Key 생성 시, 설정한 비밀번호 입력

 

서버에 소스 배포를 완료했습니다. 앱 생성/관리 - 앱 리스트에서 앱을 실행 (앱 재실행하여 소스를 반영)

 

😊 서버 구축 완료 

 

🤦‍♂️ 중요

1. node.js 호스팅은 일반적인 웹호스팅과는 달리 FTP를 통한 파일 업로드를 지원하지 않는다. (git 통해 소스 배포)

2. 앱 기본 실행 파일명은 web.js 로 설정

3. 소스에서 경로 설정 ( /home/hosting_users/ID/apps/ID_ID/ ) 

 - ./ 또는 / 이런 식으로 사용하면 경로를 인식하지 못하였음

4. git commit 시, node_modules 파일 반드시 포함

5. 소스 배포 이후, 앱  중지 -> 실행을 통해 배포한 소스. 서버에 적용

 

지인의 부탁으로, 책임감을 가지고 Node Express + Cafe24 서비스를 통해 API 서버를 배포하였다.

작은 회사이기도 하고, 트래픽이 낮은 프로젝트라서 가격이 저렴한 Cafe24 호스팅 서비스를 이용하였다.

 

서버 원격 접속이나 FTP 접속을 지원하지 않아, Git을 통해 앱을 관리해야한다거나 Cafe24 사이트에서 지원하는 [로그 보기] 버튼으로 서버 모니터링을 하기에 불편함이 있었다.

 

설명이 잘되어 있는 여러 블로그들을 참고했지만, 그럼에도 막히는 부분들이 역시나 있었다. 

하지만 문제를 해결하면서 새로운 것들을 배울 수 있었고, 무엇보다도 내가 처음 배포한 서버가 문제없이 돌아간다는 점에서 많은 성취감을 느낄 수 있었다. 

 

+ Recent posts