본문 바로가기

카테고리 없음

아마존 웹 서비스를 이용한 글로벌 서비스 인프라 설계 Chap1

AWS를 이용하면 소프트웨어를 다루는 것처럼 CPU, 메모리, 디스크, 네트워크 자원을 자유롭게 사용할 수 있다.

모든 클라우드 자원은 AWS API를 이용해서 소프트웨어를 다루듯 간단하게 관리(Create, Remove, Update, Monitoring) 할 수 있다.

탄력적으로 자원을 운용할 수 있는 점이 장점이다.

AWS를 수월하게 운영하려면 소프트웨어 개발과 인프라 모두에 대한 통합된 지식이 있어야 한다.

클라우드 관점에서 3가지 분류의 서비스 제공

  • IaaS : E2C, ELB, VPC 등
    • 가장 기본이 되는 서비스, 시스템과 네트워크 같은 물리적인 인프라를 서비스 형태로 제공한다.
    • 운영체제를 직접 제어하고 그 위에 소프트웨어를 올려서 서비스하기 위해서
  • SaaS : RDS(데이터 베이스), SQS(메시지 큐), 엘라스틱 캐시(캐시 서비스) 등
    • 미리 설치와 설정을 끝낸 상태로 제공, 사용자는 운영체제와 소프트웨어 설치는 신경 쓰지 않아도 된다. IaaS에 소프트웨어만 설치하면 SaaS가 된다.
  • PaaS : 엘라스틱 빈스톡
    • SaaS를 플랫폼 개념으로 확대한 서비스

EC2 (Elastic Compute Cloud)
Cpu, 메모리, 디스크를 포함한 서버 컴퓨터

AMI

AWS는 다양한 종류의 리눅스와원도 운영체제를 지원한다.
개인에 맞게 EC2인스턴스를 생성할 수 있다.
AMI로부터 작동하는 운영체제가 뜨는데, 이를 인스턴스라고 한다.

ex) 웹 서비스를 만드는 경우
일반적으로 웹 서비스는 웹 서버 앞 단에 로드 밸런서를 배치해서 두 개 이상의 웹 서버를 로드 밸런싱하는 방법으로 분산 처리와 높은 가용성을 확보한다.

기본 네트워크 구성 요소

인프라 관리의 절반은 네트워크를 이해하고 이를 바탕으로 한 네트워크의 구성과 네트워크를 구성하기 위한 도구의 유기적인 운용에 있다고 해도 과언이 아니다.

Public IP와 Elastic IP

EC2 인스턴스를 만들면 기본적으로 AWS 내부에서만 사용할 수 있는 사설 IP(Private IP)가 할당된다.

  • 옵션으로 공인 IP(Public IP) 할당을 요청할 수 있다.
    • 인터넷에서 인식할 수 있는 공인 인터넷 주소로 Public IP 가 있어야 인터넷과 연결된다

Elastic IP(EIP)는 public ip와 다르다. EIP는 사용자 소유로 고정된다.
aws 콘솔에서 EIP를 요청하면 public ip 주소가 할당되는데, 이 IP는 EC2에도 Elastic 하게 붙이거나 뗄 수 있다.

public ip는 고정된 자원이 아니므로 인스턴스가 종료되면 할당된 public ip가 사라지고 인스턴스를 시작할 때 임의의 public ip가 할당된다.
ip가 수시로 바뀔 수 있으므로 일반 사용자를 대상으로 하는 인터넷 서비스에는 사용할 수 없다.

  • 인터넷 서비스 목적으로 인스턴스를 사용한다면 반드시 EIP를 할당받아서 사용해야 한다. 관리를 위한 목적이라면 public ip 사용 가능

ELB

웹 서버군 앞에서 ELB를 두고 사용자의 요청을 분산하는 구조
로드 밸런서를 이용해 높은 가용성과 확장성을 있는 인프라 구성
aws에서 제공하는 로드 밸런서 서비스
장점 : 편리성, 오토 스케일링 기능에 따른 탄력성, 트래픽에 따른 적절한 자원 할당

VPC (Virtual Private Cloud)

