04-30 06:54
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[WebApp/AWS] Amazon Web Serivce EC2를 이용하여 NodeJS 웹 서버 구축하기 본문

Programming/Web App

[WebApp/AWS] Amazon Web Serivce EC2를 이용하여 NodeJS 웹 서버 구축하기

cinema4dr12 2015. 6. 20. 12:11

by Geol Choi | 


이번 글에서는 Amazon Web Service(AWS)를 이용하여 NodeJS 웹 서버를 구축하는 방법에 대하여 알아보도록 하겠습니다.



1.  Amazon Web Server 사이트에 접속하여 sign in을 합니다.


2.  Sign in을 한 후, 좌측 상단에 큐빅 모양의 아이콘을 클릭하여 AWS 메인으로 이동하면 아래 이미지의 화면이 나오고,  EC2를 클릭합니다.



3.   EC2를 클릭하여 Virtual Servers in the Cloud로 이동하면 아래의 이미지의 화면이 나오며 Launch Instance를 클릭하여 새로운 Instance를 생성합니다.




4.  Server 설정 단계는 총 6단계로 이루어져 있습니다. 첫번째 단계는 Amazon Machine Image (AMI)에 대한 여러가지 옵션이 있는데 자신이 선호하는 것으로 선택하면 됩니다. 단, 이 글에서는 Ubuntu Server로 진행하도록 하겠습니다.



5.  두번째 단계는 Instance Type을 선택하는 단계입니다. 결제한 금액에 따라 선택할 수 있는 옵션이 달라지는데 지금은 테스트용이므로 t2.micro (free tier eligible)을 선택하고 다음 단계로 이동합니다.



6.  세번째 단계는 Instance Details를 설정하는 단계입니다. 각각의 자세한 내용은 (i) 아이콘에 마우스 포인터를 가져가면 나옵니다. 특별히 만질 옵션이 없다면 다음 단계로 이동합니다.




7.  네 번째 단계는 Storage를 추가하는 단계입니다. SSD를 무료로 제공하니 매우 매력적인 것 같습니다. 특별히 설정할 옵션이 없다면 다음 단계로 이동합니다.




8.  다섯 번째 단계는 Tag Instance를 설정하는 단계입니다. 적당한 Key 이름과 Value를 지정합니다.




9.  여덟 번째 단계는 Security Group을 설정하는 단계로서 다른 단계에 비해 설정할 옵션이 있습니다. 사용하고자 하는 Server의 형식에 따라 Protocol 및 Port Range가 달라집니다. 이 글에서는 다음과 같은 옵션으로 설정하였습니다. 옵션 설정이 완료되면 [Review and Launch] 버튼을 클릭하여 Review 단계로 이동합니다.


 Type

 Protocol

 Port Range

 Source

 SSH

 TCP

 22

 Anywhere

 0.0.0.0/0

 HTTP

 TCP

 80

 Anywhere

 0.0.0.0/0

 HTTPS

 TCP

 443

 Anywhere

 0.0.0.0/0

 Custom TCP Rule

 TCP

 8080

 Anywhere

 0.0.0.0/0

 Custom TCP Rule

 TCP

 9000

 Anywhere

 0.0.0.0/0





10.  마지막 단계는 Review 단계로 Server 설정을 리뷰할 수 있습니다. 만약 설정을 수정하고자 한다면 해당 항목의 Edit 링크를 클릭합니다. 리뷰가 마무리되면 [Launch] 버튼을 클릭하여 Server에 론칭합니다.




11.  [Launch] 버튼을 클릭하면 기존의 key pair를 선택하거나 새로 생성할 수 있습니다. 처음 Server를 론칭하는 것으로 가정하고 새로운 key pair를 생성하도록 하겠습니다. Create a new key pair를 선택하고 적당한 Key pair name을 입력한 후 다운로드합니다. Key pair는 계속 활용되는 파일이니 적절한 경로에 잘 저장해 두도록 합니다. 이 글의 설명을 위해 Key pair name은 "node.pem"으로 하였으며, 경로는 "/Users/gchoi/Documents/AWS"에 저장해 두었습니다.




12.  Server instance 설정을 위한 모든 단계가 마무리 되었습니다. 이제 [View Instances] 버튼을 클릭합니다.



13.  현재 실행되고 있는 Instance들의 상태 등을 확인할 수 있습니다. 방금 생성한 Instance를 선택합니다.



Instance를 선택하면 아래 이미지와 같이 해당 Instance에 대한 정보가 나옵니다.




14.  터미널을 실행한 후, 해당 Key pair 파일이 저장된 곳으로 이동합니다.




15.  AWS 사이트에서 해당 Instance의 Public DNS를 클립보드에 복사해 둡니다. 터미널에 다음의 명령을 입력합니다.


$ ssh -i [Key pair filename] ubuntu@[Public DNS]


참고로  Public DNS 대신 IP를 입력해도 무방합니다. 아래의 이미지와 같이 성공적으로 명령이 수행되면, AWS의 ubuntu로 들어옴을 확인할 수 있습니다.




