위의 그림은 앞으로 [초보자를 위한 AWS 웹구축] 매뉴얼이 구축하게될 아키텍처입니다.
이번 글에는 위 아키텍처를 구축하는데 필요한 AWS 서비스에 대해 간단히 알아보고, 아키텍처를 구축하는 순서를 설명 하겠습니다.
1. Availability Zone (AZ)
AWS의 데이터 센터는 가용 영역(AZ) 내에 편성됩니다. 각 가용 영역은 하나 이상의 데이터 센터로 구성되지만, 하나의 데이터 센터가 2개의 가용 영역에 포함될 수는 없습니다.
각 가용 영역은 독립된 장애 영역으로 설계되었습니다. 즉, 가용 영역은 일반적인 대도시 리전 내에서 물리적으로 격리되어 있으며, 별도의 무정전 전원 공급 장치와 현장 백업 발전 시설 외에도 독립적인 유틸리티의 서로 다른 그리드를 통해 전력을 공급받음으로써 단일 장애 지점이 더욱 줄어들게 됩니다.
사용자는 시스템이 상주할 가용 영역을 선택해야 합니다. 시스템은 여러 가용 영역에 걸쳐 확장할 수 있습니다. 재해가 발생하는 경우, 임시 또는 장기 가용 영역 장애를 극복할 수 있도록 시스템을 설계해야 합니다. 여러 개의 가용 영역에 애플리케이션을 분산하면 자연 재해나 시스템 장애 등 대부분의 장애 상황에서도 복원력을 유지할 수 있습니다.
2. Region (리전)
가용 영역은 다시 리전으로 그룹화됩니다. 각 AWS 리전은 2개 이상의 가용 영역을 포함합니다. 특정 리전에 데이터를 저장하는 경우, 해당 리전 내에서만 데이터가 복제됩니다. AWS는 사용자가 데이터를 저장한 리전 외부로 데이터를 이동하지 않습니다. 따라서 비즈니스에서 이를 필요로 하는 경우, 여러 리전에 걸쳐 데이터를 복제하는 작업은 사용자의 책임입니다.
AWS에서는 각 리전이 위치한 국가 및 지역에 대한 정보를 제공하며, 규정 준수와 네트워크 지연 시간 요구 사항에 따라 데이터를 저장할 리전을 선택하는 것은 사용자의 책임입니다. 리전 간 모든 통신은 퍼블릭 인터넷 인프라를 통해 이루어지므로, 민감한 데이터를 보호하기 위해 암호화 방법을 사용해야 합니다.
사용 가능한 AWS 제품과 서비스는 리전에 따라 달라지므로, 사용자는 해당 리전에서 사용한 서비스들을 잘 확인해야 합니다.
3. Virtual Private Cloud (VPC)
Virtual Private Cloud, 줄여서 VPC는 사용자의 AWS 계정 전용 가상 네트워크입니다. VPC는 AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있습니다. Amazon EC2 인스턴스와 같은 AWS 리소스를 VPC에서 실행할 수 있는 클라우드의 네트워크 환경입니다. VPC는 다양한 리소스를 시작하는 장소이고, 사용자 환경 및 환경의 리소스 상호 격리에 대한 탁원한 제어 기능을 제공하도록 설계되었습니다.
각 VPC는 리전 내에 있습니다. VPC 내에 있는 리소스는 해당 리전 외부에 존재할 수 없습니다. (퍼블릭 인터넷을 통하지 않고 서로 다른 리전에 있는 VPC를 연결하는 방법이 있습니다만, 여기서는 다루지 않습니다.) 하지만 같은 리전 내 다른 가용 영역에 있는 리소스는 같은 VPC에 존재할 수 있습니다.
인터넷 게이트웨이, NAT 또는 방화벽 프록시를 사용하지 않고 VPC 엔드포인트를 통해 AWS 서비스에 비공개로 연결할 수 있습니다. 사용 가능한 서비스에는 S3, DynamoDB, Kinesis Streams, Service Catalog, EC2 Systems Manager(SSM), Elastic Load Balancing(ELB) API, Amazon Elastic Compute Cloud(EC2) API 및 SNS가 포함됩니다.
4. Subnet (서브넷)
서브넷은 VPC의 IP 주소 범위입니다. 지정된 서브넷으로 AWS 리소스를 시작할 수 있습니다. 인터넷에 연결되어야 하는 리소스에는 퍼블릭 서브넷을 사용하고, 인터넷에 연결되지 않는 리소스에는 프라이빗 서브넷을 사용합니다.
예를 들어 Network Address Translation(NAT)를 사용하여 인터넷에서 주소로 직접 액세스하지 못하게 할 인스턴스에 대해서는 프라이빗 서브넷을 사용합니다. 프라이빗 서브넷에 있는 인스턴스는 퍼블릭 서브넷의 NAT 게이트웨이를 통해 트래픽을 라우팅하여 프라이빗 IP 주소를 노출하지 않고 인터넷에 액세스할 수 있습니다.
5. Elastic Compute Cloud (EC2)
Amazon Elastic Compute Cloud(Amazon EC2)는 AWS 클라우드에서 확장 가능한 컴퓨팅을 제공합니다. Amazon EC2를 사용하면 하드웨어에 선투자할 필요가 없어 더 빠르게 애플리케이션을 개발하고 배포할 수 있습니다. EC2를 통해 원하는 만큼 가상 서버를 구축하고 보안 및 네트워크 구성과 스토리지 관리가 가능합니다. Amazon EC2는 요건이나 갑작스러운 접속 증가 등 변동사항에 따라 확장하거나 축소할 수 있어 트래픽 예측 필요성이 줄어듭니다.
Amazon EC2는 다음의 기능을 제공합니다.
- 가상 컴퓨팅 환경 : 컴퓨팅 및 메모리 기능에 따라 목적에 맞는 인스턴스를 생성할 수 있습니다.
- Amazon Machine Image (AMI) : 서버에 필요한 운영체제와 여러 소프트웨어들이 적절히 구성된 상태로 제공되는 템플릿으로 인스턴스를 쉽게 만들 수 있습니다.
- 인스턴스를 위한 CPU, 메모리, 스토리지, 네트워킹 용량의 여러 가지 구성을 제공합니다.
- 인스턴스 스토어 볼륨 : 임시 데이터를 저장하는 스토리지 볼륨으로 인스턴스 종료 시 삭제됩니다.
- Amazon Elastic Block Store(Amazon EBS) : EBS 볼륨을 사용해 영구 스토리지 볼륨에 데이터를 저장할 수 있습니다.
- Security Group (보안 그룹)을 사용해 인스턴스에 연결할 수 있는 프로토콜, 포트, 소스 IP 범위를 지정하는 방화벽 기능이 제공됩니다.
- Elastic IP (EIP) : 동적 클라우드 컴퓨팅을 위한 고정 IPv4 주소
- 태그 : 사용자가 생성하여 Amazon EC2 리소스에 할당할 수 있는 메타데이터
EC2는 무료로 사용해 볼 수 있습니다. (프리티어 서비스를 참조해주세요.) Amazon EC2 인스턴스를 구매하는 방법에는 온디맨드, 예약 인스턴스 및 스팟 인스턴스 등이 있으므로, 사용자가 원하는 유형의 요금제를 선택할 수 있습니다.
6. Relational Database Service (RDS)
Amazon Relational Database Service (Amazon RDS)는 클라우드에서 관계형 데이터베이스를 더욱 쉽게 설정, 운영 및 확장할 수 있도록 지원하는 웹 서비스입니다. 이 서비스는 산업 표준 관계형 데이터베이스를 위한 경제적이고 크기 조절이 가능한 용량을 제공하고 공통 데이터베이스 관리 작업을 관리합니다.
일반적인 물리 서버를 구입하면 CPU, 메모리, 스토리지 및 IOPS(Input/Output Operations Per Second)가 모두 묶여 제공됩니다. 하지만 Amazon RDS를 사용하면 이 모두가 따로 분할되므로 독립적으로 확장할 수 있습니다. CPU가 더 많이 필요하거나 IOPS가 더 적게 필요하거나 스토리지가 더 많이 필요할 경우 쉽게 할당할 수 있습니다. Amazon RDS는 백업, 소프트웨어 패치, 자동 장애 감지 및 복구를 관리하며, 필요할 때 자동 백업을 수행하거나 고유한 백업 스냅샷을 수동으로 만들 수 있습니다. 이러한 백업을 사용하여 데이터베이스를 복원할 수 있습니다.
MySQL, MariaDB, PostgreSQL, Oracle, Microsoft SQL Server, 그리고 새로운 MySQL 호환 Amazon Aurora DB 엔진 등 익숙한 데이터베이스 제품을 사용할 수 있습니다. 데이터베이스 패키지의 보안 외에도 AWS Identity and Access Management(IAM)을 사용해 사용자 및 권한을 정의하는 방법으로 RDS 데이터베이스에 댁세스할 수 있는 사용자를 제어할 수 있습니다.
RDS 콘솔을 사용하여 DB 인스턴스 생성 시 다중 AZ를 지정함으로써 간편하게 다중 AZ배포를 생성할 수 있습니다. 또한 콘솔을 사용하여 DB 인스턴스를 수정하고 다중 AZ 옵션을 지정함으로써 기존 DB 인스턴스를 다중 AZ 배포로 변환할 수 있습니다.
7. Elastic Load Balancing (ELB)
Elastic Load Balancing (ELB)는 들어오는 애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이너, IP 주소와 같은 여러 대상에 자동으로 분산시킵니다. ELB는 단일 AZ 또는 여러 AZ에서 다양한 애플리케이션 부하를 처리하므로 내결함성과 가용성이 향상됩니다.
ELB에는 세가지 로드 밸런서가 존재하는데 모두 애플리케이션의 내결함성에 필요한 고가용성, 자동 확장/축소, 강력한 보안을 갖추고 있습니다.
- Application Load Balancer : 애플리케이션 레이어 (layer 7) 에서 작동하는 Application Load Balancer는 요청 콘텐츠를 기반으로 VPC 내의 대상으로 트래픽을 라우팅합니다. Layer 7 HTTP/HTTPS 애플리케이션을 로드 밸런싱하고 SSL/TLS 암호 및 프로토콜이 사용되도록 하여 애플리케이션의 보안을 개선합니다.
- Network Load Balancer : Layer 4 에서 작동하는 Network Load Balancer는 IP 프로토콜 데이터를 기반으로 VPC 내의 대상으로 연결을 라우팅합니다. TCP 트래픽의 로드 밸런싱에 적합하며 AZ당 하나의 정적 IP 주소를 사용하면서 갑작스럽고 변동이 심한 트래픽 패턴을 처리합니다. Network Load Balancer가 응답하지 않는 경우, Amazon Route 53이 다른 AZ에 있는 로드 밸런서 노드로 트래픽을 보냅니다.
- Classic Load Balancer : 여러 Amazon EC2 인스턴스에서 기본적인 로드밸런싱을 제공하며, Layer 4 및 Layer 7 에서 작동합니다. Classic Load Balancer는 Application Load Balancer나 Network Load Balancer 보다 이전에 나온 서비스이며 EC2-Classic 네트워크 내에 구축된 애플리케이션용이지만, VPC에서도 사용이 가능하고 비교적 설정이 간단하므로 해당 매뉴얼에서는 Classic Load Balancer를 사용합니다.
8. 아키텍처 구축 순서
위의 아키텍처를 구축하는 순서는 다음과 같으며, 아래 순서대로 [초보자를 위한 AWS 웹구축] 매뉴얼이 업데이트 됩니다.
- AWS 계정 만들기 : AWS에 가입하는 방법을 소개합니다.
- IAM 유저 생성하기 : IAM 그룹 생성, IAM 유저 생성, IAM 유저로 로그인, MFA 설정에 대해 알아봅니다.
- Cloud Trail 생성하기 : Cloud Trail을 생성하고 log를 저장할 S3 bucket 생성에 대해 알아봅니다.
- 네트워크 구성하기 : VPC와 subnet 생성, route table과 internet gateway를 설정하는 방법에 대해 알아봅니다.
- NAT 서버 구축하기 : key pair, Security group, 인스턴스 생성 및 openvpn으로 인스턴스에 접속하는 방법을 살펴봅니다.
- 웹서버(Apache) 구축하기 : key pair, Security group, 인스턴스 생성 및 Apache web server 설치에 대해 알아봅니다.
- ELB 생성하기 : ELB 생성, 인스턴스 연결 방법, 헬스 체크 등을 살펴봅니다.
- 무료 도메인으로 ROUTE53 등록 및 ELB 연결하기 : 무료 도메인을 받아 ROUTE53 에 등록하고 ELB에 연결하는 방법을 알아봅니다.
- DB 서버 구축하기 : Parameter group, Option group, DB 인스턴스 Security group, RDS 생성에 대해 알아봅니다.
참고 자료