nodeJS 서버 AWS에 배포하기 - (1) EC2

🪐 C:on·2022년 1월 12일
1

AWS

목록 보기
1/6

이전 프로젝트는 Google cloud platform의 app engine으로 배포를 진행했었다. 구글의 문서가 깔끔하게 잘 정리되어있어서 진행하는데에 큰 무리는 없었다.

문서가 잘 정리되어있더라도 무언가 필요한게 있을 때, 그런데 관련 내용이 문서의 어디에 있는지 못 찾겠을 때는 어쩔수없이 구글링을 해야한다. 하지만 GCP는 구글링해도 정보가 많이 나오질 않아서 곤혹이었다.

또 무료사용 기한이 3개월 밖에 되지 않는다. 이거 때문에 예전에 IoT서비스 프로젝트할 때 애를 많이 먹었었는데 여기서도 발목을 잡게될 줄은 몰랐다.

그래서 '다음 프로젝트는 무조건 aws로 배포해야지..' 라며 다짐했고 그 다짐을 지금 실현하게 되었다. 그냥 막 정보찾아서 배포하기보단 지금 사용하는 것이 무엇이고 어떤 원리(컴퓨터 구조적인 원리 그런게 아니라 배포 과정,흐름에서 맡는 역할)을 이해하고, 왜 이렇게 설정을 해야하는지 기록해가면서 배포를 해보려 한다.

🔨 인스턴스 생성

가입은 특별한게 있는게 아니니 패스.
대신 무료랑 유료 선택하는 것들은 전부 무료를 선택해주면 된다.

aws콘솔에 로그인하고 왼쪽 검색창에서 EC2를 검색해서 접속한다.

좌측에 보면 인스턴스가 있다. 인스턴스에 접속해준다.

우측 상단에 인스턴스시작을 클릭해서 새로운 인스턴스 생성을 시작한다.

인스턴스란 클라우드의 가상서버이다. 가상이라해서 다른것이 없고, 원격으로 조종할 수 있는 컴퓨터 한대를 대여했다고 생각하면 된다.

AMI를 선택할 건데 유료는 안되므로 왼쪽에서 프리티어만을 체크해준다.
나는 ubuntu server 20.04 64비트를 선택했다.

AMI는 가상서버에 필요한 소프트웨어 정보를 담고있는 탬플릿 이미지이다. OS와 어플리케이션이 포함되어 있어 인스턴스 생성할 때 그대로 설치된다.

인스턴스 유형을 선택하여 CPU와 메모리, 스토리지 용량을 원하는 옵션으로 설정할 수 있다. 하지만 요금 내기 싫으므로 프리티어 사용 가능이 적혀있는 t2 micro를 선택한다.

검토 및 시작을 누르면 키 페어를 선택하는 다이얼로그가 뜬다.

키 페어 없으므로 새 키 페어 생성을 선택하고 이름은 어느 인스턴스의 키 페어인지 알 수 있도록 지정해준다.

키페어 다운로드를 눌러서 잘 저장시키고 활성화된 인스턴스 시작 버튼을 눌러준다.

이렇게 되면 인스타스 생성이 완료된다.


🔨 보안그룹 설정

보안그룹은 트래픽을 제어하는 가상 방화벽 역할을 맡는다. 포트포워딩을 여기서 간단하게 설정해주는 것이다. 너무 편리하다.

다시 EC2 콘솔로 이동하면 왼쪽 아래에 보안그룹이 있다 접속한다.

오른쪽 상단에 있는 보안 그룹 생성을 클릭.

보안 그룹 이름을 설정해주는데 통상적으로 적용될 보안그룹이라면 basic이라고 지정해주면 된다.
난 아무 단어나 썼다.
설명은 쓰고 싶으면 쓰면 된다. 난 쓰기 싫어서 패스~

IP로 접속하게 되면 포트를 따로 지정해주지 않는 경우 기본적으로 80포트로 접속한다고 한다. 그래서 80포트는 열어주되 IPv4(0.0.0.0/0)와 IPv6(::/0)을 각각 열어준다.
뒤에 나오는 모든 설정이 IPv4와 IPv6를 모두 열어줄 것이다.

