생활코딩

Coding Everybody

부록 : nodejs 실습환경 구축

토픽 생활코딩 > 서버 > 인프라 > 아마존 웹서비스 (AWS)

본 수업에서는 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. 당당
    2023.06.22
  2. 하늘의방랑자참새
    버젼 마다 다른 설치 방법

    첫번째 줄만 다르고 뒤에 크게 상관 없을 듯 싶네요

    https://github.com.......md
  3. labis98
    20220211 항상 좋은 강의 감사합니다.
  4. 이한성
    좋은 강의 감사합니다.
  5. sanalysis
    node.js 창시자 라이언 달은 쓰는걸 추천하네요.
    "You just may be hacked when some yet-unknown buffer overflow is discovered. Not that that couldn't happen behind nginx, but somehow having a proxy in front makes me happy".

    node.js 위에서 돌아가는 express같은 웹 프레임워크 앞단에서 reverse proxy(리버스 프록시) 기능용으로 NGINX나 Apache를 쓰는게 좋은듯합니다.

    결론적으로 보안을 위해서 쓰는 경우로 보입니다.
    대화보기
    • Woori
      잘보았씁니다
    • andrewjkme
      네 저도 찾아보니 지침님 말씀대로 nodejs (express)만으로 웹서버 사용이 가능하거 같습니다.
      또한 SSL 같은 보안 기능도 다 지원을 하는거 같구요.

      저도 같은 질문이 드네요.
      (정말 현업에서는 nodejs으로만 하지않고 아파치와 nodejs 같이 사용하나요?? )

      저는 일단 nodejs를 제쳐두고 워드프레스(PHP) + 아파치로 제 블로그를 만들어보았습니다.
      (네,, 사실 모든 블로그 기능을 구현하는것이 상당히 시간이 걸릴거 같고, 굳이 php 몰라도 약간의 수정정도로도 제가 원하는것을 다 할 수 있더군요)

      AWS, AZURE, GCP를 다 오픈해서 비슷한 가상 리눅스환경에서 하나씩 공부해볼 생각입니다.

      이렇게 된것도 인연이면 인연인데 저 같은 커넥션 하나 없는 초짜 개발자와 같이 공부하실 생각은 없으신지요?
      다시 댓글을 보실지 모르겠지만 제 초라한 블로그를 자랑할겸 주소를 남겨봅니다.
      https://andrewjk.me
      대화보기
      • 지침
        nodejs에도 ssl https 기술이 있습니다.(https://nodejs.org......tml)

        기존에 아파치 PHP 를 사용하고있는상황에서 nodejs를 사용해야한다면 프록시로 같이 사용할 수 있다고 합니다.
        하지만 성능은 저하 될꺼라고 하네요. 그래서 개발시작단계에 있을땐 nodejs로만으로도 아파치+php를 대체 할수있을거라고 생각합니다.

        아파치,Nginex와 nodejs 프록시 연결 (https://blog.grotesq.com/post/448)
        여기에서도 불가피하게 두개같이 써야한다면 프록시를 연결하고 그렇지않으면 nodejs 로만으로도 충분하다라는 말이 있습니다.

        정말 현업에서는 nodejs으로만 하지않고 아파치와 nodejs 같이 사용하나요??
        궁금합니다.
        대화보기
        • andrewjk.me@gmail.com
          Nodejs 만으로 웹 서버 기능을 할 수 있고 웹 어플을 띄울수 있지만 어디까지나 실습환경 로컬에서만 사용해야 됩니다. 이유는 이고잉님이 리눅스 아파치 편에서 다 설명했다고 생각됩니다.

          단순히 아파치를 실행할때 이는 단순히 실시간 작동하는 데몬 뿐만아니라 ssl 이나 https 같은 각종 보안 관련해서 다른 패키지와 자동으로 연동이 되어 실제 프로덕트 서버에서 사용 할 수 있는거 같습니다
          대화보기
          • 지침
            nodejs 자체에 아파치의 기능까지 있기때문에 아파치실행중에 nodejs가 실행이 안되고
            그렇기때문에 아파치없이 nodejs만 사용하면 될꺼라고 지극히 저의 생각입니다.
            제가 말한게 아닐수도있습니다.
            대화보기
            • andrewjkme
              처음으로 댓글 남기네요

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

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

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

              $ sudo /etc/init.d/apache2 stop

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

              #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 포트로 리다이렉트 시키기.
            • 박인호
              저 역시 80번 포트에 리슨시킨 후 노드를 실행시키면 오류가 발생하여 3000번 포트에 리슨시킨뒤, 사용자가 80번 포트로 들어오는 접속을 3000번 포트로 우회시켰습니다. 명령문은 다음과 같습니다.

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

              새로 nodejs 기반 웹 어플리케이션을 구축하지 않고, 제가 mac에 가지고있는 파일을 linux 서버에 띄우고싶으면 어떻게 접근해야하나요?
            • 구녹수수
              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으로 그냥 접속이 가능하신건가요??
            • 구녹수수
              정말 감사합니다!! 이거 고민하느라고 새벽까지 고민하다가 일어나자마자 확인하런왔는데 아침부터 정말 감사합니다...!!!
              대화보기
              • 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');
                  });

                  이렇게 쓰면 어떻게 빠져나가나요 영상에서는 바로 나가시던데 키보드를 아무렇게 누르다 보니 자꾸 멈춰버리네오 ㅠㅠ