vpc를 이용하면 인터넷상에 인터넷과 격리된 프라이빗 네트워크를 구축할 수 있다.
개인 네트워크처럼 자유롭게 서브넷을 나누고, 네트워크 정책을 만들고 여기에 인스턴스와 데이터베이스를 배치할 수 있다.
인터넷으로부터 격리된 상태이므로 보안도 확보할 수 있다.

시큐리티 그룹

인터넷으로부터 네트워크의 접근을 제어하는 데 사용한다. 방화벽과 매우 유사하게 동작한다.
포트와 ip 주소를 기반으로 inbound outbound 트래픽에 대한 접근을 허용하거나 차단할 수 있다.

  • inbound : 바깥에서 인스턴스로 들어오는 트래픽을 의미
  • outbound : 인스턴스에서 바깥으로 나가는 트래픽을 의미
    리눅스 운영체제의 방화벽 소프트웨어인 iptables와 유사하게 작동한다.

웹 서버의 경우 80 포트와 443 포트는 모든 IP(0.0.0.0/0)에 대해서 허용해야 한다.
반면 22번 포트는 특정 IP(개발자의 IP 등)에 대해서만 허용해야 한다.
이 외의 모든 포트는 막는 (DENY : ALL 방식으로 외부로부터의 침입에 대응할 수 있다.)
Was는 웹 서버로부터의 연결만 허용하고, 다른 모든 연결을 차단해야 한다.
웹 서버와 was는 각 경우에 동일하게 적용되므로 웹 서버와 was에 대한 규칙을 따로 설정해서 저장할 수 있다.
웹 서버가 추가되면 새로운 시큐리티 그룹을 생성할 필요 없이 기존에 생성한 웹 서버 시큐리티 그룹에 연결하기만 하면 된다.

_ VPC 네트워크

EC2인스턴스는 AWS에서 제공하는 VPC에 만들 수 있다.
VPC는 각 사용자에게 제공되는 격리된 네트워크 공간으로 인터넷 공간에 나만의 개인 네트워크를 만들 수 있는 기능이다.
VPC를 이용해 최대 /16 범위의 네트워크 구성 가능. 총 65,531개의 ip를 관리할 수 있는 거대한 네트워크 대역으로 /16 ~ /28 범위로 나눠 여러 개의 서브넷을 생성할 수 있다.
VPC 네트워크를 관리하려면 인터넷 게이트웨이를 비롯한 CIDR block과 IP서브넷 등 구성 요소에 관한 지식이 필요하다.

인터넷 게이트웨이

VPC는 인터넷으로부터 격리된 네트워크 공간이다. 따라서 인터넷과 통신하려면 인터넷과 VPC 네트워크를 중계하는 네트워크 구성 요소가 필요하다
이 네트워크 구성 요소를 인터넷 게이트웨이라고 한다. 인터넷 공유기라고 보면 된다.
IGW는 관리할 수 있는 자원이다.
VPC를 만들고 나서 인터넷 게이트웨이를 추가하거나 삭제할 수 있으며, 필요하다면 하나 이상의 IGW를 만들 수도 있다. (두 개의 인터넷 게이트웨이를 배치해 트래픽 분리)
트래픽을 분리하면 견고한 보안 정책을 확립할 수 있다.

VPN 가상 사설망

멀리 떨어진 독립된 네트워크를 하나의 네트워크로 묶기 위해서 사용한다.

IP 주소와 IP 서브넷

여러 사람이 참여하는 네트워크에서 정보를 주고받으려면 서로를 유일하게 식별할 수 있는 어떠한 값이 있어야 한다.
인터넷에 연결된 노드(컴퓨터) 역시 각 노드를 구별할 수 있는 유일한 식별값이 있어야 한다.
이때 사용하는 값이 IP Address이다. 인터넷에서는 32bit의 인터넷 주소를 이용해서 노드를 식별한다.
2^32개의 노드를 식별할 수 있으므로 대략 40억 개의 노드가 참여하는 컴퓨터 네트워크를 구성할 수 있을 것이다.

