Ubuntu 서버 Node.js 환경세팅

by Dany


Posted on May. 21th 2019



Node.js

Node.js는 가장 간단하고 빠르게 웹서버를 구축할 수 있는 방법중 하나입니다.

Javascript 언어를 사용하며, 다음과 같은 특징을 갖고 있습니다.

  • V8 Engine 사용
  • Event-driven 방식 사용
  • Non-Blocking 방식 사용
  • Single Thread 사용

이에대해 자세한 내용은 Node.js 자세히 알아보기 이 링크를 참조하시면 도움이 될것같습니다.

아무튼, 본격적으로 Node.js 서버를 설치하는 방법에 대해서 자세히 알아봅시다.

이 포스트는 Ubuntu 18.04 을 기준으로 합니다.

1. curl 설치

sudo apt-get install curl


2. Node.js 설치를 위한 deb 추가

curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -


3. apt-get 을 사용해 Node.js 설치

sudo apt-get install -y nodejs


4. 설치 확인

node -v & npm -v


5. pm2 설치

sudo npm install -g pm2

pm2는 Node.js 서버에 특화된 프로세스 관리자로, 간편하면서도 기능이 뛰어나서 추천드립니다. 자세한 사용법에 대해서는 pm2사용법를 참고하세요.


6. 서버 시작 스크립트 작성

  • app.js
var http = require('http');

http.createServer((request, response) => {  
    response.writeHead(200, {'Content-Type' : 'text/plain'});
    response.write('Hello nodejs');
    response.end();
}).listen(3000);

이렇게 작성된 웹서버로 접속하면, Hello nodejs라는 텍스트가 브라우저에 출력될것입니다.

7.pm2 실행

sudo pm2 start app.js

이렇게 되면 현재 웹서버가 동작하게 되고, 이 웹서버는 3000포트에서 실행되고 있기 때문에 물리 서버 3000포트를 개방해 놓은 상태에서 브라우저에서 http://ip_address:3000 으로 접속하게되면 Hello nodejs라는 텍스트가 출력되는 것을 확인할 수 있습니다.

그런데 일반 브라우저는 http통신 사용시 80포트를 사용하게 되는데, Node.js는 기본적으로 80포트를 Listen할 수 없습니다. 기본적은 이러한 이유로, 또 그외에 Node.js 웹서버로 접근하기 전에 앞단에서 처리할 수 있는 기능들을 사용하기 위해서 Nginx라는 WAS를 추가로 사용할 것입니다.


Nginx

Nginx에 대해 자세히 알고 싶으시다면 Nginx에 대해 알아보기 를 참고하시기 바랍니다.

본 포스트에서는 환경세팅 위주로 설명하겠습니다.

1.apt source list 추가

sudo vi /etc/apt/sources.list

먼저 이 파일을 열어서 맨 아래줄에

deb http://nginx.org/packages/ubuntu/ bionic nginx
deb-src http://nginx.org/packages/ubuntu/ bionic nginx

이렇게 두줄을 추가합니다. 만약 vi 사용이 어려우시다면 vi명령어 를 참고하시기 바랍니다.

그리고 한가지더 추가하자면, 위 추가내용에서 bionic이라는 문자열은 우분투 버전에 따라 다른 문자열을 넣어주어야 합니다.


| 14.04 | trusty | x86_64, i386, aarch64/arm64 |

| 16.04 | xenial | x86_64, i386, ppc64el, aarch64/arm64 |

| 17.10 | artful | x86_64, i386 |

| 18.04 | bionic | |

이렇게 입니다. 참고하시기 바랍니다. 저는 18.04를 사용하고 있기때문에, bionic을 넣어주었습니다.

2. apt-get update

이렇게 추가한 source list를 반영하려면

sudo apt-get update

를 실행해야 하는데, 아마 이때

The repository ‘http://nginx.org/packages/ubuntu bionic InRelease’ is not signed

이러한 에러가 발생할 수 있습니다. 이때는 nginx signing key를 다운받아야 합니다.

wget http://nginx.org/packages/keys/nginx_signing.key
cat nginx_signing.key | sudo apt-key add - 
sudo apt-get update

이렇게 순서대로 입력하면 키가 추가되고, source list가 제대로 반영될것입니다.

3. Nginx 설치

sudo apt-get install nginx


이걸로 Nginx 설치도 끝입니다. 이제 Nginx config만 환경에 맞게 변경해주면 됩니다.

그전에 간단히 설명을 하자면, 클라이언트가 먼저 서버로 접속을 시도합니다. 이때 브라우저에서 시도하는 http 프로토콜은 80포트를 사용하기 때문에, Nginx가 먼저 앞에서 80포트를 Listen하고 있을겁니다.

그 후, Nginx가 실제 동작하고 있는 Node.js 웹서버(3000포트)로 Proxy를 넘길거에요. 그 설정을 한번 해보겠습니다.

4.Nginx Config 변경

먼저 config파일이 있는 곳으로 이동합니다.

cd /etc/nginx/conf.d

기본 설정 파일인 default.conf 파일을 vi로 열겠습니다.

sudo vi default.conf

이 파일을 이렇게 바꿔줍니다.

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_pass http://localhost:3000/;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

먼저 간단히 중요한 내용만 설명하자면,

server가

listen 80;

80포트를 Listen 하고 있다는 뜻입니다.

location {
    proxy_pass http://localhost:3000/;
}

이 부분이 포인트입니다. localhost:3000 으로 프록시를 넘기고 있습니다. 바로 위에서 만든 Node.js 서버입니다.

사실 Node.js 로컬서버와 개발환경 설치는 매우 간편하지만, 의외로 원격서버 환경 구성에는 어려움을 겪는 분들도 계시기에, (물론 그래도 Java 환경 설치에 비할바는 못되지만) 이렇게 Ubuntu 원격서버에 Node.js 환경을 설치하는 방법을 정리해 보았습니다.