클라우드 컴퓨팅과 API의 역할, 대표적인 컴포넌트

클라우드 컴퓨팅? 그게 뭐야?

클라우드 컴퓨팅은 IT 자원이 필요할 때 즉시 사용할 수 있는 환경을 의미한다.

공용 클라우드와 사설 클라우드를 어떤 차이가 있나?

목적이 다르다.
공용 클라우드는 IT 리소스를 제공하고 수익을 버는 것!
사설 클라우드는 자사에 IT 리소스를 제공하는 것이지만 수익을 위한 것이 아니다.

비용이 다르다.
공용 클라우드는 IT 리소스를 사용하는 만큼만 지불해서 하드웨어와 관련된 비용 문제가 없다.
사설 클라우드는 하드웨어 비용이 크게 든다.

IaaS, PaaS, SaaS가 뭐지?

SaaS : 소프트웨어를 제공 -> 바로 사용!
PaaS : 플랫폼 (개발 환경, 프레임워크)를 제공 -> 바로 개발!
IaaS : 인프라(서버, 네트워크, 스토리지, OS)를 제공 -> 자신만의 서비스 인프라 구성!

컴포넌트 추상화는 뭐지?

클라우드 인프라 서비스는 인프라 리소스를 가상화하여 하드웨어와 분리한다.
리소스를 다룰 때 하드웨어 문제를 신경쓰지 않아도 된다.

컴포넌트 추상화는 하드웨어와 분리되어 사용자의 요구사항을 인프라로 구현하도록 돕는 개념이다.
요구사항을 하드웨어를 통해 구축하는 것보다 요구사항 자체를 컴포넌트에 전달하면 실제 구현을 알아서 적용되도록 한다.

이렇게 요구사항을 컴포넌트를 통해 추상화 해놓으면 컴포넌트를 통해 클라우드 환경에서 시스템 구축 과정을 표준화 할 수 있게 된다.

클라우드 컴퓨팅을 활용하기

Iaas에서 컴포넌트를 활용해서 서비스 인프라 구축을 표준화할 수 있게됐다.
클라우드는 API를 통해 리소스를 제어할 수 있게 한다. 이를 통해 시스템 구축부터 서버의 설치나 네트워크결 연결까지 자동화할 수 있다.

클라우드의 대표적인 컴포넌트

테넌트

테넨트는 세입자다. AWS로 치면 사용자 계정이 해당된다.
하나의 계정에 여러 시스템을 관리할 수 있다.
테넨트는 비용 청구의 단위가 된다.
테넨트는 가상 네트워크, 가상 머신 인스턴스, 가상 스토리지 끼리만 서로 연결 가능하다.
또한 여러 테넌트를 합쳐서 멀티 테넨트를 하나의 테넨트로 쓸 수 있다. (AWS Organization)

리전

클라우드 인프라를 지역단위로 묶어서 관리하기 위해 등장한 개념이다.
리전은 각각 독립된 환경이라 여러 리전을 걸친 가상 네트워크를 구현할 수 없다.
즉 가상 네트워크는 리전별로 독립된 형태로 만들어진다. 이런 가상 네트워크를 VPC라고 한다. 한 리전에 여러 VPC 가능하다.

다른 리전에 DR

다만 다른 리전에 DR 환경을 구축할 수는 있다.

DR : disaster recovery 서울에 재난이 생기면 시드니에 동일한 환경을 가진 시스템을 작동시키는 것.

이때 퍼블릭 IP의 범위가 달라질 수 있어서 DNS에 IP를 업데이트 해줘야 할 수 있다.
환경 뿐만 아니라 데이터도 다른 리전에 역제해놔야 한다.
이때 오브젝트 리소스를 활용한다. 오브젝트 리소스는 리전에 종속되지 않기 때문이다!

가용영역

리전이 지역이라면 가용 영역은 그 리전에 속한 데이터 센터라고 이해하자.
(AWS의 ap-northeast-2a 같은 것, 오픈 스택에서는 데이터 센터 안에서 가용 영역을 더 나눌 수 있다고 한다.)
다른 가용영역에 있는 가상 머신 인스턴스와 블록 스토리지는 서로 연결할 수 없다.
(물론 네트워크를 통한 연결은 된다. 블록 스토리지를 마운트 하는 행위 같은 연결이 안된다는 의미다.)

네트워크 리소스

라우터 (그냥 공유기)