대량의 데이터를 구조화하는 가장 일반적이고 가장 쉬운 방법은 계층화하는 것이다.
IP주소는 클래스(class)라고 부르는 계층으로 나눠서 관리한다. 클래스는 A부터 D까지로 구성된다.

인터넷 주소는 8bit씩 나눠서 xxx.xxx.xxx.xxx와 같이 관리하는데, 이 중 가장 앞에 있는 비트를 이용해서 클래스 A부터 클래스 D까지 구분한다.
첫 8bit 중에서 4개 비트를 이용해 클래스를 계산한다. 0이면 A, 10이면 B, 110이면 C, 1110이면 D 클래스다.
클래스가 정해지면 네트워크와 호스트 영역이 결정된다. 네트워크는 조직에 할당할 수 있는 네트워크 개수이고,
호스트는 각 네트워크에서 관리할 수 있는 호스트 개수를 나타낸다.

  • 클래스별로 관리할 수 있는 네트워크 개수와 호스트 개수

    클래스 네트워크 갯수 호스트 갯수 IP 범위
    A 클래스 127개 약 16,000,000개 1.0.0.1 ~ 126.255.255.254
    B 클래스 16,000개 약 65,000개 128.1.0.1 ~ 191.255.255.254
    C 클래스 약 2,000,000개 254개 192.0.1.1 ~ 233.255.255.254

클래스 A의 인터넷 주소는 7bit 크기(128개)의 네트워크를 할당할 수 있으며, 각 네트워크에서 관리할 수 있는 호스트의 개수는 2^24(약 1,600만) 개다

사설 네트워크는 인터넷으로부터 격리되므로 내부에서만 사용하는 별도의 인터넷 주소를 따로 할당해서 사용한다. 이를 사설 IP라고 한다.

인터넷 주소체계는 클래스별로 사설 네트워크 구축을 위한 인터넷 주소를 따로 떼어 놓고 있다.

  • 사설 인터넷 주소의 호스트 크기와 인터넷 주소 개수

    인터넷 주소 범위 호스트 크기 인터넷 주소 개수 CIDR
    10.0.0.0 ~ 10.255.255.255 24bit 16,777,216개 10.0.0.0/8
    172.16.0.0 ~ 172.31.255.255 20bit 1,048,576개 172.16.0.0/12
    192.168.0.0 ~ 192.168.255.255 16bit 65,356개 192.168.0.0/16

CIDR은 인터넷 주소로 구성되는 네트워크를 나눠서 관리하기 위한 표기법이다.
CIDR은 10.0.0.0/8과 같은 형식으로 표기한다. 슬래시(/) 뒤에 있는 숫자는 고정된 네트워크의 비트 크기를 의미한다.
예를 들어 10.0.0.0/8이라면 앞의 8bit 인 10은 고정되는 네트워크 아이디로, 나머지 24bit는 호스트 영역으로 사용할 수 있다.
10.0.0.1부터 10.255.255.254 영역에 있는 1,600만 개의 아이피 주소를 사용할 수 있는 네트워크라는 의미다.
10.1.0.0/16이라면 10.1 이 고정되고 나머지 16bit를 호스트 영역으로 사용할 수 있다.
10.1.0.0부터 10.1.255.254까지 약 65,000개의 사이트를 관리할 수 있다.

VPC 네트워크도 인터넷으로부터 격리된 독립적이 네트워크이므로 사설 IP를 이용해서 구성해야 한다. AWS는 VPC 네트워크를 위해서 10.0.0.0/16 네트워크를 할당한다. 65,000개의 노드를 관리할 수 있는 크기인데, 하나의 네트워크에서 모든 인스턴스를 관리할 수 없는 노릇이니 이를 더 작은 네트워크로 나누어서 관리한다. 이 작은 네트워크를 서브넷이라고 한다.
관리자는 VPC의 관리 기능을 이용해서 하나 이상의 서브넷을 만들어서 네트워크를 관리하면 된다.

  • VPC를 이용한 서비스 네트워크 서브넷 운용

