<그림으로 배우는 클라우드 인프라와 API의 구조> 를 읽고 새롭게 배우게 된 점을 정리해보았습니다.
🔍 큰 개념
1. 테넌트 (Tenant)
- 사전적 의미 : 세입자
- 클라우드 서비스 이용자는 자신만의 테넌트 환경을 갖게 됨
- AWS의 경우 하나의 AWS 계정이 테넌트에 해당
2. 리전 (Region)
- 각 지역별로 분산 운영되는 클라우드 인프라의 한 거점 지역 -> AWS 웹 서버가 위치하는 지역
- 서울 리전, 도쿄 리전, 시드니 리전 ...
- 각 리전들은 서로 독립된 환경
- 리전 별로 가상 네트워크 구성은 가능하나 여러 리전에 걸친 가상 네트워크 구성은 불가
- 재해복구(DR) 환경을 구축하면 한 리전의 기능이 정상적이지 않은 경우 다른 리전의 시스템으로 전환하여 운영할 수 있음
- DR 환경을 위해서 각 리전에 똑같은 애플리케이션 데이터를 복제해 둬야 함
- 오픈스택도 AWS와 마찬가지로 리전 기능 사용 가능 -> 리전 단위가 구축하는 경우마다 다를 수 있음
3. 가용 영역 (Availablity Zone, AZ)
- 하나의 리전에는 여러 개의 데이터 센터가 분산된 형태로 구성됨
- 이러한 데이터 센터의 클러스터를 가용 영역이라고 부름
- AWS의 경우 한 리전당 최소 2개 이상의 AZ가 존재함
🌐 네트워크 리소스
각 리전의 가상 네트워크를 만들기 위해 필요한 컴포넌트 구성요소
1. 라우터
- AWS에서는 하나의 리전에 여러 개의 VPC 존재
- 오픈스택에서는 테넌트별로 하나의 리전에 단 하나의 가상 네트워크만 존재
가상 네트워크란, 가정에서 공유기로 구성한 LAN과 같이 외부의 접근이 제한된 사설 네트워크이다.
클라우드 환경에서는 테넌트 안의 가상 네트워크와 물리적인 외부 네트워크를 연결하기 위해 가상 라우터가 존재해야 한다.
- 가상 네트워크에서는 사설 IP 주소 (private IP address) 사용
- 외부 네트워크와 통신 시에는 퍼블릭 IP 주소 (public IP address) 로 변환하여 사용
2. 스위치 (서브넷)
- 가상 라우터와 가상 머신 인스턴스의 가상 NIC (Network Interface Card) 가 연결되는 접점
- 하나의 가상 스위치에 하나의 서브넷 할당 (서브넷 : 가상 머신 인스턴스가 사용할 수 있는 사설 IP 주소의 범위)
- AWS의 경우, 가용 영역(AZ)마다 가상 스위치 배치, 서브넷과 스위치를 통합된 개념으로 사용
- 오픈스택의 경우 여러 가용 영역에 걸쳐 가상 스위치 배치
물리적인 환경에서 스위치를 연속으로 연결하여 접속 포트를 늘리는 반면, 클라우드 환경에서는 가상화된 스위치를 통해 논리적으로 접속 포트 개수를 얼마든지 늘릴 수 있다.
3. 퍼블릭 IP 주소
클라우드 환경에서 외부와 통신하기 위하여 가상 라우터의 NAT 기능을 통해 사설 IP를 퍼블릭 IP로 변환
두 가지 변환 방법이 있다.
- IP 마스커레이딩 (IP Masquerading) : 가상 머신 인스턴스가 외부 네트워크와 접속할 때 가상 라우터가 할당 받은 퍼블릭 IP를 공유하는 방식
- Elastic IP 또는 Floating IP : 미리 개별적으로 확보해 둔 퍼블릭 IP 주소를 가상 머신 인스턴스에 할당하는 방식 (AWS와 오픈스택이 사용하는 방식)
4. 보안 그룹
보안 그룹은 가상 머신 인스턴스가 외부 네트워크와 연결할 때 필터링을 제공함.
각 인스턴스별로 필터링 규칙을 적용하여 HTTP(80), HTTPS(443), SSH(22) 포트 등을 어디에 허용할지 정할 수 있다.
☁️ 서버 리소스
1. 템플릿 이미지
가상 머신 인스턴스를 만들 때 빠른 시작을 위해 사전에 준비되어 있는 이미지 파일.
선택된 이미지는 가상 디스크 형태로 만들어지고 가상 머신 인스턴스에 연결됨.
2. 인스턴스 유형
가상 머신 인스턴스의 컴퓨팅 성능 및 용량에 따라 나누어짐.
컴퓨팅 성능, 메모리, 스토리지, 네트워크 등 여러 기능별 성능에 따라 등급이 세분화되어 있다.
AWS에서는 클라우드 사용자가 새로운 인스턴스 유형을 직접 만들지 못함.
오픈스택의 경우 테넌트 관리 권한이 있는 사용자인 경우 해당 테넌트 안에서 인스턴스 유형 생성, 변경 가능
- Ephemeral Disk : 루트 디스크와 임시 디스크가 해당. 가상 머신 인스턴스를 종료하거나 파괴하면 해당 디스크 영역의 데이터가 함께 사라짐.
💽 블록 스토리지 리소스
블록 스토리지는 가상 머신 인스턴스가 종료되어도 내용을 보존할 수 있도록 영속적인 디스크 영역을 제공한다.
AWS에서는 ESB(Elastic Block Storage), 오픈스택에서는 블록 스토리지라고 부름
1. 블록 스토리지 기본 기능
블록 스토리지의 기본적인 사용 방법과 순서는 다음과 같다.
- 신규로 블록 볼륨을 생성한다
- 가상 머신 인스턴스에 연결해서 데이터 영역으로 사용한다
- 스냅샷을 생성한다
- 스냅샷을 복제해서 새로운 블록 볼륨을 생성한다
스냅샷이란?
스냅샷은 마치 사진 찍듯이 특정 시점에 스토리지의 파일 시스템을 포착해 보관하는 기술을 의미합니다. Windows OS의 복원 지점과 같이 장애나 데이터 손상 시 스냅샷을 생성한 시점으로 데이터를 복구할 수 있습니다. - 가비아
2. 블록 스토리지에서 가상 머신 인스턴스 기동하기
템플릿 이미지를 복제한 루트 디스크 사용 외에도 블록 스토리지의 볼륨에 있는 OS로 가상 머신 인스턴스를 기동하는 방법이 있음.
AWS에서는 EBS Boot, 오픈스택에서는 Boot from Volume 이라고 부름
💾 오브젝트 스토리지 리소스
오브젝트 스토리지는 파일 단위로 데이터를 저장하는 저장소이다.
HTTP/HTTPS 프로토콜을 사용하는 파일 서버 개념
AWS에서는 S3 서비스에 해당한다
1. 오브젝트 스토리지 기본 기능
- 파일 단위로 데이터를 저장하는 기능 제공
- 덮어쓰기를 지원하지 않으므로, 파일 갱신시에는 저장된 파일을 먼저 지우고 새로운 파일을 저장해야함
- 동영상과 같은 정적 콘텐츠 파일 저장에 적합
- 저장소에 저장되는 각 파일을 오브젝트라고 부름
- 특정 리전에 국한되지 않고 사용할 수 있음
오브젝트 스토리지에 파일을 저장하려면 먼저 컨테이너를 생성해야 한다.
S3 버킷이 컨테이너에 해당하며, 리눅스 디렉터리와 비슷하지만 컨테이너 내 컨테이너를 만드는 계층 구조를 지원하지 않는다.
가상의 디렉토리명으로 파일명을 수식할 수는 있음. (예: dir01/file01)
2. 버저닝과 정적 웹 호스팅
버저닝(versioning) : 컨테이너에 저장된 오브젝트에 버전 번호를 붙여 관리하는 기능
정적 웹 호스팅 : 오브젝트 스토리지를 간이 웹 서버처럼 사용하는 기능
- 컨테이너 접근 권한을 공용으로 설정하고 그 안에 정적 HTML 파일 저장
- GitHub Pages 같은 기능 (github.io)