HTTPS는 443포트를 사용하므로 그에 맞춰 규칙 추가.

국제 표준 문서에 http 기본포트는 80포트이고 https 기본포트는 443포트라고 기술한다. 80포트는 비어있는 포트를 고른것이었고 443포트는 이유불문이다.

4200포트는 개발용 서버 포트, 3000포트는 실제 서비스 서버 포트이다.

❗❗추가적으로 SSH와 MySQL서버도 규칙을 추가해줘야 한다.

최종적으로는 이렇게 규칙이 만들어져야한다.

RDS도 생성해서 사용할 때 이 규칙을 활용하기 위해서 mysql/aurora 유형의 규칙도 추가해준다. 포트는 기본적으로 3306포트이다.

이거 안해줬다가 RDS생성해서 이 보안그룹 적용해주고 접속이 안돼서 한참 해맸었다.

아웃바운드는 자유롭게 나갈수 있도록 모두 열어준다.

생성을 눌러주면 초록생 창에서 생성 알림을 띄워준다.

인스턴스 콘솔에서 생성한 인스턴스를 체크하고 오른쪽 상단의 작업을 누르면 여러가지 메뉴가 내려온다.
그 중 보안을 누르고 보안그룹 변경을 눌러준다.

보안 그룹 검색 창에서 방금 만든 보안그룹의 이름을 검색해서 추가한 뒤 저장한다.

🔨 탄력적 IP 할당

탄력적 IP는 정적 IPv4 주소이다.
나중에 도메인을 인스턴스와 연결해줄 때 DNS에 탄력적 IP 주소를 지정해줄 때 필요하다..

원래 인스턴스 주소는 서버를 잠깐 중지했다가 다시 실행하면 변해버리는 유동성을 가지고 있다. 그 때마다 DNS에 IP주소를 변경해 줄 수 없으니 탄력적 IP를 할당해서 인스턴스와 연결해주어야 한다.

콘솔에서 왼쪽 아래로 내려가서 탄력적 IP를 클릭한다.

탄력적 IP 주소 할당을 클릭한다. 그 다음에 뭐 설정,태그 이런거 뜨는데 따로 만질 것 없으므로 바로 할당을 누른다.

그럼 다시 초록생 알림창이 뜨면서 "할당되었습니다" 한다.
그 아래 탄력적 IP 주소 연결이 같이 뜬다. 클릭한다.
안뜨면 생성한 IP주소 선택해서 상단 작업 메뉴를 클릭해서 IP 주소 연결하는 메뉴를 들어가면 될 듯 하다.

탄력적 IP주소를 연결할 인스턴스를 고르고 연결을 클릭!

이렇게 까지 하면 EC2의 모든 설정이 끝이났다~~

이제 접속해봐야겠다.

🔨 접속

라즈베리파이 ssh연결할 때 putty를 사용했는데 좀 불편했다. 오래돼서 어떻게 사용했고 뭐가 불편했는지 구체적으로 기억은 안나지만 하여튼 불편했다.

요즘엔 모바엑스텀을 많이 사용하는거 같아서 이걸로 접속해보기로 한다.

https://mobaxterm.mobatek.net/download.html

당연히 프리로 다운로드

둘 중 아무거나 선택해도 똑같은 거 설치된다.

왼쪽폴더표시된 공간에 마우스를 옮기고 우클릭을 하면 new session이 있다. 클릭.

가장 왼쪽의 SSH를 클릭.

그러면 두 가지 파트로 설정하는 것들이 나눠지는데 위 파트에서 Remote host는 public DNS를 입력해주고 Specify username은 ubuntu를 입력한다.

아래 Advanced SSH settings를 누르고Use private key를 선택해서 인스턴스 생성에서 다운받은 키 페어(pem)을 등록해준다.


이렇게 뜨면 드디어 접속까지 성공~!😎

0개의 댓글