예를 들어 10.1.0.0/16 네트워크를 할당받았다고 가정해 보자
이 네트워크는 다시 10.1.0.0/24, 10.1.1.0/24, 10.1.2.0/24와 같이 나눈 다음에 웹서버, WAS, 분석 서버 등의 용도에 따라서 24bit로 구성된 서브넷에 배치하면 된다. 총 254개의 서브넷을 만들 수 이쏙, 각 서브넷을 254개의 노드를 수용할 수 있으니 웬만한 규모의 서비스를 운영하는 데 부족함이 없다.

Routes

VPC는 하나 이상의 서브넷으로 구성된 독립된 네트워크로 네트워크에서 발생하는 패킷의 경로를 설정하기 위한 라우터를 제공한다.
관리자는 서브넷 단위로 라우터 테이블을 조작할 수 있다. 이 기능으로 다음과 같은 일을 할 수 있다.

  • 인터넷으로 경로를 설정(패킷을 IGW로 흐르게 하면 된다)
  • 외부로부터 격리(주로 보안상의 이유로)
  • VPN이나 NAT와 같은 네트워크 게이트웨이 역할을 하는 인스턴스로 보냄

VPC의 장점

인스턴스를 배치하기 위해 VPC를 생성하는 것이 비효율적이라고 생각할 수 있으므로 VPC를 사용하는 이유가 있는지 확인해 보자

  • 격리된 네트워크 구성(보안성)
    • VPC 내부에 있는 인스턴스는 EIP를 할당받기 전까지 인터넷으로부터 격리된다. VPC를 구성하는 것만으로 보안성을 높일 수 있다.
  • 네트워크 트래픽 제어
    • VPC에 생성하는 서브넷에는 라우팅 테이블을 자유롭게 설정할 수 있다. 관리자는 이 테이블을 설정하고 구성해서 트래픽의 흐름을 원하는 대로 제어할 수 있다.
    • ex) NAT, DMZ, VPN 등을 구성할 수 있다
  • 관리의 효율성
    • 관리자는 VPC내부에 있는 인스턴스의 사설 IP를 자유롭게 설정할 수 있다. 이는 내부 인스턴스를 관리하는 효율성을 크게 높인다.
  • 통합
    • 글로벌 서비스를 운영하다 보면 서로 다른 리전에 자원이 흩어지기 마련이다. VPC를 이용하면 이들 자원을 독립적인 네트워크로 묶을 수 있다. 또한, VPN을 이용해서 떨어져 있는 VPC를 마치 하나의 네트워크처럼 묶을 수 있다. 이렇게 통합된 네트워크를 통해서 관리(SSH를 이용한), 모니터링, 로그와 같은 정보 수집 등의 작업을 통합할 수 있다.

DMZ 네트워크

외부(인터넷) 네트워크와 내부 네트워크 사이에 있는 네트워크다. 내부 네트워크를 외부 네트워크로부터 분리하는 완충지대 역할을 한다.
외부로 노출해야 하는 웹 서버는 DMZ 구간에 두고, 데이터베이스나 WAS와 같은 보고해야 할 서비스는 내부 네트워크에 둔다. 이렇게 하면 중요한 서버는 인터넷으로 직접 연결할 수 없으므로 보안성을 높일 수 있다. 각 네트워크 구간에는 방화벽을 둬서 허용한 패킷만 흐르도록 필터링한다.

확장성과 가용성에 대한 방향 설정

  • 확장성 : 입출력 데이터가 늘어날 때 이에 맞춰 시스템과 네트워크 그리고 소프트웨어를 유연하게 늘려서 늘어난 요청에 얼마나 잘 적응할 수 있는지에 대한 능력
    • 횡적 확장(scale-up)과 종적 확장(scale-out)으로 구분할 수 있다.
    • 종적 확장 : 단일 서버의 스펙을 높이는 방식 (스펙 업:스케일 업과 스팩 다운:스케일 다운)
    • 횡적 확장 : 서버를 여러 개 복제하는 방식이다. 요청이 늘어나서 서비스를 확장해야 할 것 같으면 인스턴스를 몇 개 더 만들어서 요청을 분산한다. 분산처리 시스템에서 처리 용량을 늘리기 위해서 일반적으로 사용하는 방식 (서버 증설:스케일 아웃, 서버 감소:스케일 인)
  • 가용성 : 일 년 365일 중단 없이 서비스를 운용할 수 있는지에 대한 능력
    • AWS는 가용성 확보를 위해서 가용성 존 서비스를 제공한다. 가용성 존은 하나의 리전에서 물리적으로 분리된 네트워크의 구성단위를 의미한다.

