코드프레소 백엔드 개발자 양성 과정

AWS로 서비스 배포하기 2

클라우드 환경 조성을 마치고 가상 서버를 구축해본다.

H Lee
8 min readMar 2, 2020

이전 글에 이어 아마존 웹 서비스 콘솔 인터페이스를 이용한 클라우드 환경을 마저 조성하고 가상 서버를 배치해 보겠다.

탄력적 연산 클라우드 (Elastic Compute Cloud)

탄력적 연산 클라우드 혹은 EC2는 선불금 없이 종량제로 규모를 조절해 가며 사용할 수 있는 클라우드 연산 서비스이다. EC2를 사용하면 하드웨어는 한 대도 구매하지 않고 몇 분 내에 연산 처리량을 증설하거나 감축할 수 있다. 원격 컴퓨터를 필요에 따라 시간 단위나 심지어는 초 단위로 대여하는 것이다.

이번 배포 실습에서 웹 서버와 데이터베이스 서버가 설치될 곳이기도 한데, 지난 글에선 이 가상의 컴퓨터를 배치할 클라우드 구조를 구축하였다. 복습차 설계도를 한 번 다시 본다.

서울 지역 안에 VPC를 생성해 공공 서브넷과 사설 서브넷으로 분리한 후, NAT 게이트웨이로 사설 서브넷이 외부와 통신할 수 있도록 만들어 준 것을 기억할 것이다. 그럼 그 서브넷이라는 빈 방에 EC2 자원을 배치해 보자.

우선 VPC와는 별개로 구성되어 있는 EC2 대시보드에 접속한 후, 인스턴스 생성 단추를 누른다. 인스턴스란 아마존 클라우드 내의 가상 서버를 뜻한다.

그러면 나타나는 것은 아마존 머신 이미지(AMI)를 선택하는 단계이다. AMI란 아마존 EC2에서 기본 설정(컴퓨터의 운영 체제, 응용 프로그램 등)을 갖춘 가상 머신을 만들어내기 위한 가상 기구이다. 인스턴스를 찍어내기 위한 틀이라고 보면 된다. 틀이라는 개념에 맞게 당연히 한 틀에서 다량의 인스턴스를 찍어낼 수 있고, 자신만의 틀을 만들 수도 있다.

무료 계정으로 사용할 수 있는 AMI 중에 두 번째를 보면, 리눅스 체제 기반에서 자바 언어와 MySQL이 설치되어 있는 틀을 볼 수 있다. 내 프로젝트는 저걸 사용했으니 이걸 골라본다.

다음으로 인스턴스 종류를 지정해준다. 어차피 무료 계정에서 사용할 수 있는 것은 하나 뿐이다. 하지만 각 열이 의미하는 바를 간단히 풀어 설명해본다.

우선 인스턴스들은 큼직한 용도에 따라 분류되어 있다. 내가 선택한 것처럼 연산과 메모리와 네트워크 자원이 골고루 균형 잡힌 범용 인스턴스가 있는 반면, 연산에 최적화되거나 GPU 성능이 특출나거나 저장소 용량과 입출력이 발달한 인스턴스들도 있다. 용도에 맞게 적절히 골라준다.

그 다음 열은 인스턴스 유형이라는 것이다. 이것만 읽을 줄 알면 꽤나 많은 정보를 파악할 수 있다. t는 특정 인스턴스가 저렴한 범용 인스턴스군에 속한다는 의미이며, 2는 출시된 인스턴스 세대 중에 두 번째 세대, micro는 인스턴스 크기가 극소에 해당한다는 뜻이다. 이런 조합으로 만든 인스턴스의 종류는 매우 많다.

인스턴스 상세 설정으로 넘어간다.

여기서는 이 인스턴스가 속할 네트워크와 서브넷을 지정해준다. 이미 생성해둔 social_media_project_vpc와 social_media_project_public_subnet이 보기에 표시되어 선택해주었다.

다음 저장소 설정과 태그는 기본 설정으로 넘어간다. 그러면 보안 그룹 설정이 나온다.

보안 그룹(Security Group)이란 인스턴스를 드나드는 통신을 제어하기 위한 가상 방화벽이다. 이전 글에서 VPC는 두 겹의 보안층이 있다고 했는데, 보안 그룹은 그중 인스턴스 단계를 감싸는 것이다. 다른 보호막으로는 서브넷 단계를 감싸는 네트워크 제어 목록(Network Access Control List, NACL)이라는 것이 있다.

