Amazon Web Services

부록 : nodejs 실습환경 구축

본 수업에서는 nodejs를 실습하기 위한 기본적인 설치 방법을 다룹니다. 보안과 같은 이슈는 포함하고 있지 않습니다. 또한 리눅스 배포판인 ubuntu를 기준으로 설명하고 있습니다. ubuntu 서버가 없는 분은 EC2를 이용해서 마련할 수 있습니다. 

nodejs 설치

아래 링크를 참고합니다. 

https://nodejs.org/en/download/package-manager/

필자는 영상에서 아래 명령을 이용하고 있습니다.  

curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash - 
sudo apt-get install -y nodejs

디렉토리를 만들고 소유자를 변경합니다.  이 디렉토리에 프로젝트가 위치합니다. 

sudo mkdir /opt/o2;
cd /opt/o2;
sudo chown ubuntu /opt/o2;

npm을 사용하기 위해서 package.json 파일을 만듭니다. 모든 설정을 기본으로 해도 됩니다.(엔터를 누르면 됩니다)

npm init

웹프레임워크인 express를 설치합니다. 

npm install --save express

아래와 같이 코드를 작성합니다. 파일명은 app.js

var express = require('express');
var app = express();
app.get('/', function(req, res){
        res.send('Hello world');
});
app.listen(80, function(){
        console.log('Connect 80 port');
});

아래 명령으로 웹애플리케이션을 구동합니다. 

sudo node app.js

서버로 접속해봅니다. 

댓글

