[Node 주특기 입문 마지막 날]
주말에도 열심히 Node를 했지만 결국 마지막 날까지 과제를 완료하지 못했다. 정확하게는 과제를 시작조차 못했다.
전체 강의 중 마지막 10분에서 엄청나게 막히면서 오늘 하루도 다 썼다.
이번 Node 주특기 입문 주 내내 mac강의를 window OS에서 따라가려니 너무 벅찼다. 어떻게 보면 시간이 매우 아까운 것 같기도 하다. 공부한 전체 시간이 100이라고 했을 때 내가 직접 코드를 짜보는 시간은 3 정도였던 것 같고 97정도가 프로그램 설치, 설치, 설치, 설치오류, 설치, 설치오류의 반복이었던 것 같다. 정작 코드는 짜보지도 못한 채 설치오류만 하루종일 상대하고 있으니 이게 맞나 싶다.
Local 환경 ⇛ Ubuntu 환경 ⇛ Root ip 환경
오늘은 Local 환경에서 Ubuntu 환경, Root ip환경으로 왜 이동해야 하는지, 어떻게 이동하는지 적어보려고 한다.
먼저, Root ip 환경으로 가는 이유에 대해 간단하게 설명하자면 local ip에서 빌린 서버 컴퓨터와 연동되어 있을 때 local 컴퓨터를 끄거나 연결을 끊게될 경우 서버가 함께 꺼지기 때문에 서버 연결이 끊어지지 않게 관리가 필요하다. 이 이유로 우리가 서버를 끄더라도 계속해서 서버를 연결시켜 줄 수 있는 pm2라는 node.js 프로세스 매니저를 깔아야 하기 때문에 Root ip 환경까지 들어가는 것이다.
우선 각 환경에 들어가기에 앞서 몇 가지 준비사항이 필요하다.
서버가 잘 열리도록 구성된 git Repository, EC2 인스턴스, 인스턴스 키, 인스턴스 보안 - 기본 포트 설정 및 연결, putty
Local 환경
앞서 설명한 기본적인 설정들을 하여 Local 환경 설정을 마지고 Local 환경에서 다음과 같은 명령어를 통해 ubuntu환경에 진입할 수 있다.
ssh -i sparta_keypair.pem ubuntu@3.39.252.62
// instance key : sparta_keypair.pem
// 서버 ip 주소 : 3.39.252.62
Ubuntu 환경
앞의 과정을 통해 현재 ubuntu 환경으로 들어왔다. ubuntu환경이라는 것은 EC2에서 빌린 서버 컴퓨터 환경을 의미하는데, EC2 서버 컴퓨터 대여 과정에서 ubuntu로 설정해줬기 때문에 ubuntu 환경으로 들어온 것이다. 만약 서버 컴퓨터 대여 과정에서 AWS linux나 다른 OS 를 골랐다면 그에 맞는 환경으로 들어가 줘야 할 것이다.
Ubuntu 환경에서는 현재 서버 컴퓨터에 아무 것도 설치되어 있지 않기 때문에 local에서 작업해줬던 프로젝트를 git clone을 통해 가져오고 저장해주어야 한다. 그 후 Node.js, npm, mongoDB다운 및 실행을 해주어야 한다.
위의 과정을 통해 서버 컴퓨터에 필요한 것들을 모두 설치해주었다면 node app.js 라는 명령어를 통해 서버를 열어주면 된다.
(서버를 실행시키는 파일이 app.js이기 때문에 app.js를 실행시켜준 것이다)
이 때, 진입하는 포트의 설정 없이도 기본 80포트에서 3000포트로 자동으로 진입하게 설정해주려면 현재 실행되어 있는 서버를 끈 뒤, iptables의 전달규칙 명령어를 설정해주어야 한다.
iptables란?
AWS가 아닌 리눅스 운영체제 내부에서의 방화벽 역할을 하는 프로그램이다.
리눅스로 들어오는 모든 요청은 iptables에 의해 정의된 규칙을 따라 처리된다. 이것을 이용해 80포트로 들어오는 요청을 리눅스 내부에서 사용되는 3000포트로 전달하는 규칙을 설정할 수 있다.
iptables의 규칙 변경 명령어는 다음과 같다.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
위의 명령어를 실행해준 뒤 서버를 다시 키게되면 ip주소에 80번 포트 , 3000번 포트, 포트 번호 기재x 경우에도 모두 상관없이 페이지가 켜지는 것을 확인할 수 있다.
Root ip 환경
마지막으로, 현재 컴퓨터와 서버가 연결되어 있는데 local컴퓨터를 끈다거나 ubuntu환경과의 연결을 끊게 된다면 서버가 닫히게 되는데 이와 같은 행동을 하더라도 서버가 닫히지 않게 만들어야 한다.
이를 PM2가 해결해 줄 수 있는데 이 PM2를 깔기 위해 root ip(최대 권한을 가진 계정)로 들어온 것이다.
PM2란?
Node.js 어플리케이션을 쉽게 관리할 수 있게 해주는 Process Manager이다. Node.js 어플리케이션을 cluster mode도 실행시키거나, 메모리가 넘치거나, 오류로 인해 프로세스가 종료되는 상황에 직면했을 때 각각의 상황을 사용자가 모두 신경써서 처리하지 않아도 알아서 처리해준다.
우선, root ip는 기존 ubuntu환경에서 sudo -s라는 명령어를 통해 접근할 수 있다. root ip에 들어왔을 때 npm install PM2라는 명령어를 이용해서 PM2를 설치할 수 있다.
PM2를 설치한 뒤에는 PM2를 관리할 수 있는 몇 가지의 명령어를 사용할 수 있다.
(ubuntu 환경에서는 sudo <명령어>를 통해 할 수 있고, root ip 환경에서는 <명령어>를 통해 실행할 수 있다.)
- (app.js가 있는 폴더에서) pm2 start app.js : pm2를 이용한 서버 키기
- pm2 list : pm2에서 실행되고 있는 리스트 보기
- pm2 monit : pm2에서 실제 발생한 로그가지도 확인할 수 있음.
- pm2 delete 0 : 서버 종료, list를 보게되면 제일 앞에 id가 있는데 'id=0'인 프로세스를 끈다라고 생각하면 될 것 같다.
문제해결
오늘 해결해야 하는 문제는 2가지가 있었다.
① Ubuntu 환경(서버)에서 node.js, npm이 다운로드 되지 않는 문제
② Root ip 환경에서 node.js, npm이 다운로드 되지 않는 문제.
Ubuntu 환경에서 nodes.js와 npm이 설치되지 않는 경우가 있다. 이러한 경우에는 nvm 설치를 통해 npm과 node.js를 다운받을 수 있다.
nvm을 설치하는 명령어는 다음과 같다.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
위의 명령어로 nvm을 다운받게 되면 npm과 node가 함께 다운로드 되는 것을 확인할 수 있다.
root ip 환경에서는 npm이나 node 라는 명령어를 입력했을 때, '찾을 수 없다 (cannot found) ' 라고 떴었는데 이도 마찬가지로 npm, node 명령어가 필요없는 nvm 설치 명령어를 통해 설치해주었다.
그 후 ubuntu와 root ip의 node, npm 버전을 맞춰주기 위해서 각각의 환경에서 nvm install --lts 라는 명령어를 통해 lts 버전으로 버전을 맞춰주었다.
이 방법을 통해 npm과 node를 설치할 수 있었고, npm과 node 명령어가 잘 듣는 것을 볼 수 있었다.
'TIL' 카테고리의 다른 글
2023_11_08 TIL (2) | 2023.11.09 |
---|---|
2023_11_07 TIL (1) | 2023.11.07 |
2023_11_03 TIL (2) | 2023.11.03 |
2023_11_02 TIL (1) | 2023.11.03 |
2023_11_01 TIL (1) | 2023.11.02 |