독립된 가상 네트워크(VPC)는 공유기로 구성한 LAN과 같이 외부의 접근이 차단된 네트워크와 비슷하다.
가정용 LAN을 인터넷과 연결하기 위해서는 인터넷 라우터가 필요하다.
클라우드 환경에서도 가상 네트워크와 물리적인 외부 네트워크를 연결하는 가상 라우터가 있어야 한다.
가상 네트워크에서는 LAN과 같이 프라이빗 IP주소를 사용한다.
외부 네트워크와 통신할 때는 가상 라우터의 NAT 기능을 사용해서 Public IP로 변환한다.
(NAT는 네트워크 계층 포스트를 통해 알아보자.)

AWS에서 VPC를 만들면 Internet Gateway가 생기는데, Internet Gateway가 라우터 역할을 한다.

스위치

가상 스위치는 가상 라우터와 가상 머신 인스턴스의 가상 NIC가 연결되는 지점
가상 스위치는 물리 스위치와 다르게 포트 제한이 없다.
(물리 스위치는 포트가 부족하면 허브를 두거나 스위치를 더 둔다.)
가상 스위치는 가상 NIC를 써서 포트 문제를 해결한다. (AWS에서는 ENI. 인스턴스가 올라갈 때 ENI가 할당된다)
가상 인스턴스와 연결해야 할 때 포트가 추가 → 해당 포트에 서브넷 범위 안에서 사용할 수 있는 IP 주소 할당 → DHCP 방식으로 가상 NIC에 연결됨

서브넷

가상 스위치에 해당하는 컴포넌트를 서브넷이라고 한다.
가용 영역 별로 서브넷을 구성 할 수 있다.
가상 스위치에 하나의 서브넷이 할당된다.
서브넷은 가상 머신 인스턴스가 사용할 수 있는 사설 IP 주소의 범위

AWS는 가상 스위치과 서브넷을 합쳐서 서브넷이라고 부른다.
AWS에서는 하나의 가상 스위치(서브넷)이 하나의 가용 영있에 할당.

라우터는 집이고 서브넷은 집안에 방이라고 생각하면 된다.

공인 IP 주소

사설 IP주소를 가상 라우터의 NAT 기능을 통해 공인 IP(퍼블릭)로 변환하는 방식
이걸 IP 마스커레이딩이라 한다. (외부로 통신할 때 나의 사설 IP를 사설 라우터의 공인 IP로 변환!)
이런 마스커레이딩은 내부에서 외부로 통신할 수는 있지만, 외부에서 내부의 서버로 통신은 안된다!!

결국 모든 사설 IP(private ip)를 같은 공인 IP로 변환하여 외부 네트워크에 통신한다.
이 방식은 private ip가 외부 접근은 되지만 외부에서 사설 ip접근은 안된다.

AWS의 엘라스틱 IP

미리 개별적으로 확보해둔 퍼블릭 아이피를 라우터가 가상 인스턴스에 할당 (즉 공인 IP를 private ip에 매핑하는 방식)
내부 → 외부, 외부 → 내부 모두 가능하다.
단 리전마다 따로 확보해야 한다. 다른 리전에서 재사용 불가.

시큐리티 그룹

가상 머신 인스턴스가 주고받을 네트워크 패킷을 필터링하는 기능
아이피 포트 뿐만 아니라 프로토콜 종류를 통해 필터링도 가능하다.
여러개의 가상 스위치에 접속하고 싶으면 여러 가상 NIC가 있어야되고 각 가상 NIC는 스위치 포트에 접속하러 갈 때 시큐리티 그룹을 설정해줄 수 있다.

시큐리티 그룹과 비슷한 방식으로 라우팅 테이블에서도 필터링을 해줄 수 있다.
다만 라이퉁 테이블은 서브넷에 접속하기 전에 작동하고, 시큐리티 그룹은 인스턴스에 접근하기 전에 작동한다.

서버 리소스

템플릿 이미지

가상 머신 인스턴스를 기동하기 위해 게스트 OS가 설치된 기동 디스크가 필요하다.
이 기동디스크를 만들어주는 애가 템플릿 이미지.
템플릿 이미지가 다운로드 되서 가상 디스크 형태로 만들어지고 가상 머신 인스턴스가 가상 디스크를 연결해서 사용

루트 디스크와 임시 디스크는 가상 머신 인스턴스를 종료하면 날라간다. (남기고 싶으면 블록 스토리지를 사용할 수 있다.)
만약 루트 디스크에 저장된 어플리케이션을 보존하고 싶으면 스냅샷을 남기자. (EC2로 DB를 운영할 경우 매일 데이터베이스의 스냅샷을 남길 수 있다.)
스냅샷은 루트 디스크를 복제하고 템플릿 이미지로 만든다.

네트워크 접속과 시큐리티 그룹

인스턴스의 가상 NIC가 네트워크와 연결되려면 가상 스위치에 연결되어 있어야 한다! (그래야 가상 스위치가 가상 라우터와 연결이 되니까)