16.  AWS의 Ubuntu 시스템에 들어오면 우선 시스템을 업데이트 합니다.


$ sudo apt-get update


17.  이제 node.js를 설치한다. 다음과 같이 명령을 입력합니다.


$ sudo apt-get install nodejs


nodejs 명령을 입력하여 프롬프트 ">"로 들어가는지 확인하여 node.js가 제대로 설치되었는지 확인합니다.



18.  Node Package Manager인 npm을 설치합니다.


$ sudo apt-get install npm



19.  Express를 설치합니다.


$ sudo npm install -g express


옵션 -g는 Global 옵션으로 어느 path에서나 express를 사용할 수 있도록 하는 옵션입니다.



20.  Express generator를 설치한다. 버전은 4.x이며, global 옵션으로 설치합니다.


$ sudo npm install -g express-generator@4



21.  Node monitoring을 위해 nodemon을 설치합니다.


$ sudo npm install -g nodemon



22.  이제 웹 서버를 테스트 할 수 있는 모든 환경이 갖추어졌습니다. 테스트 할 directory를 하나 만들고, 만든 directory로 이동합니다.


$ sudo mkdir node-project && cd node-project && sudo mkdir test1 && cd test1



23.  다음 명령을 입력하여 express 기본 template을 생성합니다. View engine template은 ejs(Extended JavaScript)로 하였습니다.


$ express -e


만약 이 과정에서 "/usr/bin/env: node: No such file or directory"라는 메시지 출력과 함께 에러가 날 경우 다음과 같이 입력합니다.


$ sudo ln -s /usr/bin/nodejs /usr/bin/node



24.  Express template이 제대로 설치되었으면 다음과 같은 항목을 확인할 수 있을 것입니다.





25.  package.json에 정의된 node packages를 설치합니다.


$ sudo npm install



26.  텍스트 편집기를 이용하여 app.js 파일을 편집합니다. 이 파일에서 Server를 생성하고 port 번호를 정의하겠습니다. 우선 port 번호를 9000으로 정의하였습니다.



// port setup
app.set('port', process.env.PORT || 9000);


Server를 생성하기 위해 다음의 코드를 삽입합니다.



//////////////////////////////////////////////////////
// ------- creates Server -------
module.exports = app;

var server = app.listen(app.get('port'), function() {
console.log('Express server listening on port ' + server.address().port);
});


app.js 파일을 저장하고 명령 프롬프트로 나옵니다.



27.  package.json 파일의 node monitoring을 위해 "start" 항목을 다음과 같이 수정합니다.




28.  이제 Server를 실행합니다.


$ npm start


아래 이미지와 같이 메시지가 나오면 server가 성공적으로 실행된 것입니다.




29.  웹 브라우저에서 server가 잘 실행되었는지 확인합니다. 주소창에 Public DNS와 port 번호를 입력합니다. 아래 이미지와 같이 나오면 성공한 것입니다.


참고로 Public DNS 대신 Public IP를 입력하여도 무방합니다.



30.  이제 node.js server를 백그라운드 실행하는 방법에 대해 알아보도록 하겠습니다. 웹 서비스를 위해 자신의 컴퓨터의 터미널을 24시간 띄워놓는 것은 불가능하기 때문입니다. nohup 명령과 &를 입력하여 백그라운드로 node.js server를 실행합니다.


$ sudo nohup npm start &



위의 이미지에서 숫자 3943는 process ID를 의미합니다. 이제 터미널을 닫고 웹 브라우저를 refresh해도 server에 계속 접속되는 것을 확인할 수 있을 것입니다. 다음 명령을 통해 현재 실행 중인 process 목록을 확인할 수 있습니다.


$ ps -ef



위의 이미지를 보면 process ID 3992로 node.js server가 실행됨을 확인할 수 있습니다. 백그라운드로 실행 중인 process를 종료하려면 터미널에서 다음과 같이 명령을 입력합니다.


$ kill [processId]


웹 브라우저에서 refresh를 해보면 process가 종료되었기 때문에 접속이 불가능한 것을 확인할 수 있을 것입니다.



31.  Port redirection에 대해 알아보도록 하겠습니다. 현재 실행되는 node.js server의 port 번호는 9000입니다. 9000은 웹 서버의 기본 port 번호가 아니기 때문에 웹 브라우저에서 접속하려면 port 번호를 입력해야 합니다. 하지만 굳이 사용자의 입장에서 port 번호까지 입력하도록 할 필요가 없습니다. 이를 해결하는 방법 중 하나는, 80번 port를 9000번 port로 자동 redirection하는 방법입니다. 다음의 명령이 그 기능을 수행하는 것입니다.


$ sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 9000


다시 node.js server를 실행해보고 웹 브라우저 창에 port 번호를 삭제하고 서버에 접속되는 확인해 보도록 합니다.



Port 번호가 삭제되었음에도 정상적으로 서버에 접속되는 것을 확인할 수 있습니다.


이로써 AWS에서 node.js 웹 서버를 구축하는 방법에 대해 알아보았습니다.

Comments