자 이제부터 EC2에 배포를 해볼 것이다.
우리는 Ubuntu Server를 이용해 실습할 것이다. (프리티어인지 체크!)
+ AMI(Amazion Machine Images) 란?
: EC2 인스턴스를 그대로 저장해서 재사용 할 수 있도록 만든 것.
현재 서버의 하드웨어, 소프트웨어 설정, 어플리케이션 등 모든것을 그대로 사용가능하다.
Amazon Image는 크게 3가지로 나뉜다.
1) private : 개인 (비공개 이미지 파일로 개인만 사용 가능)
2) public : 누구나 (공개된 이미지로 누구나 사용 가능)
3) Marketplace : 이미지를 판매하고 구매 가능
우리는 프리티어인 두번째걸로 체크!
우리가 사용하는 코드에서 bin/www
경로를 보면 3000번 포트를 사용하는 것을 확인할 수 있다.
사진에는 없지만 3000번 포트에 대한 접근도 열어두도록하자.
기존 키 페어 또는 새 키 페어를 생성하라고 뜨는데, 기존의 키가 있다면 기존 키를, 없다면 새 키를 만들어 주면 된다.
새키를 만들 때는 RSA
로 설정하고 이름을 작성한 뒤 키 페어 다운로드
를 누른다.
이때 만든 키는 아주아주 중요하므로 잘 저장해놓도록한다.
(안내 문구에도 적혀있듯, 본인의 EC2에 접근하기 위해서는 키페어로 인증을 하여야하고, 그게 없으면 로그인 할 수 없다.)
이대로도 EC2를 사용할 수 있지만, EIP를 설정하면 더 편리하게 EC2를 사용할 수 있다.
Elastic IP(탄력적 IP)란?
: 탄력적 IP 주소는 동적 클라우드 컴퓨팅을 위해 고안된 고정 퍼블릭 IPv 주소이다.
모든 인스턴스 또는 네트워크 인터페이스에 탄력적 IP주소를 연결 가능하다.
프리티어에서는 계정당 하나의 EIP를 지원한다.
EIP를 사용하는 이유?
: EIP없이 EC2 인스턴스를 생성하여 서버를 실행시키면 동적 IP를 할당해준다.
인스턴스를 중지-실행 시킬때마다 IP가 변경되어 버린다. 이게 왜 귀찮냐면, 요청할때마다 IP주소를 바꿔입력해야하는 번거로움이 있기 때문이다.
EIP 사용 요금제 (주의사항)
: AWS 프리티어에서는 EIP 한 개는 무료로 사용 가능하다.
해당 인스턴스에 추가로 EIP를 연결하게 되면 추가 EIP당 시간에 비례하여 요금이 부과된다.
EIP를 사용하면서 주의해야할 점은 EIP를 연결한 EC2 인스턴스를 종료하게 되면 오히려 돈이 발생한다는 점이다.
- EIP가 EC2 인스턴스에 연결되어 있는 경우
- EIP가 연결된 인스턴스가 실행중인 경우
- 인스턴스에 연결된 EIP가 하나뿐인 경우
위의 세가지 경우를 제외할 때 돈이 부과되게 된다. 따라서 EIP를 EC2와 연결하지 않고 켜놓거나, EIP과 연결된 EC2를 종료시키는 행위를 주의하자!
putty gen
을 연다.RSA
로 설정을 한 상태에서 Load를 누른다.Save Private Key
를 누르고, 경로를 지정해주면 .ppm
으로 변환된 키가 생성된다.putty
를 연다.만들어 뒀던 EC2를 확인해보면퍼블릭 IPv4 주소
를 알 수 있다. (정상적으로 EIP를 연결했다면, EIP의 주소일 것이다.)
ubuntu
를 입력해준다.// 우분투 관리 소프트웨어 최신버전 업데이트
sudo apt-get update
//깃 설치
sudo yum install git
sudo apt-get install git
//깃 설치 확인
git --version
//프로젝트 가져오기
git clone 본인 repository주소
파일이 없다면 https://github.com/soleu/AWS_Study에서 pull을 받아서 실습해보도록 하자.
위와 같은 결과가 나오지 않고 권한 문제가 발생한다면, 아래 코드를 입력하고 비밀번호를 두번 입력한다.
ssh-keygen -t rsa -C "깃허브메일주소"
package.json
경로까지 들어가서 yarn start
를 하여 서버를 실행시키면 된다.여기까지 오면 EC2 배포가 완전히 끝난 것이다!
배포한 EC2를 테스트 해보자.
EC2로 올린 서버에 접근하는 URI는 아까 EC2로 접속할 때 사용했던 IPv4 주소를 사용한다.
내 경우에는
http://13.209.129.17:3000 이 base URL이 된다. 보안 그룹을 필자와 동일하게 설정하였다면 중간 IPv4주소만 본인 것으로 바꿔주면 된다.
그 뒤로는 localhost:3000/api/user
처럼 본인이 만든 경로대로 api를 호출하면 된다.
postman으로 테스트 해보면 로컬로 호출할 때와 같은 결과를 확인 할 수 있다.
우리가 방금과같이 EC2를 putty를 사용해 ubuntu로 서버를 켜게되면 putty를 닫으면 서버도 종료되게 된다.
우리의 서비스를 계속 이용하게해야하는데 그렇다고 컴퓨터를 24시간 내내 켜두고 있을 수는 없지않은가?!
그럴때 필요한 무중단 배포!
무중단 배포를 하게되면 특정 명령어를 키기 전까지는 서버를 계속 유지할 수 있게 해준다.
대표적인 무중단 배포 명령어는 pm2
와 nginx
가 있다.
//pm2 설치
npm install pm2 -g
//pm2 시작
pm2 start ./bin/www --name "원하는 이름명"
//모니터링
pm2 monit
//목록 확인
pm2 list
pm2로 띄워보고 postman으로 결과 확인해보자.
배포 자동화(Deployment Automation)?
: 이전 장에도 언급했듯, 개발 사이클은 대부분
개발
- 테스트
- 배포
의 단계를 거친다. 중간마다 추가,수정을 하고 다시 배포단계를 거쳐야하는데 이 부분이 생각보다 번거롭다고 느끼는 시점이 온다.
이러한 불필요한 배포라는 반복작업을 자동화시키는 것을 배포 자동화라고한다.
자동화의 개념 두가지
CI(Continuous Integration, 지속적인 통합)
: 개발을 하면서 코드에 대한 통합
을 지속적으로 진행함으로서 품질을 유지하자는 개념
CD(Continuous Deployment, 지속적인 배포)
: 소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 지속적으로 관리하자는 개념
간단히, CI = 빌드 및 테스트 자동화, CD = 배포 자동화
라고 기억해도 무방하다.
젠킨스! 써본사람은 없어도 한번만 쓴사람은 없다!
: 젠킨스(Jenkins)는 빌드, 테스트,배포 등의 지속적인 통합(CI)을 자동화 해주는 툴이다.
자동화까지는 심화단계로 개념만 먼저 알아둬도 추후에 많은 도움이 될 것이다.
현재는 EC2의 원리나 간단한 사용방법에 대해서만 이해해도 좋을 것 같다.
그럼 20000!