AWS에서는 횡적 확장 방식이 효과적이다. 인스턴스를 추가하는 것만으로 전체 시스템에 부하가 골고루 분산되게 할 수 있으며, 동시에 가용성까지 확보할 수 있기 때문이다. AWS에서 제공하는 거의 모든 서비스는 횡적확장 서비스를 자동으로 제공한다. ELB는 트래픽이 늘어나면 자동으로 스케일 아웃 돼서 트래픽을 감당한다. 반대로 트래픽이 줄어들면 자동으로 스케일 인 돼서 비용을 아낄 수 있게 서비스한다.

AWS에서는 ELB를 이용해서 인스턴스를 늘이거나 줄이는 것으로 간단하게 스케일 아웃/스케일 인 할 수 있다.

_ RDS(데이터베이스 서비스)

EC2 인스턴스는 그 자체가 하나의 독립된 컴퓨터 시스템이므로 인스턴스를 실행한 다름 여기에 MySQL을 설정하는 식으로 데이터 베이스 시스템을 구축할 수 있다.

제대로 운영하려면 고민해야 할 부분이 많다.

  1. 서비스가 중단되지 않게 운영하려면 HA(고가용성)구성을 해야한다. 두 대 이상의 MySQL 서버를 구성해서 하나의 서버가 죽더라도 다른 서버가 데이터베이스 서비스를 제공해야한다.
  2. 사용자가 늘어나서 데이터베이스의 처리 용량을 초과하면 읽기 전용 리플리케이션을 만드는 등의 방법으로 전체 용량을 늘릴 수 있어야 한다.
  3. 백업 정책에 따라 주기적으로 백업해야 한다.

RDS를 이용하면 이를 간단하게 해결할 수 있다.

RDS는 관계형 데이터베이스 서비스를 제공하는 SaaS 형태의 서비스다.
RDS의 장점은 데이터베이스의 관리와 운용을 AWS에서 대신해 준다는 데 있다.
HA구성, 읽기 전용 리플리케이션 설정, 백업 정책, 자동 패치 등을 복잡한 설정 없이 몇 번의 클릭만으로 서비스받을 수 있다.

RDS의 유용한 기능 중 하나는 Active-Standby 방식의 HA 구성과 읽기 전용 리플리케이션 구성 기능이다.

  • 가용성 : 평소에 마스터로 서비스하다가 문제가 생기면 슬레이브로 페일오버(대체)하는 방식으로 가용성을 확보한다. 인프라 관리자는 RDS 인스턴스를 생성할 때 Multi-AZ 구성 옵션을 선택하는 정도로 간단하게 마스터/슬레이브 방식의 고가용성 서비스를 구성할 수 있다.
  • 확장성 : 사용자가 늘면 데이터베이스 성능에 문제가 생길 수 있다. 보통은 읽기/쓰기 지연이 생기는데, 이 경우 읽기 전용 복제를 만드는 것으로 데이터베이스의 지연 문제를 해결할 수 있다. 읽기 전용 복제라는 것에 주목할 필요가 있다. 데이터를 쓰는 것은 여전히 마스터를 통해서만 이뤄지고, 복제 서버는 단지 읽기 서비스만 제공한다. 대부분 데이터가 쓰기보다 읽기가 더 많으므로 읽기 전용 복제 방식을 유용하게 사용할 수 있다.

_ EBS와 Instance store

EBS(Elastic Block Store)는 블럭 스토리지(하드디스크)를 제공하는 서비스다. 특징은 유연성에 있다.
사용자는 필요에 따라서 언제든지 블럭 스토리지를 생성하고, 제거할 수 있다. 사용한 만큼 과금되는 시스템이다.