인스턴스 하나에 여러 NIC를 연결할 수 있다.
다만 컨테이너를 인스턴스에 사용할 때는 ECS ENI Trunking을 유의하자.

시큐리티 그룹은 NIC에 적용된다! 즉 한 인스턴스라도 NIC마다 다르게 시큐리티 그룹을 적용할 수 있다.

로그인 인증과 키페어

기본적으로 SSH의 공개 키 인증 방식이 사용한다.
테넌트 이용자는 접속 전용 키페어를 만든다.
공개키는 클라우드 환경에 등록 & 개인 키는 사용자가 다운로드
가상 머신 인스턴스에 템플릿 이미지로 게스트 os를 설치할 때 공개키도 같이 설정된다.

블록 스토리지

가상 머신 인스턴스가 종료되어도 내용을 보존하는 영속적인 디스크 영역(AWS에서는 EBS라고 부름.)
가상 머신 인스턴스는 어플리케이션을 가동하는 가상 컴퓨터.
가상 머신 인스턴스에 블록 스토리지를 마운트 해서 보통의 물리적 디스크 디바이스처럼 쓸 수 있게 된다.
블록 스토리지는 여러 가상 머신 인스턴스에도 마운트할 수 있다.

블록 스토리지에 있는 게스트 OS로 가상 머신 인스턴스를 가동하는 방법.

AWS에서는 EBS Boot
미리 볼륨을 만들어 놓고 템플릿 이미지를 복제해서 가상 머신 인스턴스에 연결.
다른 가상 머신 인스턴스에 연결해도 이어서 할 수 잇음

오브젝트 스토리지 리소스

파일 단위로 데이터를 저장하는 데이터 스토어.
HTTP, HTTPS로 사용하는 파일서버
테넨트가 생성한 S3 버킷은 모든 리전과 가용영역에서 접근 가능!
컨테이너(버킷)은 디렉토리처럼 계층적 구조는 되지 않지만 파일 이름을 디렉토리처럼(abc/file) 묘사해서 비슷한 효과를 낼수 잇다.
키와 값으로 메타 데이터를 부여할 수도 있다.

버저닝

컨테이너에서 관리하는 오브젝트에 버전 번호를 붙여서 관리하는 기능.
롤백같은 기능을 수행할 수 있다.

백업

블록 스토리지의 볼륨을 여러 블록으로 분할해서 하나의 파일 형태로 간주하여 오브젝트 스토리지에 저장.
리전이나 가용영역을 뛰어넘어서 복원할 수 있다.

웹 애플리케이션 시스템 구축 예시

여러 가용 영역으로 가용성 확보

AWS는 VPC별로 가상 네트워크가 만들어지고, 가상 네트워크 속 가용 영역 별로 가상 스위치(서브넷)이 생기고,
각 사용 용도에 따라 네트워크를 분리하기 위해 가상 스위치(서브넷)를 만들어서 통신할 수 있다.
가상 머신 인스턴스에 해당 스위치(서브넷)를 통해서만 통신할 수 있도록 하면 접근을 제한 할수 잇다.
다른 가용영역에 현재 가용영역과 동일한 환경을 구축해놓고 문제가 생기면 해당 가용영역으로 접근하도록 로드밸런싱을 해주거나 DNS 설정을 바꿔줘야 한다.
가용 영역을 사용한 정적 안정성

오브젝트 스토리지로 데이터 지키기

DB 서버가 관리하는 데이터를 블록 스토리지 볼륨에 저장시키면 가상 머신 인스턴스가 잘못되어도 데이터를 지킬 수 있다.
근데 블록 스토리지가 잘못될 경우를 예상해서 이마저도 오브젝트 스토리지에 백업해두면 된다.
그런데 볼륨 백업은 오브젝트 스토리지로 전송해야 되니까 좀 느릴 순 있다.

백업하기 전에는 볼륨을 가상 머신 인스턴스에서 분리해야 됨.
이때는 당연히 디비 서버가 요청을 처리하지 못한다.
그러면 볼륨의 스냅샷을 떠서 백업하도록 하면 된다.
스냅샷을 만들때도 인스턴스에서 볼륨을 분리하지만 시간이 적게 든다.

가상 머신 인스턴스에 블록 스토리지를 연결해두고 오브젝트 스토리지에 백업해둔다.
가용 영역 전환할 때 해당 가용 영역의 블록 스토리지에 오브젝트 스토리지의 데이터를 통해 데이터 구축 가능하다.

다른 방법으로는 데이터베이스가 네트워크를 통해 동기화하는 기능을 사용할 수 있다.

Share