[TIL] 20210604_AWS(서버)

BANSEOK SUH·2021년 6월 4일
0

TIL

목록 보기
21/22
post-thumbnail

aws(Amazon Web Service)를 이용한 서버 배포에 대해서 살펴보겠습니다.

codestates에서 진행한 sprint의 내용을 위주로 작성해보았습니다.



EC2 Instance 생성하기, Hands-on

튜토리얼


  1. AWS 홈페이지에서 EC2를 검색하여 인스턴스 시작을 진행합니다.


  1. AMI를 선택하는 단계입니다. 스프린트 때와 같이 Ubuntu, 그 중 최신 버전인 20.04 LTS를 선택했습니다.

  1. 인스턴스 유형을 선택해줍니다. 프리 티어 사용 가능한 유형이 default로 선택되어 있네요.

  1. 키 페어를 생성해줍니다.
    키 페어가 없다면 새 키 페어를 생성을 선택하고 키 페어 이름을 정해줍니다.
    중요1. 경로를 반드시 기억하고 있어야 합니다. 우분투 서버 접속시 키 페어의 경로가 필요합니다.
    중요2. 키는 .pem 파일로 다운받아집니다. 혹시 .cer로 받아진다면 다운로드 후 확장자만 .pem으로 바꿔주면 됩니다.

  1. 인스턴스가 생성이 되었습니다. 서버 컴퓨터를 빌렸다는 것이지요.
    인스턴스에 원격으로 접속하기 위해 해당 인스턴스 선택 후 연결을 합니다.
    이 때 인스턴스 생성 시 다운로드한 키 페어 파일이 필요합니다.

  1. SSH 클라이언트 탭에 가면 아래와 같은 명령어들을 알려줍니다.

생성한 키 페어 파일의 권한을 설정해주어야 합니다.
.pem 파일에 누구나 접근할 수 있는 권한이 부여되면, 인스턴스는 연결을 거부합니다.
400은 소유자에게 읽기 권한만 부여한다는 것입니다.

chmod 400 키_페어의_경로/키_이름.pem

권한에 대한 수정을 완료했다면, 아래와 같은 명령어로 원격 우분투 인스턴스에 접속해줍니다.

ssh -i 키_페어의_경로/키_이름.pem ubuntu@퍼블릭_IPv4_DNS_주소

다음과 같이 우분투 서버에 접속하신 것을 확인할 수 있습니다!




서버 배포

생성한 Ubuntu Instance 상에서 서버를 실행시켜보겠습니다.

이 곳은 제 로컬 컴퓨터와는 다른 새로운 환경입니다.
그래서 서버를 실행하기 위해서 필요한 요소들을 다시 다운로드받아야 합니다.


1. nvm 설치, 환경변수 설정

저희는 Ubuntu 기반의 인스턴스를 생성했습니다. 기본적으로 Ubuntu는 apt라는 패키지 매니저를 사용합니다.
apt를 update하는 것부터 nvm(node version manager)를 설치하는 것까지의 명령어를 주석과 함께 나열해보겠습니다.

// apt를 최신으로 업데이트해줍니다.
$ sudo apt update 

// wget 명령어를 통해 nvm을 bash쉘에 내려받습니다.
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

// bash_profile을 nano로 열어서 아래의 내용을 입력하고 저장해줍니다. 환경변수를 설정해주는 것이지요.
// export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
// [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
nano ~/.bash_profile

// 환경변수 설정이 완료됐으면 source 명령어를 통해 환경변수를 적용시켜줍니다.
source ~/.bash_profile

// nvm이 잘 설치되었는지 확인합니다.
nvm --version

wget 명령어로 nvm을 설치만 하고 환경변수에 대한 설정을 하지 않는다면 다음과 같은 에러가 발생합니다.


nvm 설치가 완료되었으면 nvm을 통해 node를 내려받고, apt를 통해 npm을 내려받습니다.

$ nvm install node 

$ sudo apt install npm

여기까지가 우분투에서 서버를 실행시킬 세팅이 완료된 것입니다!


2. git clone

우분투에서 프로젝트를 clone 해줍니다.
clone 후 ls 명령어를 통해 프로젝트가 잘 clone이 되었는지 확인합니다.


3. 서버 실행

프로젝트의 서버를 실행시키기 위해 server 디렉토리로 이동하여 npm install 명령어로 필요 모듈을 내려받고, npm start 명령어로 서버를 실행시킵니다.

$ npm install 

$ npm start

다음과 같은 에러가 발생합니다.

위 에러가 발생하는 이유는, 1024번 아래의 포트 번호를 이용해서 서버를 실행하려면 관리자 권한이 필요하기 때문입니다. 관리자 권한으로 서버를 시작하기 위해서는 sudo npm start 명령어를 입력해야 합니다.