기존의 물리적인 시스템에서 저장 공간을 확보하기 위해서 하드 디스크를 하나 더 추가하는 과정 = ( 상당히 번거롭다 )

  1. 시스템에 작동중인 소프트웨어를 모두 내린다.
  2. 파워를 끈다.
  3. 적당한 크기의 하드디스크를 추가한다.
  4. 전원을 켠다.
  5. 마운드(mount)해서 사용한다.

AWS는 사용자가 요청한 EBS 볼륨을 원격 스토리지 시스템에 만들고 사용자에게 할당한다. 사용자는 EBS를 EC2 인스턴에서 마운트해서 사용할 수 있다.
로컬 디스크를 사용하지 않으므로 로컬 컴퓨터에 문제가 생겨서 인스턴스가 죽더라도 다른 컴퓨터에서 인스턴스를 실행해서 데이터를 복구할 수 있다.

EBS 외에 Instance store 방식의 블록 스토리지도 사용할 수 있다. 이 스토리지는 인스턴스가 실행된 로컬 호스트에 위치한다.
로컬 호스트에 만들어지므로 인스턴스를 중단하거나 삭제하거나 디스크에 문제가 생기면 데이터를 사용할 수 없게 된다.
또한, 다른 인스턴스에 자유롭게 마운트(attach) 수 있는 EBS와 달리 다른 인스턴스에 마운트 할 수 없다.
Instance store 는 개시, 버퍼, scratch data 와 같은 임시 데이터를 저장하는 용도로 사용할 수 있다.

_ S3

S3(Simple Storage Service) 는 오브젝트 스토리지(Object Storage)를 제공하는 서비스다.
EBS도 스토리지 서비스라서 혼동될 수 있으니 차이점을 구별해보자

블록 스토리지는 하드디스크를 추상화한 서비스다. 블록 단위로 작동하며, 랜덤하게 데이터에 접근(random access)할 수 있다.
운영체제나 소프트웨어를 실행하는 용도로 사용하는데, 이들 데이터는 랜덤하게 접근할 수 있어야 하기 때문이다.

  • ex) 데이터베이스의 데이터를 저장하기 위해서 추가로 디스크 공간이 필요하다면 EBS를 사용한다.

오브젝트 스토리지는 FTP와 유사한 서비스라고 보면 된다. 오브젝트9파일)에 ID를 부여하고, 이 ID를 이용해서 데이터를 꺼낼 수 있다.
주로 파일을 저장하고 꺼내기 위한 용도로 사용한다.

  • ex) 이미지, 동영상, MP3와 같은 파일을 서비스한다면 이들 파일은 S3에 저장하는 게 효율적이다. 혹은 AMI나 데이터를 백업하는 용도로 사용할 수도 있다.

여러 개의 사본을 유지함으로써 안전하게 데이터를 저장할 수 있다.

_ 클라우드프런트

CDN(Contents Delivery Network)은 대량의 콘텐츠를 배포할 때 높은 성능과 높은 가용성을 보장하는 용도로 사용한다.

  • ex) 스프트웨어 업데이트, 패치 파일 = 짧은 시간에 대량으로 배포 가능해야 함

이런 파일을 대량의 데이터를 전송하는데 특화된 CDN에 올리면 서비스의 품질을 올릴 수 있다.

클라우드프런트는 AWS에서 제공하는 CDN으로 관리자는 빠른 배포가 필요한 파일을 클라우드포런트에 올려서 전체 서비스의 성능을 높일 수 있다.
이외에도 서비스의 성능을 향상하기 위해서 다운로드를 분산하는 용도로 다양하게 사용할 수 있다. 웹 서비스가 화려해지고 상호작용이 중요시되면서 이미지, CSS, 자바스크립트 등의 파일 크기가 커지면 이들 파일을 클라우드프런트에 배치하면 성능을 높일 수 있다.

AWS 의 장점 정리

  1. 탄력적인 자원의 운용
  2. 글로벌 확산
  3. 서비스의 가용성과 확장성
  4. 네트워크 관리의 용이성
  5. 관리성