여기서는 social_media_project_public_security_group이라는 이름의 보안 그룹에 기본으로 열려 있는 22번 포트로 통신을 허용하겠다고 설정한다. 소스가 0.0.0.0/0이라함은 아무 IP 주소로부터 이 EC2 인스턴스를 접근할 수 있다는 뜻이다. 일단은 이렇게 두고 인스턴스 생성을 마친다.

로그인 시 과정을 암호화하고 보호하기 위해 사용하는 키페어를 지정해준다. 처음 사용하는 것이라면 키페어를 새로 만들어야 한다.

대시보드로 돌아오면 social_media_project_vpc의 social_media_project_public_subnet에 social_media_project_public_ec2가 생긴 것을 볼 수 있다.

참고로 EC2는 가동 중인 인스턴스에 한해서 요금이 부과되는데, 가격은 지역과 인스턴스 유형 등의 요소에 따라 상이하다. 방금 내가 서울 지역에 생성한 리눅스 인스턴스의 가격은 위와 같다. 하지만 무료 계정의 경우 t2.micro 인스턴스를 일 년간 매달 750 시간 동안 무료로 이용할 수 있다.

이 과정을 반복해 사설 서브넷 안에도 인스턴스를 생성해준다면 다음과 같은 구조를 완성한 것이다. 가상 컴퓨터를 두 대 대여한 꼴이다.

탄력적 IP 주소 (Elastic IP Address)

지난 글에서 사설 서브넷은 NAT 게이트웨이를 통해 인터넷에 접속한다고 했다. 그럼 방금 위에서 생성한, 공공 서브넷에 위치한 EC2 인스턴스는 어떻게 외부와 통신할 수 있을까? 상세 정보를 보면 외부에서 타고 들어올 공공 IP 주소가 없는 것을 볼 수 있다.

이럴 때 사용하는 것이 바로 탄력적 IP 주소이다.

탄력적 IP 주소란 동적 클라우드 컴퓨팅을 위해 고안된 정적 IPv4 주소이다. IPv4라는 것은 네 번째 인터넷 통신 규약이며, 최초로 전 세계적으로 사용된 인터넷 프로토콜이다. 총 12자리의 숫자가 네 부분으로 나눠 구성되어 있다. 한 부분에는 0에서 255까지의 숫자가 들어갈 수 있다.

저번 글에서 보았던 NAT 게이트웨이에 부착되어 있는 IP 주소도 이 형식을 따른다.

탄력적 IP 주소의 특징은 다음과 같다.

  • 공공성 : 탄력적 IP 주소는 공공 IP 주소이다. 그러므로 아마존 클라우드에서 공공 IP 주소가 없는 인스턴스도 탄력적 IP 주소를 부여받음으로써 인터넷을 통해 외부와 통신할 수 있다.
  • 탄성 : 탄력적 IP 주소는 문자 그대로 탄력적인데, 이것은 클라우드상의 소프트웨어나 인스턴스가 장애를 겪을 시 정상적으로 작동하는 인스턴스로 옮겨 부착할 수 있다는 뜻이다.

현재로서는 길이가 128 비트인 IPv6은 탄력적 IP 주소의 형태로 이용할 수 없으며, 인스턴스에 부착하지 않은 탄력적 IP 주소에 한해 요금이 청구된다.

아마존으로부터 탄력적 IP 주소를 발급받는 것을 할당(allocate)이라고 하며, 삭제는 놓아준다고 (release) 표현하고, 인스턴스에 IP 주소를 부착하는 것은 연결한다고 (associate) 칭한다.

그러면 탄력적 IP를 할당 받아보자. 사설 서브넷에는 인터넷을 통한 외부로부터의 접근을 원하지 않으니 공공 서브넷을 위해 하나만 할당 받으면 된다.

마저 할당 단추를 누른다. 간편히 IP 주소를 받았다. 하지만 지금은 할당만 받고 아무 인스턴스에도 연결되지 않은 상태이다. 이러면 요금이 발생한다.

연결하기 단추를 눌러 이 탄력적 IP 주소를 부착할 인스턴스를 지정한다.

social_media_project_public_ec2 인스턴스에 탄력적 IP 주소를 부여하도록 한다.

대시보드에서 다시 인스턴스 상세 보기로 가면 이번엔 탄력적 IP 주소라는 게 표시되고, 이것을 통해 IPv4 형식의 공공 IP 주소가 생긴 걸 볼 수 있다.

이제 공공과 사설 EC2 인스턴스에 각각 접속해 필요한 응용 프로그램을 설치하고 가동하는 일만 남았다.

--

--

No responses yet