$ sudo npm start

우분투에서 서버가 정상적으로 작동했습니다!


4. 테스트

퍼블릭 IPv4 DNS 주소로 접속해 테스트를 진행해봤습니다.
파라미터가 없는 get 요청일 경우 'Hello World'를 출력하도록 되어있는데, 다음과 같이 사이트에 접근할 수 없다는 메시지가 화면에 출력됩니다.


5. 보안그룹 설정

사이트에 접속할 수 없는 이유는, 인스턴스에 대한 보안그룹을 설정하지 않았기 때문입니다.

보안그룹을 설정하기 위해 실행 중인 인스턴스의 보안그룹 이름을 확인하고, 해당 보안그룹에 대한 수정을 진행합니다.

인바운드 규칙은 들어오는 트래픽에 대한 규칙,
아웃바운드 규칙은 나가는 트래픽에 대한 규칙을 말합니다.
우분투에서 실행 중인 서버에 접속하는 것은 우분투 인스턴스로 인바운드 되는 것이기 때문에, 인바운드 규칙을 편집해줍니다.

ssh 유형으로 인스턴스에 접속할 수 있도록 설정되어 있는 것을 확인할 수 있습니다.

규칙 추가 버튼을 눌러서 http 유형으로, 모든 IP에 대해서 접속을 허용하는 규칙을 추가했습니다.


6. 테스트

이번에는 브라우저가 아닌 Postman으로 테스트를 진행했습니다.

get 요청을 보냈을 시에 Hello World라는 문자열이 리턴되는 것을 확인할 수 있습니다.


파라미터와 함께 post 요청을 보냈을 시에, 토큰값을 받아오는 것 또한 확인이 되었네요.


우분투 가상환경에서 서버가 정상적으로 실행이 되고 있다는 것을 확인했습니다!


7. PM2 (Process Manage) 설치

: 백그라운드에서 서버 구동하기 위한 프로그램


저희는 ssh를 통해 우분투 가상환경에 접속했고, 그 환경에서 서버를 구동시켰습니다. 그리고 테스트까지 완료했죠.

하지만 ssh를 종료한다면 어떻게 될까요?
가상환경에서의 node 프로세스가 강제로 종료됩니다. 즉, 쉘을 종료하면 서버가 종료된다는 것이죠.
그것을 방지하기 위해 PM2라는 고마운 녀석을 설치할 것입니다.

PM2를 설치하면 ssh가 종료되어도 node 프로세스는 살아있게 됩니다.
(물론 백그라운드에서 프로세스를 실행하게 하는 명령어가 있지만 그것을 대신 관리해주는 것이 PM2입니다.)


1. 전역에 PM2 설치

다음의 명령어로 서버 접속 상태에서 pm2를 전역에 설치해줍니다. 간단하네요.

$ npm install pm2 -g

2. PM2 명령어로 app.js 실행

프로세스가 테이블 형태로 표시가 됩니다.


알아두어야 할 PM2 명령어

"pm2 start" 프로세스 시작
"pm2 stop" 프로세스 중지
"pm2 restart" 프로세스 재시작
"pm2 ls" 프로세스 목록 보기
"pm2 log" 프로세스 로그 보기


3. authbind 설치 - pm2에 관리자 권한 부여하기

위에서 언급했다시피, 1024번 아래의 포트번호를 이용해서 서버를 실행 시키는 경우, 관리자 권한이 필요합니다. 그렇지 않다면 아래와 같이 status가 error의 상태를 가지며 정상적으로 서버가 구동되지 않습니다.


pm2에 관리자 권한을 부여하기 위해 authbind라는 패키지를 추가적으로 설치해야 합니다.

다음의 명령어를 차례대로 입력하여 authbind를 설치합니다.

sudo apt-get update // apt-get은 우분투의 패키지 매니저 중 하나입니다. 최신 버전으로 update를 진행합니다.
sudo apt-get install authbind // authbind를 설치합니다.
// 관리자 권한을 부여하는 명령어들입니다. 여기서는 깊게 다루지 않겠습니다.
sudo touch /etc/authbind/byport/80 
sudo chown ubuntu /etc/authbind/byport/80
sudo chmod 755 /etc/authbind/byport/80
authbind --deep pm2 update

관리자 권한을 부여했다면, 이미 실행중인 프로세스를 지우고 아래의 명령어로 node 프로세스를 다시 구동합니다.

pm2 delete app.js // 기존 프로세스 지우기
authbind --deep pm2 start app.js // authbind 명령어로 프로세스 시작하기



여기까지 서버 배포, 구동 실습이 완료됐습니다!


profile
HelloBanny

0개의 댓글