deployment/AWS

[AWS] EC2 인스턴스를 이용한 배포 -NextJS, Express

hojung 2022. 8. 11.
728x90
반응형

1. 무엇을 하려하는가?

여태까지 개발은 그저 나의 local 컴퓨터에서만 돌아가는 프로그램이었을 뿐이다. 그렇다면 브라우저 상에서 주소를 입력했을 때 모든 사람들이 나의 프로그램 및 개발한 app을 볼 수 있게 하려면 당연히 배포(deployment)라는 과정이 필수이다. 나는 이 배포를 위해 요즘 가장 보편적이며 많은 기능을 제공하는 AWS의 EC2를 이용해서 NextJS의 app과 Express의 app을 배포해보기로 했다. 

2. 무엇이 필요한가?

배포라는 것은 일반적으로 서버가 필요하다. 즉 컴퓨터가 필요하다는 것이다. 하지만 나의 로컬에서 24시간 앱을 돌리게 되면 메모리도 소비하게 되고 나의 컴퓨터의 수명또한 줄게 되어있다. 또한 내가 배포하려는 앱의 종류와 기능에 따라 나의 컴퓨터에는 그에 적합한 환경이 구성되어 있어야 할 것이다. 이러한 문제를 해결해주기 위해 등장한 것이 aws ec2이다. aws는 기본적으로 클라우드 가상 서버를 제공해주는 역할을 한다. linux나 ubuntu를 사용해 aws ec2 인스턴스에 접근한 후 그 안에서 파일을 git clone받거나 파일질라와 같은 프로그램을 통해 직접 넣어준 후 그 인스턴스 내부에서 파일을 실행시키는 것이다. 그렇게 되면 24시간 돌아가는 클라우드 가상 서버가 만들어지는 것이고 우리는 우리가 만든 app을 나의 로컬 환경이 아닌 aws ec2인스턴스 안에서 돌아가게 할 수 있는 것이다. 물론 유료 서비스이지만 성능이 그리 좋지 않은 클라우드 가상 서버를 이용하게 된다면 프리티어로도 이용할 수 있다. ( 역시 돈이 최고다..)

 

3. 생성

- 1. aws 계정을 만든다. 

- 2. Ec2 서비스로 넘어와서 

인스턴스 시작 버튼을 누른다. 

인스턴스의 이름을 설정할 수 있고 나는 ubuntu를 이용해서 인스턴스에 접근할 것이다. 

 

요금제는 나는 프리티어를 사용할 것이고 키페어는 이 인스턴스에 ssh키를 등록하는 곳으로 이 키가 존재하는 폴더 안에서 ssh명령어를 입력할 경우 해당 ec2인스턴스로 이동할 수 있다. 

-새 키페어를 사용할 때 나는 window환경이므로 ED25519보다는 RSA암호 방식을 선호했다. 이는 비대칭키 알고리즘의 일종인데 나중에 다루게 될 일이 있을 때 다뤄보겠다.

-그리고 putty는 시스템프로그래밍 시간에 다뤄보았지만 나의 노트북에는 openSSH가 설치되어 있으므로 .pem키 형식으로 파일을 생성했다.

-openSSH설치 방법은 구글링을 하면 많이 나오니 각자 컴퓨터에 맞게 설치를 해주면 된다. 그 후 키페어 이름을 설정해주면 키페어 생성은 끝이난다.

 

키페어를 생성하고 등록했으면 네트워크 설정을 해주어야하는데 https와 http통신을 모두 허용해주었다. 만약 백엔드와 프론트엔드간의 https통신이 이미 구현이 되었다면 https만 허용해주어도 무방하다. 

 

나는 우선 http방식으로 구현했고 추 후 https방식을 도입할 예정이기 때문에 우선 둘 다 허용해주었다. 

또한 접속 가능 ip는 위치 무관으로 해주었는데 원래 보안 상 사무실 위치나 집으로 한정하는 것이 일반적이지만 나의 경우 금 방 거주지를 옮길 수도 있을 거 같고 카페나 스터디 카페 같은 곳에서도 작업을 많이 하기 때문에 위치 무관으로 설정해주었다. 

스토리지는 뭐 각자 맞게 프리티어 내에서 설정해주면 된다.  

그 후 인스턴스 시작을 눌러준다. 

그 후 인스턴스 탭으로 이동하면 다음과 같이 아까 생성한 인스턴스들이 모여있는 것을 확인할 수 있다. 그렇다면 이 인스턴스들과 연결하려면 어떻게 해야하는 지 알아보겠다. 

 

4. 연결

연결의 가장 핵심은 아까 인스턴스를 만들면서 생성한 키페어의 키이다. 이 키가 들어있는 폴더 안에서만 ssh와 ubuntu를 통해 ec2에 연결할 수 있다. 

 

나는 우선 아까 생성한 키를 다음 레포지토리 안에 넣어주었다. 

터미널

터미널에서 cd명령어를 통해 키가 존재하는 폴더로 이동한다. 

연결 버튼

연결하고 싶은 인스턴스를 클릭한 후 연결 버튼을 누른다. 

다음 명령어를 복사한다. 

아까 키가 들어있던 레포지토리 안에서 복사한 명령어를 붙여넣기 해주면 다음과 같이 ec2인스턴스에 연결을 할 수 있게 된다. 

 

이 ec2인스턴스는 가상의 컴퓨터와 같다. 물론 git도 설치되어 있다. 따라서 git clone '원하는 레포지토리 주소' 명령어를 통해서 깃허브의 레포지토리 또한 우분투 서버내에 클론 받을 수 있다. 

만약 깃허브의 보안도 https보안이 아닌 ssh를 이용한다면 깃허브의 private key또한 존재할 것이니 git hub private key내용을 vim editor를 이용해서 작성해주면 된다. 그러면 깃허브의 ssh키 또한 이용할 수 있다. 

 

나는 백엔드 인스턴스 프론트 인스턴스가 필요하기 때문에 인스턴스를 2개 생성했다.  

ec2의 단점 중 하나로 무료버전이라면 계속 ip주소가 변하는 단점이 존재하는데 이는 Ec2의 탄력적 ip주소 연결을 통해 해결이 가능하다. 

옆에 사이드바를 확인하며 내리다보면 존재한다. 

탄력적 ip주소 할당 버튼

탄력적 ip주소 할당 버튼을 누른다. 그러면 ip주소가 할당이 되는데 그 후 할당된 ip주소를 누른 후

탄력적 ip주소 연결

탄력적 ip주소 연결 버튼을 누르게 되면 아까 내가 생성한 인스턴스들이 보일 것이다. 

그러면 이 중에 연결하고자 하는 인스턴스를 고르면된다. 

원래는 유료서비스지만 ip하나 당 하나의 인스턴스만이 연결되면 무료로 이용이 가능하다. 

 

그 후 연결한 ip주소를 브라우저에 검색하여 들어가보면 아까 git clone을 통해 내가 받은 레포지토리에서 npm start나 yarn build후 start를 통해 실행되고 있는 페이지가 브라우저 상에 들어올 것이다. 

탄력적 ip를 통해 할당받은 ip에 접속한 모습

 

728x90
반응형

댓글