본문 바로가기
AWS

AWS에 parse를 migration하기 전 EC2 instance 셋팅

by RyanGomdoriPooh 2016. 5. 2.

EC2도 접속을 했기때문에 이제는 본격적으로 AWS에서 parse를 작동시킬 수 있게 EC2 instance를 셋팅하는 방법에 대해서 기술 하겠습니다.


Parse가 사용하는 서버 사이드 언어는 node.js이기 때문에 이번 시간에 node.js가 작동하는 환경도 구축하는 부분이 포함되어 있습니다.


천천히 잘 따라 밑으로 진행하시면 떠다 먹여주는 서버 세팅을 마무리 하실 수 있습니다.


1. 일단 EC2 instance에 접속해서 터미널을 띄워줍니다.



2. $ su => 패스워드 입력

root 권한으로 접속해 줍니다.



3. $ apt-get update

현재 AWS에서 사용하는 Ubuntu 시스템을 업데이트하는 작업을 우선적으로 한다.

이 작업을 완료해놓고 셋팅을 해야 나중에 셋팅 중에 발생할 수 있는 자잘한 버그를 막을 수 있습니다.



4. $ curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -

   $ sudo apt-get install -y nodejs

로 node.js를 설치 합니다. 버전을 다르게 하려면 4.x 부분을 5.x(5.버전)이나 6.x(6.버전)으로 바꾸어서 나머지 과정을 하시면 됩니다. 버전 넘버 뒤에 x는 그 해당 버전 중에서 가장 최신 버전을 뜻합니다.


이 과정에서 해당 instance는 WAS가 될 소프트웨어를 설치하였다고 보시면 됩니다.

$ nodejs 명령어로 nodejs를 실행 시켜봅니다. '>'로 프롬프트가 나오면 설치가 완료된 것입니다.

그리고 ctrl+Z로 종료하고 $ nodejs -v 명령어로 버전도 봅니다. 원래 nodejs는 버전 0.12.X 였는데  io.js와 극적 병합을 이루게 되면서 io.js의 버전을 따라 가게 되었습니다.

그래서 현재는 4.4.3 이상 버전이 최신 버전으로 되어있을 것입니다. 현재 글쓰는 시점으로 6.0.0 버전이 최신 버전입니다.


그리고 기본 빌드 툴 모음인 build-essential 을 설치해 주시기 바랍니다.

node.js 의 기능만을 사용하신다면 필요 없지만 npm을 이용하여 애드온을 설치 사용하는 경우 빌드가 필요할 수 있으니 설치해 두시기 바랍니다. 굳이 필요없다면 설치 안하셔도 상관없습니다.

$ sudo apt-get install -y build-essential



5. $ apt-get install npm

로 설치를 하고 npm -v 로 버전을 확인합니다. NPM은 "Node Package Manager"의 약어입니다. node.js의 모듈관리 프로그램으로써 상당히 강력하게 모든 node.js의 모듈을 관리해줍니다.

혹시 설치가 되어있다면 $ npm update npm -g 로 업데이트를 해줍니다.



6. $ npm install -g express

Express를 -g를 넣으면서 글로벌 옵션으로 어느 path에서도 express를 사용할 수 있게합니다.

Express는 node.js 웹 서버를 개발하기 위해서 만들어진 웹서버 프레임 워크 중에 하나입니다.

쿠키, (따로 분리되어 있는)세션, 파비콘, 로그, 라우팅 과 같은 기능들을 만질 수 있게 해줍니다.

Express에서 Node.js에 대한 부분을 모두 관리 할 수 있는 것은 아닙니다.

하지만 확장성이 뛰어나고 다른 모듈과 연결이 쉽다는 장점이 있습니다.

그 중에서 가장 규모도 크고 많은 사용자를 가지고 있는 Node.js 웹 프레임워크 모듈이 바로 Express입니다.



7. $ npm install -g express-generator

위에 6번에서 설치한 express에도 기본적으로 제공하는 몇가지 모듈이 있는데, 기본 프로젝트 소스를 제공하게하는 모듈이 Express generator입니다.

기본적으로 express 프로젝트의 기본 형식을 만들어주는 커맨드 모듈이기 때문에 글로벌로 설치를 해줍니다.



8. $ npm install -g nodemon

해당 하는 Node.js 프로젝트를 monitoring 하기 위해 nodemon이라는 모듈을 설치해 줍니다. nodemon은 서버에서 해당 node.js 프로젝트로 들어오고 나가는 모든 트랜젝션의 log를 monitoring 해줍니다.



9. 이제 Node.js 프로젝트를 테스트할 directory를 만들고 그 directory로 이동합니다.

예를 들면, 

현재 내가 어느 경로인지 $ pwd 로 볼 수 있고,

mkdir [node-project] && cd [node-project] && mkdir [개별 프로젝트 명] && cd [개별 프로젝트 명]

로 node-project directory를 만들고 앞으로 만들 여려가지 프로젝트를 담들 directory를 만들어서 관리 하는 방향을 잡습니다.