댓글 본문
작성자
비밀번호
  1. andrewjkme
    처음으로 댓글 남기네요

    저도 포트 80번 에러가 떴는데요 아마 AWS 우분투 인스턴스에서 작업하시는 분들중에 저처럼 아파치가 실행되고 있어서 이러한 에러가 발생한거 같습니다.

    (인스턴스 퍼블릭 IP로 접속하면 우분투 아파치 디폴트 페이지가 뜨고 있겠지요)

    이럴경우 아파치를 중지하면 node app.js 가 에러없이 작동됩니다.

    $ sudo /etc/init.d/apache2 stop

    nodejs를 아파치 위에서 작동하게 하려면 어떻게 해야할지 알아봐야겠네요.
  2. 생활코딩님께서 항상 친절하고 초보자 눈높이에 맞추신 강의를 진행하시지만,
    이번 강의는 초보자가 그대로 따라하기에 어려움이 있어 보입니다.
    제가 겪었던 문제에 처한 다른 사용자들에게 도움이 되길 바라면서 글을 쓸께요.

    #1. vi 문서 작성
    - 작성 시작 : i 키 누를 것.
    - 작성 저장 밑 종료 : ctrl+s 아님! ESC -> :wq -> 엔터
    - ctrl+s를 눌렀을 때 증상 : 커맨드 키 멈춤!
    - 커맨드 입력 안 되는 먹통현상 해결 방법 : ctrl + q 키 누를 것.

    #2. 80 포트 에러 문제
    - 생활코딩님의 강의를 순차적으로 따라오신 분들이 해당하는 것으로 보임 (저도 그랬음)
    - 문제 대상 : Hello AWS 라는 내용의 html 작성하신 분들.
    - 문제 원인 : 이미 Hello AWS라는 메인 페이지가 활성화 되었기 때문.
    - 해결 방법 : 현재 AWS 인스턴스 종료(termination)하고 다시 인스턴스 새로 만드세요.
    인스턴스 생성 후 nodejs, express를 지금 현재 강의하신 것 대로 다시 깔면 되요.
    저는 복습한다고 생각하고 다시 인스턴스 생성했어요.
    - 그 외 해결 방법 : 활성화 되어있는 80 포트 사용하는 프로그램 정지.
    - 그 외 해결 방법 2 : 다른 포트 활성화 시키고 80 포트로 리다이렉트 시키기.
  3. 박인호
    저 역시 80번 포트에 리슨시킨 후 노드를 실행시키면 오류가 발생하여 3000번 포트에 리슨시킨뒤, 사용자가 80번 포트로 들어오는 접속을 3000번 포트로 우회시켰습니다. 명령문은 다음과 같습니다.

    sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
  4. 잘 봤습니다~
  5. awsgogo
    egoing님 질문이 있습니다.

    새로 nodejs 기반 웹 어플리케이션을 구축하지 않고, 제가 mac에 가지고있는 파일을 linux 서버에 띄우고싶으면 어떻게 접근해야하나요?
  6. 구녹수수
    egoing님~ 제가 잘 따라하다가 express도 설치하고
    sudo node app.js를 입력해도
    events.js:160
    throw er; // Unhandled 'error' event
    ^

    Error: listen EADDRINUSE :::80
    at Object.exports._errnoException (util.js:1026:11)
    at exports._exceptionWithHostPort (util.js:1049:20)
    at Server._listen2 (net.js:1253:14)
    at listen (net.js:1289:10)
    at Server.listen (net.js:1385:5)
    at EventEmitter.listen (/opt/o2/node_modules/express/lib/application.js:617:24)
    at Object.<anonymous> (/opt/o2/app.js:6:5)
    at Module._compile (module.js:556:32)
    at Object.Module._extensions..js (module.js:565:10)
    at Module.load (module.js:473:32)

    구글링을 해보니까 포트를 이미 사용중이고 제가 8080하고 ^C를 안하고 그냥 나오니까 프로세스가 종료되지않아서

    다음에 8080으로 할때는 접속이 안된다는걸 알아서 kill로 해서 없앤다음에는 8080 으로connect이 됬다고 메시지가 뜨더라구요

    이게 혹시 security group 에서 HTTP port가 80 이라서 그런건가요?

    그리고 ip주소로 들어가니까 index/ 하고 파일들이나오고

    Apache/2.4.7 (Ubuntu) Server at 52.78.100.251 Port 80 이게 맨밑으로 나옵니다

    그리고 뒤에 :8080으로 작성하고 들어가려하면 막히네요 ㅜㅜ

    왜그런건가요...? 혹시 security group에서 port8080에 대한 권한을 주지 않아서 그런가요??

    여기서 계속 막히네요 ㅜㅜ

    --------------------------------------------------------------------------------------------------------------------

    구글링을 해서 해결을 했는데 이렇게 해도 무방한지 한번 확인 부탁드립니다

    Security Group에서 edit을 하여 Custom TCP rule을 하여 port range를 8080으로 지정해주니

    Hello World가 뜨더라구요 이렇게 해도 무방한건가요??

    그리고 egoing 님은 어떻게 80으로 그냥 접속이 가능하신건가요??
  7. 구녹수수
    정말 감사합니다!! 이거 고민하느라고 새벽까지 고민하다가 일어나자마자 확인하런왔는데 아침부터 정말 감사합니다...!!!
    대화보기
    • egoing
      아이고 죄송합니다. vi 보다는 nano를 쓰시는게 좋을 것 같아요.

      http://studymake.blogspot.kr......tml

      일단 vi에서는 우선 ESC를 누르고 ':' 키를 누른 뒤에 wq를 누르면 저장 종료가 됩니다.
      대화보기
      • 구녹수수
        이고잉님 너무 답답해서 이렇게 글을 남깁니다. 다 실행이 되는데
        영상에서 처럼 vi 하고 파일을 만들고.
        var express = require('express');
        var app = express();
        app.get('/', function(req, res){
        res.send('Hello world');
        });
        app.listen(80, function(){
        console.log('Connect 80 port');
        });

        이렇게 쓰면 어떻게 빠져나가나요 영상에서는 바로 나가시던데 키보드를 아무렇게 누르다 보니 자꾸 멈춰버리네오 ㅠㅠ
      버전 관리
      egoing
      현재 버전
      선택 버전
      graphittie 자세히 보기