그리고 그 해당 프로젝트 폴더로 이동합니다. 아직은 프로젝트가 아닙니다. 아직 만들지 않았기 때문입니다.

앞에서 설치했던 express와 express-generator를 이용해서 기본 프로젝트 template를 하나 만드는 작업을 다음 작업에서 합니다.



10. 프로젝트를 담을 해당 프로젝트 경로로 이동합니다. 그리고 $ express -e 로 기본 node.js 템플릿을 만들어 봅니다.


다음은 express의 옵션입니다.


방금 만들어진 template는 ejs(Extended Java Script)를 템플릿 렌더링 모듈로 사용하는 것입니다.


혹시 이과정에서 “/usr/bin/env: node: No such file or directory”라고 error가 발생할 경우,

$ ln -s /usr/bin/nodejs /usr/bin/node 로 심볼릭 링크를 만들어서 node폴더에 연결사용될 수 있게끔 설정해서 해결하고 다시 $ express -e로 프로젝트를 생성하여 줍니다.


정상적으로 생성 되었을 때 모습니다. $ ls -al 을 통해서 볼 수 있습니다.


- package.jason에는 express에 현재 있는 모듈명이 명시되어있다.



11. 생성된 express 프로젝트가 구동가능하게 하려면 node package를 설치하여야합니다.

해당 프로젝트에서 $ npm install 을 통해서 설치할 수 있습니다.




12. 이제는 텍스트 편집기를 이용하여 해당 프로젝트 내부 파일인 app.js 파일을 편집합니다.

이 파일에서 Server를 생성하고 port번호를 정의하는 부분입니다. app.js 파일 내부에 소스를 추가해 줍니다.


1) app.set('port', process.env.PORT || 9000); 을 추가해서 해당 node.js 프로젝트를 실행 시킴과 동시에 포트 넘버 9000을 열어줍니다. 굳이 9000을 열어줄 필요는 없습니다. 원하는 포트를 열어 주셔도 됩니다. 다만 포트 넘버 할당 규칙에 맞게...


그리고 소스 하단 부로 갑니다.




2) module.exports = app;

var server = app.listen(app.get('port'), function() {

console.log('Jake.s Express server listening on port ' + server.address().port);

});

소스를 추가해서 서버를 생성하는 코드를 추가합니다.

그리고 저장하고 나옵니다.


여기서 port를 연다고 해서 열리는 것은 아닙니다. 꼭 AWS EC2의 Security Group에 가서 in-bound port를 허용해 주셔야 합니다.



13. 아까 설치하였던 nodemon으로 log 모니터링을 위해 package.json을 수정합니다.


기존의 node ./bin/www을 nodemon app.js로 바꾸어 줍니다.

스크립트 시작시에 nodemon app.js로 시작을 하게 됩니다. 자동으로 nodemon을 사용하게끔 만든 것입니다.


package.json을 설정 하자면 

프로젝트이름 : p1

프로젝트 버전 : 0.0.0 프로젝트마다 정하기 나름이다.


일단은 이정도만 알고 넘어간다. 더 자세한 내용은 http://programmingsummaries.tistory.com/385



14. 이제 $ npm start (또는 $ node ./bin/www) 명령어로 서버를 시작해 봅니다.



다음과 같이 서버가 작동하게 됩니다. request를 요청 받을 준비가 되어있는 상태입니다.


* 그런데 "Error: Cannot find module ‘express’ ” 형태의 에러가 나는 경우 해결책을 제시한다.

생성한 프로젝트에서 다시 npm을 설치 해줍니다. $ npm install 그리고 다시 시작해 봅니다. $ npm start

정상적인 실행을 보실 수 있을 겁니다.



15. 이제 Request를 보내면서 제대로 서버가 작동하고 있는지 확인하시면 됩니다.

접속은 URL http://[본인 서버의 IP or Domain name]:[포트넘버] 로 접속하시면 됩니다.



포트넘버 9000의 AWS instance를 예로 들면,

EC2의 Public DNS 나 Public IP 주소로 52.79.182.79:9000 으로 접속한다. 단 AWS security group에서 포트를 9000을 inbound로 열어 주셔야 합니다.



다음 화면을 보시면 성공하신겁니다.


* 간단히 참고할 사항으로 

"$ ps" 명령어를 통해서 프로세스들을 보고 강제로 종료되지 않는 프로세스들을 "kill -9 [process number]" 명령어를 통해서 제거할 수 있습니다.

다만 프로세스중에 su , bash, ps 같은 예약 키워드와 관련된 것들은 건들지 않기로 하고 종료되지 않은 프로세스를 없애는 작업을 하도록 합니다.


여기서 서버 같은 경우는 npm 으로 실행 시켰기 때문에 kill 로 npm만 kill해주시면 모두 종료되는 것을 볼 수 있습니다.


* Reference

1. http://cinema4dr12.tistory.com/entry/WebApp-Amazon-Web-Serivce-EC2%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%9B%B9-%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0#recentComments



댓글0