AWS Certified Developer - Associate 이론 정리
IAM (Identity and Access Management)
- AWS 리소스에 대한 액세스를 제어하는 서비스. 사용자, 그룹, 역할 및 정책을 설정
- 최소 권한 원칙, 정책 작성법, 다중 인증(MFA)
- IAM 정책은 JSON 문서로 AWS 리소스에 대해 누가 어떤 작업을 할 수 있는지를 정의합니다. 정책을 사용자, 그룹, 역할에 할당하여 특정 작업을 허용하거나 거부할 수 있습니다.
IAM 역할 및 정책의 차이점
- IAM 역할은 사용자가 아닌 AWS 리소스 또는 외부 엔티티가 AWS 리소스에 접근할 수 있게 하며, 주로 임시 자격 증명을 부여하는 데 사용됩니다.
- IAM 정책은 권한을 정의하는 문서로, 사용자, 그룹, 역할 등에 부여되어 누가 어떤 AWS 리소스에 접근할 수 있는지를 규정합니다.
AWS CLI
- AWS CLI는 명령줄을 통해 AWS 서비스와 상호작용할 수 있는 도구입니다. 개발자와 시스템 관리자들이 스크립트를 사용하여 AWS 리소스를 관리하거나 자동화된 작업을 실행하는 데 많이 사용됩니다.
AWS SDK (Software Development Kit)
- AWS SDK는 AWS 서비스를 프로그래밍 언어를 통해 사용할 수 있도록 제공하는 라이브러리 모음입니다. SDK를 사용하면 개발자가 코드에서 AWS 리소스를 생성, 수정, 삭제하는 작업을 쉽게 처리할 수 있습니다.
지원 언어
AWS SDK는 여러 프로그래밍 언어에서 사용할 수 있습니다. 주요 지원 언어는 다음과 같습니다:
- Python (boto3)
- JavaScript (Node.js)
- Java
- C#
- Ruby
- Go
- PHP
EC2 (Elastic Compute Cloud)
- AWS에서 제공하는 가상 서버. 애플리케이션을 실행하기 위해 사용
- 인스턴스 타입, 스토리지 선택, 보안 그룹 등 기본 설정 방법 숙지
인스턴스 (Instance)
- EC2 인스턴스는 AWS에서 제공하는 가상 서버입니다. 인스턴스를 시작하고 운영하며, 원하는 시점에 중지하거나 종료할 수 있어요.
AMI (Amazon Machine Image)
- AMI는 EC2 인스턴스의 템플릿으로, 운영체제(OS), 애플리케이션, 설정 등을 미리 정의한 이미지예요. 이를 기반으로 인스턴스를 시작할 수 있어요.
- Linux AMI, Windows AMI 등 다양한 운영체제를 선택할 수 있어요.
인스턴스 타입 (Instance Type)
- 인스턴스 타입은 CPU, 메모리, 네트워크 성능 등의 리소스 구성을 정의합니다. 애플리케이션의 요구 사항에 맞춰 다양한 유형의 인스턴스 타입을 선택할 수 있어요.
- 범용(G): 다양한 작업에 적합한 균형 잡힌 성능 (예: t2.micro, t3.medium).
- 컴퓨팅 최적화(C): CPU 집약적인 작업에 적합 (예: c5.large).
- 메모리 최적화(R): 메모리 집약적인 작업에 적합 (예: r5.large).
- 스토리지 최적화(I): 빠른 로컬 스토리지가 필요한 작업에 적합 (예: i3.large).
EBS (Elastic Block Store)
- EBS는 EC2 인스턴스에 연결할 수 있는 블록 스토리지 서비스로, 인스턴스 종료 시에도 데이터를 유지할 수 있어요.
- SSD나 HDD 옵션이 있으며, IOPS 성능에 따라 다양한 유형이 있어요.
보안 그룹 (Security Group)
- EC2 인스턴스의 방화벽 역할을 하는 보안 그룹은 인스턴스에 대한 트래픽을 제어해요. 인바운드 및 아웃바운드 트래픽 규칙을 설정해 허용되는 IP 주소나 포트를 지정할 수 있어요.
키 페어 (Key Pair)
- SSH를 통해 인스턴스에 접속하기 위해 사용하는 암호화 키 쌍이에요. 인스턴스를 생성할 때 키 페어를 생성하거나 선택해야 합니다.
EC2 인스턴스 스토리지
1. EBS(Elastic Block Store) 볼륨 유형
EBS는 EC2 인스턴스에 연결할 수 있는 블록 스토리지 서비스로, 인스턴스 종료 시에도 데이터를 유지할 수 있어요.
- 일반 목적 SSD (gp3, gp2):
- 다양한 워크로드에 적합한 기본 볼륨 유형으로, 웹 서버, 애플리케이션 서버, 개발 및 테스트 환경에서 사용돼요.
- gp3는 gp2보다 가격 대비 성능이 더 좋으며, IOPS와 처리량을 독립적으로 설정할 수 있어 더 유연해요.
- 프로비저닝된 IOPS SSD (io1, io2):
- 고성능이 필요한 데이터베이스, 대규모 트랜잭션 처리 시스템 등에서 사용돼요.
- io2는 내구성 향상 기능이 있어 더 높은 안정성을 제공해요.
- 처리량 최적화 HDD (st1):
- 대규모 데이터 처리에 적합한 볼륨으로, 주로 로그 처리, 빅데이터 분석 등에 사용돼요.
- 콜드 HDD (sc1):
- 저렴한 비용의 대용량 스토리지로, 자주 접근하지 않는 데이터 저장에 적합해요. 백업이나 아카이빙 용도로 사용돼요.
주요 특징
- 내구성 및 고가용성: EBS 볼륨은 AWS의 가용 영역(AZ) 내에서 자동으로 복제되어 내구성을 높여요.
- 스냅샷: EBS 볼륨의 스냅샷을 생성하여 백업을 만들거나 다른 리전으로 데이터를 복사할 수 있어요. 이 스냅샷은 S3에 저장됩니다.
- 탄력적인 크기 조정: EBS 볼륨의 크기와 성능을 인스턴스가 실행 중일 때도 동적으로 조정할 수 있어요.
- 지속성: 인스턴스가 종료되더라도 데이터를 유지하며, 필요에 따라 다른 인스턴스에 연결할 수 있어요.
2. 인스턴스 스토어 (Instance Store)
인스턴스 스토어는 EC2 인스턴스와 함께 제공되는 임시 저장소로, 물리적으로 인스턴스에 연결된 스토리지입니다. 인스턴스를 중지하거나 종료하면 데이터가 사라지므로, 일시적인 데이터 저장에만 사용해야 해요.
주요 특징
- 휘발성: 인스턴스가 종료되거나 재부팅되면 인스턴스 스토어에 저장된 데이터는 삭제됩니다.
- 저렴하고 고성능: 로컬 디스크로서 매우 빠른 읽기/쓰기 성능을 제공해요. 따라서 캐시, 임시 파일 저장소, 데이터베이스 스왑 파일용으로 적합해요.
- 사용 제한: 인스턴스 스토어는 모든 EC2 인스턴스 타입에서 제공되지 않아요. 예를 들어, c5d, i3 같은 특정 인스턴스 타입만 인스턴스 스토어를 제공해요.
사용 사례
- 빠른 디스크 I/O가 필요한 작업(예: 캐싱, 임시 데이터 저장).
- 데이터 손실이 허용되는 임시 파일 저장소.
3. EFS (Elastic File System)
EFS는 완전 관리형 파일 스토리지로, 여러 EC2 인스턴스가 동시에 접근할 수 있는 파일 시스템을 제공합니다. EFS는 POSIX 호환 파일 시스템이므로, 표준 파일 시스템 작업(읽기, 쓰기, 파일 잠금 등)을 지원해요.
주요 특징
- 다중 인스턴스 공유: 여러 EC2 인스턴스가 동시에 EFS에 액세스할 수 있어요. 이를 통해 여러 인스턴스에서 동일한 데이터를 동시에 처리할 수 있어요.
- 자동 확장: EFS는 저장 공간이 필요할 때 자동으로 확장되므로, 사전에 용량을 예측할 필요가 없어요.
- 내구성 및 가용성: EFS는 여러 가용 영역(AZ)에 데이터를 복제하여 내구성과 가용성을 높여요.
- 성능 모드: 일반 모드와 고성능 모드가 있으며, 애플리케이션 요구 사항에 따라 선택할 수 있어요.
사용 사례
- 웹 서버의 공용 파일 시스템.
- 데이터 분석 애플리케이션에서 다수의 인스턴스가 동시에 데이터를 처리할 때.
- DevOps 파이프라인에서 여러 인스턴스가 같은 파일 시스템에 접근할 필요가 있는 경우.
ELB (Elastic Load Balancer)
ELB는 클라우드 인프라에서 들어오는 트래픽을 여러 인스턴스(EC2)에 분배하는 서비스입니다. 기본적인 역할은 트래픽이 특정 서버에 집중되지 않도록 분산시키는 것이에요.
종류
- Application Load Balancer (ALB): HTTP와 HTTPS 트래픽을 레이어 7에서 처리해요. URL 경로, 호스트 이름 등에 따라 트래픽을 세밀하게 라우팅할 수 있어요. 예를 들어, /api/로 오는 요청은 특정 서버 그룹으로, /images/로 오는 요청은 다른 서버 그룹으로 보낼 수 있어요.
- Network Load Balancer (NLB): TCP, UDP 트래픽을 레이어 4에서 처리해요. 매우 빠른 응답 속도를 요구하는 애플리케이션이나, 고성능 네트워크 트래픽 분배에 적합해요.
- Gateway Load Balancer (GWLB): 네트워크 보안 장치, 방화벽 등을 통합하기 위해 사용돼요.
주요 기능
- 트래픽 분산: 서버 여러 대에 트래픽을 균등하게 분배.
- 건강 상태 확인 (Health Checks): 트래픽을 전달하기 전에 EC2 인스턴스의 상태를 확인하고, 비정상적인 인스턴스를 자동으로 제외.
- SSL/TLS 종료: HTTPS 요청에서 SSL 암호화를 해제하고 EC2로 전달.
- 세션 지속성 (Sticky Sessions): 같은 사용자의 트래픽을 같은 서버로 지속적으로 보낼 수 있어요.
ASG (Auto Scaling Group)
ASG는 애플리케이션의 요구에 따라 EC2 인스턴스를 자동으로 추가하거나 제거하는 서비스입니다. 트래픽이나 서버 부하에 따라 동적으로 확장하거나 축소함으로써 비용 효율성을 높일 수 있어요.
주요 기능
- 자동 확장 (Auto Scaling): 트래픽 증가에 따라 EC2 인스턴스를 자동으로 추가하고, 트래픽이 줄어들면 자동으로 인스턴스를 종료하여 비용을 절감할 수 있어요.
- 스케일 업 (Scale Up): 더 많은 리소스(더 큰 인스턴스 타입)를 추가.
- 스케일 아웃 (Scale Out): EC2 인스턴스의 개수를 늘림.
- 스케일 다운 (Scale Down): EC2 인스턴스의 개수를 줄임.
- 탄력성 (Fault Tolerance): 특정 인스턴스가 비정상적일 경우, ASG가 자동으로 새로운 인스턴스를 생성하여 대체해요.
- 타겟 추적 확장 (Target Tracking Scaling): CPU 사용률, 네트워크 트래픽 등의 메트릭을 기준으로 자동으로 스케일링 규칙을 설정할 수 있어요.
- 알람을 통한 트리거: CloudWatch 알람을 설정해 CPU 사용률, 네트워크 트래픽 등 특정 조건이 발생하면 자동으로 스케일링.
- 최소 및 최대 인스턴스 수: 애플리케이션 요구에 맞춰 인스턴스의 최소 및 최대 개수를 설정해둬요.
ELB와 ASG의 연동
이 두 서비스는 함께 사용되는 경우가 많아요. ELB는 트래픽을 여러 인스턴스로 분산하고, ASG는 트래픽 양에 맞춰 EC2 인스턴스의 수를 동적으로 조정해요.
예를 들어:
- 트래픽 증가: 많은 사용자가 접속하면, ELB가 트래픽을 여러 EC2 인스턴스로 분산시켜요. 이때 ASG는 CPU 사용률이 증가하면 새로운 EC2 인스턴스를 추가로 생성해요.
- 트래픽 감소: 트래픽이 줄어들면, ASG는 필요하지 않은 인스턴스를 자동으로 종료하고 ELB는 나머지 인스턴스에 트래픽을 분산해요.
실제 사용 예시
- 웹 애플리케이션에서 많은 트래픽이 발생할 때, ELB가 모든 서버로 균등하게 요청을 나누고, ASG는 서버의 부하를 감안해 새로운 서버를 생성하거나 제거하여 리소스를 최적화해줘요.
이처럼 ELB와 ASG를 함께 사용하면 트래픽 부하 분산과 서버 자원의 자동 확장·축소를 통해 높은 가용성과 비용 효율성을 유지할 수 있어요.
RDS + Aurora + ElasticCache
1. RDS (Relational Database Service)
RDS는 AWS에서 제공하는 완전 관리형 관계형 데이터베이스 서비스로, 다양한 데이터베이스 엔진을 지원합니다. RDS는 관리의 복잡성을 줄이면서도 고가용성, 확장성, 보안성을 제공합니다.
RDS 주요 특징
- 지원하는 데이터베이스 엔진:
- MySQL
- PostgreSQL
- MariaDB
- Oracle
- Microsoft SQL Server
- Amazon Aurora
- 자동 관리: RDS는 데이터베이스 패치, 백업, 복제 등의 작업을 자동으로 처리해요.
- 백업 및 복구: 자동으로 백업을 생성하고, 특정 시점으로 복구(Point-in-Time Recovery)가 가능해요.
- 다중 가용 영역 (Multi-AZ) 배포: 고가용성을 위해 다중 가용 영역에 걸쳐 자동으로 복제를 설정하여 장애 발생 시 신속한 복구가 가능해요.
- 자동 스케일링: 사용자가 필요로 하는 리소스에 따라 데이터베이스 인스턴스의 스토리지 용량을 자동으로 확장할 수 있어요.
RDS 사용 사례
- 웹 애플리케이션, 백엔드 시스템, 데이터베이스가 필요한 모든 애플리케이션에서 사용돼요.
- 높은 가용성과 자동 백업, 성능 최적화가 필요한 관계형 데이터베이스 환경에서 사용 가능해요.
2. Amazon Aurora
Aurora는 AWS에서 제공하는 고성능 관계형 데이터베이스 엔진으로, MySQL 및 PostgreSQL과 호환됩니다. 하지만 성능과 확장성 측면에서 더 우수하며, 대규모의 데이터베이스 애플리케이션을 지원하기 위해 설계되었어요.
Aurora 주요 특징
- 높은 성능: Aurora는 MySQL에 비해 최대 5배, PostgreSQL에 비해 3배 더 빠른 성능을 제공해요.
- 자동 확장: Aurora는 스토리지가 자동으로 확장되며, 최대 128TB까지 지원해요. 애플리케이션의 필요에 따라 유연하게 조정돼요.
- 고가용성: Aurora는 데이터가 여러 가용 영역(AZ)에 걸쳐 자동으로 복제되고, 고가용성을 위해 다중 리더 복제를 지원해요.
- 다중 리전 복제: Aurora는 여러 리전으로 데이터베이스 복제를 제공하여 글로벌 애플리케이션의 성능을 높일 수 있어요.
- 복구 시간 단축: Aurora는 데이터베이스 장애 시 매우 짧은 복구 시간을 제공해요.
Aurora 사용 사례
- 대규모 웹 애플리케이션, 모바일 애플리케이션, SaaS(Software as a Service) 애플리케이션 등에서 성능과 확장성을 중시하는 애플리케이션에 적합해요.
- 글로벌 확장성과 데이터베이스 성능이 중요한 워크로드에서 사용돼요.
3. ElastiCache
ElastiCache는 인메모리 캐시 서비스로, 고성능 데이터를 저장하고 접근하는 데 사용됩니다. 데이터베이스에 대한 읽기/쓰기 작업을 빠르게 처리하고, 데이터베이스의 부하를 줄이는 데 사용해요.
ElastiCache 지원 엔진
- Redis: 오픈 소스 인메모리 키-값 스토어로, 데이터 구조 저장 및 복잡한 데이터 처리 기능을 지원해요.
- Memcached: 간단한 캐시 스토어로, 빠른 읽기/쓰기 작업에 적합해요.
ElastiCache 주요 특징
- 고성능: 데이터를 메모리에 저장하기 때문에 매우 빠른 읽기 및 쓰기 성능을 제공합니다.
- 확장성: ElastiCache는 샤딩을 통해 확장이 가능하며, 클러스터 구성으로 데이터를 분산시켜 성능을 높일 수 있어요.
- 고가용성 및 복구: Redis 클러스터는 여러 가용 영역에 걸쳐 자동 복제를 지원하고, 장애 발생 시 자동 복구가 가능해요.
- 세션 관리: 세션 데이터를 Redis나 Memcached에 저장하여 웹 애플리케이션의 성능을 향상시킬 수 있어요.
ElastiCache 사용 사례
- 데이터베이스 캐싱: 데이터베이스 조회 결과를 ElastiCache에 캐시하여 응답 속도를 빠르게 하고, 데이터베이스 부하를 줄일 수 있어요.
- 세션 관리: 웹 애플리케이션의 세션 데이터를 ElastiCache에 저장하여 상태 유지에 활용.
- 실시간 분석: 빠른 데이터 접근이 필요한 실시간 데이터 분석, 리더보드, 메타데이터 저장소 등에 적합해요.
RDS + Aurora + ElastiCache 통합 활용
이 세 가지 AWS 서비스를 통합하면 고성능, 고가용성, 확장성을 확보할 수 있어요.
- RDS 또는 Aurora를 사용해 데이터베이스 백엔드를 운영합니다.
- RDS는 관리가 쉬운 일반적인 관계형 데이터베이스로 사용되며, Aurora는 더 높은 성능과 확장성을 필요로 할 때 선택돼요.
- ElastiCache는 캐시를 추가하여 데이터베이스의 부하를 줄이고 성능을 최적화합니다.
- 자주 조회되는 데이터(예: 제품 정보, 사용자 프로필 등)를 Redis나 Memcached로 캐싱하여 데이터베이스 요청을 최소화해요.
- 다중 가용 영역 (Multi-AZ) 및 읽기 복제본을 활용해 고가용성과 확장성을 보장합니다.
- Aurora는 자동으로 데이터를 복제하고, 읽기 복제본을 사용해 읽기 요청을 분산시켜 성능을 높여요.
Route53
Amazon Route 53는 AWS에서 제공하는 클라우드 도메인 네임 시스템(DNS) 서비스입니다. Route 53은 도메인 이름을 IP 주소로 변환하는 DNS 관리 기능뿐만 아니라, 도메인 등록, 트래픽 라우팅, 상태 확인 및 장애 복구 같은 기능도 제공합니다. Route 53의 주요 기능과 사용 사례를 살펴볼게요.
DNS 서비스
Route 53은 DNS 서비스를 통해 사용자가 웹사이트나 애플리케이션에 접속할 때 도메인 이름을 IP 주소로 변환해 줍니다. 도메인 네임 시스템(DNS)은 인터넷에서 각 리소스의 위치를 찾는 데 사용되며, Route 53은 이를 효율적으로 관리할 수 있도록 도와줘요.
도메인 등록
Route 53은 도메인 등록 서비스를 제공하여 사용자가 도메인 이름을 구매하고 관리할 수 있게 합니다. 도메인 이름 등록 후, DNS 설정을 통해 사용자가 자신의 애플리케이션이나 웹사이트로 트래픽을 라우팅할 수 있어요.
확장가능한 글로벌 DNS
Route 53은 AWS의 글로벌 인프라를 기반으로 하여 안정적이고 확장 가능한 DNS 서비스를 제공합니다. 이를 통해 애플리케이션이 전 세계 사용자들에게 빠르고 안정적으로 접근할 수 있어요.
VPC 기초
VPC (Virtual Private Cloud)는 AWS에서 제공하는 논리적으로 격리된 가상 네트워크입니다. VPC를 사용하면 AWS 클라우드에서 사용자의 네트워크 환경을 직접 설정하고 관리할 수 있습니다. VPC는 네트워크 구성 요소, IP 주소 범위, 서브넷, 라우팅 테이블, 인터넷 게이트웨이, 보안 그룹 등을 포함하여 사용자가 원하는 대로 커스터마이즈할 수 있어요.
1. VPC의 기본 구성 요소
1) CIDR (Classless Inter-Domain Routing)
- CIDR은 VPC에서 사용할 IP 주소 범위를 정의하는 방식입니다. 사용자는 VPC 생성 시, IPv4 및 IPv6 주소 범위를 지정할 수 있으며, 이를 통해 내부 네트워크에서 IP 주소를 할당하게 됩니다.
- 예: 10.0.0.0/16은 10.0.0.0부터 10.0.255.255까지 65,536개의 IP 주소를 포함하는 주소 범위입니다.
2) 서브넷 (Subnet)
- 서브넷은 VPC 안에서 특정한 IP 주소 블록을 나눈 논리적 네트워크 구간입니다. VPC 내에서 리소스를 격리하거나 그룹화할 때 사용되며, 서브넷은 두 가지로 나뉩니다:
- 퍼블릭 서브넷 (Public Subnet): 인터넷에 직접 액세스할 수 있도록 인터넷 게이트웨이(Internet Gateway, IGW)가 연결된 서브넷입니다. 웹 서버나 인터넷과 통신해야 하는 리소스가 여기에 배치됩니다.
- 프라이빗 서브넷 (Private Subnet): 인터넷과 직접 연결되지 않은 서브넷입니다. 데이터베이스 서버, 내부 애플리케이션 서버 등 외부 액세스가 필요하지 않은 리소스를 여기에 배치합니다.
3) 라우팅 테이블 (Route Table)
- 라우팅 테이블은 네트워크 트래픽이 어느 방향으로 전송될지를 결정하는 규칙 세트입니다. 각 서브넷은 하나의 라우팅 테이블과 연결되며, 트래픽을 퍼블릭 서브넷(인터넷)으로 보낼지, 프라이빗 서브넷(내부 네트워크)으로 보낼지 정의해요.
- 예: 퍼블릭 서브넷의 라우팅 테이블은 인터넷 게이트웨이로 가는 경로를 포함하고, 프라이빗 서브넷은 NAT 게이트웨이나 다른 내부 리소스들로 가는 경로만 포함할 수 있습니다.
4) 인터넷 게이트웨이 (Internet Gateway, IGW)
- 인터넷 게이트웨이는 VPC 내의 퍼블릭 서브넷이 인터넷과 통신할 수 있게 해주는 장치입니다. 인터넷을 통해 VPC의 리소스에 트래픽을 주고받기 위해서는 인터넷 게이트웨이가 필요합니다.
- 퍼블릭 서브넷의 리소스가 외부에서 접근 가능하도록 하려면, 라우팅 테이블에 IGW를 경로로 추가하고, 보안 그룹 및 네트워크 ACL에서 적절한 규칙을 설정해야 해요.
5) NAT 게이트웨이 (Network Address Translation Gateway)
- NAT 게이트웨이는 프라이빗 서브넷의 리소스들이 인터넷으로 아웃바운드 트래픽을 보낼 수 있도록 해주지만, 외부에서 들어오는 요청은 차단합니다. 이를 통해 데이터베이스 서버 등 민감한 자산은 인터넷과 직접 연결되지 않으면서도 외부 리소스에 액세스할 수 있습니다.
- 예: 프라이빗 서브넷에 있는 데이터베이스 서버가 보안 업데이트를 받기 위해 인터넷에 접속할 때 NAT 게이트웨이를 사용해요.
6) 보안 그룹 (Security Group)
- 보안 그룹은 VPC 내의 인스턴스 수준에서 트래픽을 제어하는 방화벽 역할을 합니다. 인바운드와 아웃바운드 트래픽에 대해 허용할 규칙을 설정할 수 있으며, 리소스 간 트래픽을 세부적으로 제어할 수 있어요.
- 예: 웹 서버 인스턴스에 대한 HTTP(포트 80)와 HTTPS(포트 443) 트래픽은 허용하고, 나머지는 차단하는 규칙을 설정할 수 있습니다.
7) 네트워크 ACL (Access Control List, NACL)
- 네트워크 ACL은 서브넷 수준에서 인바운드와 아웃바운드 트래픽을 제어하는 보안 레이어입니다. 보안 그룹과 달리, 네트워크 ACL은 허용 및 거부 규칙을 모두 설정할 수 있어요.
- 예: NACL을 사용해 특정 IP 주소나 범위에서 오는 트래픽을 차단하거나 허용할 수 있습니다.
2. VPC 작동 원리
- VPC를 사용하면 AWS 클라우드에서 네트워크를 설계하고 관리할 수 있으며, VPC 내에서 AWS 리소스(예: EC2 인스턴스, RDS 데이터베이스)를 실행할 수 있습니다.
- 퍼블릭 서브넷은 외부에서 인터넷 트래픽을 받아들여야 하는 리소스(예: 웹 서버)를 배포하고, 프라이빗 서브넷은 외부와의 직접 연결이 필요 없는 리소스(예: 데이터베이스)를 배포하는 데 적합합니다.
- 네트워크 트래픽은 라우팅 테이블과 보안 그룹을 통해 흐름을 제어하며, 인터넷 게이트웨이를 통해 외부와 통신합니다. NAT 게이트웨이는 프라이빗 리소스들이 인터넷으로 트래픽을 보낼 수 있도록 지원합니다.
3. VPC 사용 사례
웹 애플리케이션 호스팅
- 퍼블릭 서브넷에 웹 서버를 배치하고, 프라이빗 서브넷에 데이터베이스를 배치하여 외부 접근을 제한하면서, 내부에서만 데이터베이스에 접근할 수 있도록 설정할 수 있어요.
하이브리드 클라우드 환경
- AWS VPC와 온프레미스 데이터 센터를 연결해 하이브리드 클라우드 환경을 구축할 수 있습니다. 이를 위해 VPN 연결 또는 AWS Direct Connect를 사용할 수 있어요.
보안 및 규정 준수
- 금융, 의료 등 데이터 보안이 중요한 분야에서는 VPC를 사용하여 네트워크를 격리하고, 민감한 데이터를 인터넷에서 분리된 상태로 보호할 수 있습니다.
4. VPC 피어링 (VPC Peering)
- VPC 피어링을 사용하면 서로 다른 VPC들 간에 네트워크 트래픽을 직접 주고받을 수 있는 프라이빗 연결을 설정할 수 있습니다. 서로 다른 AWS 계정의 VPC나 서로 다른 리전 간에도 피어링이 가능합니다.
Amazone S3
Amazon S3 (Simple Storage Service)는 AWS에서 제공하는 오브젝트 스토리지 서비스로, 거의 무제한의 용량을 제공하고 고가용성, 보안성, 확장성을 보장하는 저장소입니다. S3는 데이터 파일, 이미지, 비디오, 로그 파일, 백업, 데이터베이스 스냅샷 등을 안전하게 저장하고 필요할 때 빠르게 액세스할 수 있도록 설계되었습니다.
1. S3의 기본 개념
오브젝트 스토리지
- S3는 오브젝트 스토리지로, 데이터를 오브젝트라는 단위로 저장합니다. 각 오브젝트는 파일 자체와 해당 파일의 메타데이터, 고유한 식별자로 이루어져 있어요.
- 오브젝트(Object): 저장하고자 하는 데이터 파일입니다. 크기는 최대 5TB까지 가능합니다.
- 키(Key): 오브젝트를 식별하는 고유한 이름입니다. S3 버킷 내에서 키는 각 오브젝트를 유일하게 식별합니다.
- 메타데이터(Metadata): 오브젝트에 대한 추가 정보(파일 유형, 생성 날짜 등)를 담고 있습니다.
버킷 (Bucket)
- 모든 오브젝트는 버킷 안에 저장됩니다. 버킷은 S3에서 데이터를 저장하는 컨테이너 역할을 합니다. 버킷 이름은 전 세계적으로 유일해야 하며, 이를 통해 S3는 사용자가 데이터를 어떻게 저장하고 관리할지 정의할 수 있어요.
- 버킷은 특정 AWS 리전에 위치하며, 이로 인해 데이터의 지연 시간과 규정 준수 요구사항을 충족할 수 있습니다.
Region (리전)
- S3 버킷은 AWS 리전에 물리적으로 저장됩니다. 이를 통해 데이터는 선택한 리전에 저장되며, 글로벌 서비스를 제공할 때 지리적 요구사항을 충족할 수 있어요.
2. S3의 주요 기능
1) 데이터 내구성 및 가용성
- 내구성: S3는 데이터를 여러 시설에 자동으로 복제하여 99.999999999%의 내구성을 제공합니다. 이는 11 9's로 불리며, 1조 개의 파일 중 한 개가 손실될 가능성이 있을 정도로 높은 내구성을 보장해요.
- 가용성: S3는 99.99%의 가용성을 제공합니다. 즉, 저장된 데이터에 거의 항상 접근할 수 있다는 것을 의미합니다.
2) 스토리지 클래스
S3는 다양한 스토리지 클래스를 제공하여 사용 사례에 따라 비용과 성능을 최적화할 수 있습니다.
- S3 Standard: 자주 접근하는 데이터를 저장할 때 사용합니다. 높은 내구성과 성능을 제공하며, 기본적인 스토리지 클래스입니다.
- S3 Intelligent-Tiering: 데이터 접근 패턴에 따라 비용을 최적화하는 스토리지 클래스입니다. 자주 사용되는 데이터는 높은 성능을 제공하고, 자주 사용되지 않는 데이터는 비용 효율적인 스토리지 클래스로 자동 전환됩니다.
- S3 Standard-IA (Infrequent Access): 자주 액세스하지 않지만 빠른 액세스가 필요할 때 사용하는 데이터에 적합합니다. 저장 비용이 낮지만, 데이터를 액세스할 때마다 비용이 발생합니다.
- S3 One Zone-IA: 자주 접근하지 않는 데이터에 대해 비용을 절감할 수 있지만, 데이터를 한 개의 가용 영역에만 저장하여 복원력은 다소 낮습니다.
- S3 Glacier: 장기 보관용 데이터에 적합하며, 데이터 복원 시 시간이 걸리지만 매우 저렴한 비용으로 대용량 데이터를 저장할 수 있습니다.
- S3 Glacier Deep Archive: 거의 액세스하지 않는 데이터를 위한 최저가 스토리지로, 복원 시간이 수 시간에서 수일 걸리지만 가장 저렴한 스토리지 클래스입니다.
3) 버전 관리 (Versioning)
- S3 버전 관리를 활성화하면 오브젝트의 여러 버전을 저장할 수 있습니다. 이를 통해 의도하지 않은 삭제나 덮어쓰기로부터 데이터를 보호할 수 있습니다.
4) 수명 주기 관리 (Lifecycle Management)
- 수명 주기 정책을 설정하면 특정 조건에 따라 오브젝트를 자동으로 저렴한 스토리지 클래스로 전환하거나, 일정 기간이 지나면 데이터를 삭제할 수 있습니다.
5) 암호화 (Encryption)
- S3는 저장된 데이터를 안전하게 보호하기 위해 다양한 암호화 옵션을 제공합니다.
- 서버 측 암호화(SSE): AWS에서 데이터 저장 시 자동으로 암호화합니다. AWS 관리 키(SSE-S3), AWS KMS 관리 키(SSE-KMS), 고객 제공 키(SSE-C) 등을 사용할 수 있습니다.
- 클라이언트 측 암호화: 사용자가 데이터를 업로드하기 전에 직접 암호화할 수 있어요.
6) 액세스 제어
- S3는 여러 가지 액세스 제어 방법을 제공합니다.
- 버킷 정책: 버킷 수준에서 특정 사용자 또는 그룹이 데이터를 읽거나 쓰는 것을 허용/거부할 수 있습니다.
- IAM 정책: AWS IAM을 사용해 특정 사용자나 역할에 S3 리소스에 대한 권한을 부여할 수 있습니다.
- 액세스 제어 목록(ACL): 버킷 또는 오브젝트 수준에서 더 세밀한 액세스 제어를 할 수 있습니다.
7) S3 이벤트 알림
- S3는 파일이 업로드되거나 삭제될 때 이벤트 알림을 설정할 수 있습니다. 이를 통해 Lambda 함수, SQS, SNS와 같은 AWS 서비스와 통합해 자동화된 작업을 실행할 수 있어요.
3. S3 사용 사례
1) 백업 및 복구
- S3는 중요한 데이터의 백업 및 복구를 위한 신뢰성 높은 스토리지로 사용됩니다. 데이터의 내구성이 높아 복구 가능성이 거의 100%에 가깝습니다.
2) 정적 웹사이트 호스팅
- S3를 사용하여 정적 웹사이트(HTML, CSS, JavaScript 파일)를 호스팅할 수 있습니다. S3 버킷을 통해 전 세계적으로 웹사이트에 빠르게 접근할 수 있어요.
3) 빅데이터 분석
- S3는 데이터 레이크 역할을 하며, 많은 양의 데이터를 저장하고 EMR, Redshift, Athena와 같은 분석 도구와 연동해 빅데이터 분석에 사용할 수 있습니다.
4) 애플리케이션 데이터 저장
- S3는 애플리케이션의 이미지, 동영상, 로그 파일 등의 데이터를 저장하는 데 사용됩니다. REST API를 통해 데이터를 쉽게 업로드하고 다운로드할 수 있어 애플리케이션과의 통합이 용이합니다.
4. S3 데이터 전송
- 멀티파트 업로드: 큰 파일을 여러 부분으로 나누어 병렬로 업로드해 전송 속도를 높이고 신뢰성을 확보할 수 있습니다.
- S3 Transfer Acceleration: 전 세계에서 S3 버킷으로의 데이터 전송 속도를 높이기 위해 CloudFront 엣지 로케이션을 사용하여 데이터를 가속 전송합니다.
5. S3 비용 구조
S3의 비용은 다음과 같은 요소들로 결정됩니다:
- 저장된 데이터의 용량(스토리지 클래스에 따라 다름)
- 업로드 및 다운로드 요청 수
- 데이터 전송 비용(리전 간 전송 시 추가 요금 발생)
- 데이터 복구 시 복원 비용(S3 Glacier 등)
CloudFront
Amazon CloudFront는 AWS의 콘텐츠 전송 네트워크(CDN) 서비스로, 전 세계의 엣지 로케이션을 통해 사용자에게 콘텐츠를 빠르고 안전하게 전달하는 서비스입니다. CloudFront는 웹 페이지, 이미지, 동영상, API, 소프트웨어 배포 등 다양한 콘텐츠를 글로벌 사용자에게 짧은 대기 시간과 높은 전송 속도로 제공합니다.
1. CloudFront의 기본 개념
CDN (Content Delivery Network)
- CDN은 전 세계적으로 분산된 서버 네트워크를 통해 콘텐츠를 캐시하고 사용자에게 가장 가까운 서버(엣지 로케이션)에서 콘텐츠를 제공하는 방식입니다.
- 이를 통해 지연 시간(latency)을 줄이고, 네트워크 병목 현상을 최소화하여 웹사이트나 애플리케이션의 성능을 높입니다.
엣지 로케이션 (Edge Location)
- CloudFront는 전 세계적으로 배포된 엣지 로케이션을 통해 콘텐츠를 캐싱하고 사용자에게 제공합니다.
- 사용자가 요청을 보내면 해당 요청은 가장 가까운 엣지 로케이션으로 전달되어 캐시된 콘텐츠가 제공됩니다. 만약 엣지 로케이션에 해당 콘텐츠가 없다면, 원본 서버(Origin)에서 콘텐츠를 가져와 엣지 로케이션에 캐싱합니다.
2. CloudFront의 주요 구성 요소
원본 서버 (Origin)
- 원본 서버는 CloudFront가 콘텐츠를 가져오는 출처 서버입니다. 원본 서버는 AWS 리소스일 수도 있고, 외부의 서버일 수도 있습니다.
- S3 버킷: 정적 콘텐츠(이미지, HTML, CSS, JavaScript 등)의 원본으로 사용됩니다.
- EC2 인스턴스 또는 온프레미스 서버: 동적 콘텐츠(예: API 응답) 또는 애플리케이션 서버에서 생성된 데이터를 제공할 수 있습니다.
- Elastic Load Balancer (ELB): 여러 EC2 인스턴스를 로드밸런싱하여 원본으로 사용합니다.
- Amazon API Gateway: API를 원본으로 구성하여 API 트래픽을 CloudFront를 통해 최적화된 방식으로 전달할 수 있습니다.
배포 (Distribution)
- 배포(Distribution)는 CloudFront를 통해 콘텐츠를 제공하는 단위입니다. 배포에는 두 가지 유형이 있습니다:
- 웹 배포(Web Distribution): 웹 사이트, 정적 파일, 동적 콘텐츠 등을 위한 배포 방식입니다.
- RTMP 배포(RTMP Distribution): 실시간 스트리밍 미디어 콘텐츠(주로 비디오)를 위한 배포 방식입니다.
캐시 정책 (Cache Behavior)
- 캐시 정책은 CloudFront가 원본에서 콘텐츠를 캐시하고 이를 어떻게 사용자에게 제공할지 정의하는 규칙입니다.
- TTL (Time to Live): 캐시된 콘텐츠가 엣지 로케이션에 얼마나 오래 남아 있을지를 결정합니다.
- 경로 기반 규칙: 특정 파일 형식이나 경로에 대해 서로 다른 캐시 설정을 정의할 수 있습니다.
CloudFront 오리진 설정
- CloudFront는 오리진 서버(예: S3, EC2, 외부 서버)에서 데이터를 가져와 엣지 로케이션에 배포합니다.
- 오리진은 CloudFront가 콘텐츠를 요청할 때 첫 번째로 접근하는 위치입니다.
3. CloudFront의 주요 기능
1) 글로벌 캐시 및 성능 최적화
- CloudFront는 전 세계 엣지 로케이션에서 콘텐츠를 캐싱하여 사용자가 있는 지역에 가장 가까운 위치에서 콘텐츠를 제공합니다.
- 사용자가 요청한 콘텐츠가 엣지 로케이션에 캐시되어 있으면 최소한의 지연 시간으로 즉시 전달됩니다. 만약 캐시되지 않은 경우, 원본 서버에서 가져와 엣지 로케이션에 캐시한 후 사용자에게 전달됩니다.
2) 지리적 제한 (Geo Restriction)
- CloudFront는 콘텐츠를 특정 국가나 지역의 사용자에게만 제공하거나 차단할 수 있는 기능을 제공합니다. 이를 통해 특정 지역에서는 콘텐츠 접근을 제한하는 규칙을 설정할 수 있습니다.
3) SSL/TLS 암호화
- CloudFront는 SSL/TLS 인증서를 사용해 콘텐츠를 암호화하여 전송할 수 있습니다. 이를 통해 사용자와 서버 간의 데이터 전송이 안전하게 이루어집니다.
- AWS에서는 무료로 AWS Certificate Manager (ACM)를 사용해 SSL 인증서를 설정할 수 있습니다.
4) 오리진 보호 및 AWS Shield 통합
- CloudFront는 AWS WAF (Web Application Firewall) 및 AWS Shield와 통합되어 DDoS(분산 서비스 거부) 공격 및 웹 애플리케이션 공격에 대한 방어 기능을 제공합니다.
- 오리진 보호(Origin Shield) 기능을 통해 엣지 로케이션에서 오리진 서버로의 요청을 최적화하고, 오리진에 가해지는 부담을 줄일 수 있습니다.
5) 맞춤형 응답 헤더
- CloudFront는 특정 요청에 대해 맞춤형 헤더를 추가하거나 수정할 수 있는 기능을 제공합니다. 이를 통해 사용자 경험을 개인화하거나 보안 강화가 가능합니다.
ECS, ECR 및 Fargate - AWS의 도커
ECS (Elastic Container Service), ECR (Elastic Container Registry), 그리고 Fargate는 AWS의 컨테이너 기반 애플리케이션을 배포하고 관리할 수 있는 서비스입니다. 이들은 Docker 컨테이너를 활용하여 확장 가능한 애플리케이션 환경을 구성하고, 클러스터 관리, 배포, 자동화 및 스케일링을 지원합니다.
1. Amaazine ECS (Elastic Container Service)
Amazon ECS는 AWS에서 컨테이너 오케스트레이션을 담당하는 관리형 서비스로, Docker 컨테이너를 배포, 관리, 확장할 수 있는 기능을 제공합니다. ECS는 Kubernetes(K8s)와 비슷한 역할을 수행하지만, AWS에 최적화되어 있으며, EC2 인스턴스나 AWS Fargate를 기반으로 컨테이너를 실행할 수 있습니다.
1) ECS의 주요 특징
- 클러스터 관리: ECS는 컨테이너를 관리하기 위한 클러스터를 생성하고, 이 클러스터 내에서 여러 컨테이너 인스턴스를 실행합니다.
- 태스크 정의(Task Definition): 컨테이너가 어떤 이미지를 실행할지, 환경 변수, 네트워킹, 자원 제한(CPU, 메모리) 등을 정의하는 단위입니다. 태스크는 하나 이상의 컨테이너로 구성될 수 있습니다.
- 서비스(Service): 특정 태스크 정의를 기반으로 컨테이너의 복제본을 지속적으로 유지하고 관리합니다. ECS 서비스는 사용자가 정의한 복제본 수에 맞춰 컨테이너를 자동으로 스케일링합니다.
- 로드밸런싱: ECS는 Application Load Balancer(ALB) 또는 Network Load Balancer(NLB)와 통합되어 트래픽을 여러 컨테이너에 분산시킬 수 있습니다.
- EC2 또는 Fargate 옵션: ECS는 컨테이너를 실행할 수 있는 두 가지 방식으로 제공됩니다.
2) ECS 사용 사례
- 대규모 마이크로서비스 아키텍처 배포
- 자동 스케일링을 통한 트래픽 대응
- CI/CD 파이프라인과 통합하여 애플리켕이션 업데이트 자동화
2. Amazone ECR (Elastic Container Registry)
Amazon ECR은 컨테이너 이미지를 저장하고 관리하기 위한 Docker 호환 레지스트리입니다. ECR을 사용하면 AWS 내에서 안전하게 Docker 이미지를 저장하고, 이를 ECS, EKS, Fargate 등에 쉽게 배포할 수 있습니다.
1) ECR의 주요 특징
- 이미지 보안 : ECR은 이미지를 암호화 하고 IAM 권한을 통해 세밀하게 액세스 권한을 제어할 수 있습니다.
- AWS CLI 및 SDK 통합 : ECR은 AWS CLI 및 SDK를 통해 Docker 이미지를 쉡게 푸시하거나 가져올 수 있습니다. 예를 들어, Docker CLI 명령어를 사용하여 ECR로 이미지를 푸시할 수 있습니다.
- ECS 및 Fargate 통합 : ECS, EKS, Fargate와 완벽하게 통합되어, 레지스트리에 저장된 이미지를 쉽게 ECS 태스크나 Fargate 작업에 사용할 수 있습니다.
- 이미지 스캔 : ECR은 저장된 ㅇ이미지에 대한 취약점 스캔을 제공하여 보안 취약점을 사전에 파악하고 해결할 수 있게 합니다.
2) ECR 사용 사례
- Docker 이미지 관리: DevOps 파이프라인에서 생성된 컨테이너 이미지를 안전하게 저장하고 관리.
- 보안 중심의 이미지 배포: IAM과 이미지 스캔 기능을 통해 보안이 강화된 컨테이너 이미지를 배포
3. AWS Fargate
AWS Fargate는 서버리스 방식으로 컨테이너를 실행할 수 있는 서비스입니다. Fargate를 사용하면 EC2 인스턴스를 프로비저닝하거나 관리할 필요 없이, 오로지 컨테이너 정의만으로 애플리케이션을 배포하고 관리할 수 있습니다. Fargate는 ECS와 EKS와 통합되어, 컨테이너의 실행과 관리를 더욱 쉽게 해줍니다.
1) Fargate의 주요 특징
- 서버리스 컨테이너 실행: Fargate는 컨테이너 인프라를 추상화하여, 사용자는 인스턴스 크기나 스케일링을 관리할 필요 없이 컨테이너 중심으로 애플리케이션을 운영할 수 있습니다.
- 자동 확장 및 축소: Fargate는 워크로드에 맞춰 자동으로 컨테이너의 수를 조정하여 트래픽 변화에 대응할 수 있습니다.
- 세부적인 자원 설정: Fargate는 태스크 정의에서 CPU와 메모리 요구 사항을 세부적으로 설정할 수 있습니다. 각 태스크 또는 컨테이너에 필요한 만큼의 자원을 할당하여 비용을 최적화할 수 있습니다.
- 비용 효율성: Fargate는 사용한 만큼만 요금을 청구하는 종량제 모델을 적용합니다. 이를 통해 EC2 인스턴스를 오버 프로비저닝할 필요 없이 필요한 자원만 사용합니다.
- 보안 및 네트워킹: Fargate는 컨테이너를 격리된 환경에서 실행하며, VPC 내에서 네트워킹을 설정할 수 있습니다. 또한, IAM 역할을 부여하여 컨테이너가 특정 리소스에 접근할 수 있도록 합니다.
2) Fargate 사용 사례
- 서버 관리가 필요 없는 컨테이너 배포: EC2 인스턴스를 관리하지 않고도 컨테이너 애플리케이션을 배포하고 운영.
- 단기 워크로드 처리: 데이터 분석, 배치 작업 등 짧은 기간 동안 실행되는 작업에 유용.
- 자동 스케일링: 트래픽 변화에 민감한 웹 애플리케이션에서 자동으로 확장 또는 축소.
4. ECS, ECR Fargate의 상호작용
이 세 가지 서비스는 컨테이너 기반의 애플리케이션을 관리하고 배포할 때 긴밀하게 상호작용합니다.
- ECR은 컨테이너 이미지 저장소로 사용됩니다. 개발자가 만든 Docker 이미지를 ECR에 저장하고, ECS와 Fargate는 해당 이미지를 사용하여 컨테이너를 실행합니다.
- ECS는 클러스터에서 컨테이너를 관리하고, 이를 통해 수평 확장 및 복구 기능을 제공합니다. ECS 클러스터는 EC2 인스턴스 기반으로 실행할 수 있으며, Fargate 모드를 사용하면 서버리스 방식으로 관리할 필요 없이 바로 컨테이너를 실행할 수 있습니다.
- Fargate는 서버리스 방식으로 컨테이너를 실행하고 관리하며, 인프라 관리 부담을 없애고, 사용한 만큼만 요금을 지불합니다.
5. ECS, ECR, Fargate의 사용 사례
- 마이크로서비스 아키텍처: ECS와 Fargate를 사용해 각 마이크로서비스를 독립적인 컨테이너로 배포 및 관리. ECR을 통해 이미지를 안전하게 관리.
- CI/CD 파이프라인: 코드가 푸시될 때 자동으로 ECR에 Docker 이미지를 푸시하고, ECS 또는 Fargate로 컨테이너를 배포.
- 대규모 웹 애플리케이션: ECS에서 자동 확장 설정을 통해 컨테이너 수를 동적으로 조절하여 트래픽에 대응. Fargate를 사용하면 서버리스 방식으로 배포하여 인프라 관리를 최소화.
- 데이터 분석 및 배치 작업: Fargate를 사용해 단기적으로 대규모 데이터를 처리하는 작업에 적합. 필요한 만큼의 컨테이너를 사용하고, 작업이 끝나면 컨테이너를 종료하여 비용을 절감.
ECS, ECR, Fargate는 AWS에서 컨테이너 기반의 애플리케이션을 배포하고 운영하는 데 최적화된 서비스입니다. ECR을 통해 이미지를 안전하게 관리하고, ECS나 Fargate를 사용해 확장성 높은 환경에서 컨테이너를 쉽게 배포 및 관리할 수 있습니다. Fargate의 서버리스 아키텍처는 특히 서버 관리 부담을 덜고 비용 효율성을 높이는 데 큰 장점을 제공합니다.
AWS Elastic BeansTalk
AWS Elastic Beanstalk는 개발자가 애플리케이션을 쉽게 배포하고 관리할 수 있도록 지원하는 PaaS(Platform as a Service)입니다. 애플리케이션을 AWS 인프라에 배포하는 데 필요한 인프라 구성, 서버 프로비저닝, 로드 밸런싱, 확장 및 모니터링과 같은 복잡한 작업을 자동으로 처리해 줍니다. Elastic Beanstalk는 다양한 프로그래밍 언어와 플랫폼을 지원하며, 애플리케이션 배포부터 운영까지 모든 과정에서 자동화된 환경을 제공합니다.
1. Elastic Beanstalk의 주요개념
1) 애플리케이션
- Elastic Beanstalk에서 애플리케이션은 배포할 코드를 의미합니다. 이 코드는 웹 애플리케이션이거나 API 서버일 수 있으며, 애플리케이션은 여러 환경에서 실행될 수 있습니다.
2) 환경(Environment)
- 각 애플리케이션은 하나 이상의 환경에서 실행될 수 있습니다. 환경은 애플리케이션을 실행하는 실제 리소스를 의미하며, EC2 인스턴스, 로드 밸런서, Auto Scaling 그룹, RDS 인스턴스 등의 AWS 리소스를 포함합니다.
- 환경은 주로 두 가지 유형으로 구분됩니다:
3) 환경 구성(Environment Configuration)
- 환경은 플랫폼(Java, Python, Node.js, Ruby, PHP, .NET, Docker 등)과 인스턴스 타입(EC2 인스턴스 유형)을 선택하여 구성합니다. 이 외에도 Auto Scaling, 로드 밸런서, 데이터베이스(RDS) 등 다양한 AWS 리소스를 선택하여 환경을 맞춤 설정할 수 있습니다.
4) 애플리케이션 버전(Application Version)
- Elastic Beanstalk에서는 각 배포된 애플리케이션이 버전으로 관리됩니다. 새로운 코드를 배포할 때마다 애플리케이션 버전이 갱신되며, 이전 버전으로 롤백할 수 있습니다.
2. Elastic Beanstalk의 작동 원리
Elastic Beanstalk의 작동은 다음과 같은 간단한 단계로 이루어집니다:
- 애플리케이션 패키징 및 업로드: 애플리케이션 코드를 준비한 후, AWS 관리 콘솔, AWS CLI 또는 Git을 사용하여 코드를 Elastic Beanstalk에 업로드합니다.
- 환경 생성: 배포하려는 애플리케이션에 맞는 환경을 설정합니다. 환경 설정에는 애플리케이션이 사용할 플랫폼, EC2 인스턴스 유형, 네트워킹 구성 등이 포함됩니다.
- 배포 및 관리: Elastic Beanstalk는 애플리케이션 코드를 기반으로 AWS 리소스를 자동으로 프로비저닝하여 애플리케이션을 배포합니다. 로드 밸런싱, Auto Scaling, 모니터링, 업데이트 등 운영 작업도 자동으로 처리됩니다.
- 자동 확장 및 모니터링: 배포된 애플리케이션은 트래픽 변화에 따라 Auto Scaling을 통해 자동으로 인프라를 확장하거나 축소합니다. CloudWatch를 통해 성능 및 상태를 모니터링할 수 있습니다.
- 애플리케이션 업데이트 및 롤백: 새로운 애플리케이션 버전을 업로드하면 환경이 자동으로 업데이트되며, 필요시 이전 버전으로 롤백할 수 있습니다.
3. Elastic Beanstalk의 주요 기능
1) 자동화된 인프라 관리
- Elastic Beanstalk는 애플리케이션이 실행되는 데 필요한 인프라 리소스(EC2, RDS, Auto Scaling, 로드 밸런서 등)를 자동으로 설정하고 관리해 줍니다. 사용자는 애플리케이션 코드만 업로드하면 자동으로 배포됩니다.
2) 다양한 플랫폼 지원
- Elastic Beanstalk는 여러 프로그래밍 언어 및 플랫폼(Java, Python, Node.js, Ruby, PHP, .NET, Go, Docker)을 지원합니다. Docker를 사용하면 커스텀 컨테이너를 정의하여 컨테이너 기반 애플리케이션을 배포할 수 있습니다.
3) 자동 스케일링(Auto Scaling)
- Elastic Beanstalk는 트래픽 변화에 따라 애플리케이션을 자동으로 확장하거나 축소할 수 있는 Auto Scaling 기능을 제공합니다. 이를 통해 애플리케이션이 트래픽 급증 시에도 안정적으로 운영될 수 있습니다.
4) 관리 및 모니터링
- Elastic Beanstalk는 AWS CloudWatch와 통합되어 애플리케이션의 상태, 성능 지표, 로그 등을 모니터링할 수 있습니다. 또한 문제가 발생하면 자동으로 환경을 복구하거나 알림을 받을 수 있습니다.
5) 배포 옵션
- Elastic Beanstalk는 애플리케이션 배포 시 다양한 옵션을 제공합니다:
6) 로드 밸런싱 및 고가용성
- Elastic Beanstalk는 Elastic Load Balancer(ELB)를 사용하여 여러 EC2 인스턴스 간에 트래픽을 분산시키고, 애플리케이션의 고가용성을 보장합니다.
7) 비용 최적화
- Elastic Beanstalk는 사용한 AWS 리소스에 대해서만 비용을 지불합니다. Auto Scaling 기능을 통해 애플리케이션이 필요한 리소스만 사용하므로, 비용 효율적으로 운영할 수 있습니다.
4. Elastic Beanstalk 사용 사례
1) 웹 애플리케이션 배포
- Elastic Beanstalk는 웹 애플리케이션 배포에 매우 적합합니다. 사용자는 애플리케이션 코드를 업로드하기만 하면 자동으로 인프라가 구성되고, 트래픽이 증가하면 Auto Scaling이 실행됩니다.
2) API 서버
- Elastic Beanstalk는 REST API 또는 GraphQL API와 같은 서버 애플리케이션을 쉽게 배포할 수 있습니다. 개발자는 API 서버를 배포하고 모니터링하며, 트래픽 변화에 따라 자동으로 확장할 수 있습니다.
3) CI/CD 파이프라인
- Elastic Beanstalk는 Jenkins, Git, AWS CodePipeline과 같은 CI/CD 도구와 통합할 수 있습니다. 이를 통해 애플리케이션의 코드를 지속적으로 배포하고 테스트하는 자동화된 배포 파이프라인을 구축할 수 있습니다.
4) 빠른 프로토타이핑
- Elastic Beanstalk는 애플리케이션 배포 및 관리를 자동으로 처리하기 때문에 개발자가 빠르게 프로토타입을 만들고 배포할 수 있습니다. 초기 개발 단계에서 인프라 관리에 대한 부담을 줄일 수 있습니다.
5. Elastic Beanstalk의 장점
1) 간편한 배포
- Elastic Beanstalk는 복잡한 인프라 설정 없이 코드를 업로드하는 것만으로 애플리케이션을 쉽게 배포할 수 있습니다. 개발자는 인프라 구성보다는 애플리케이션 코드 작성에 집중할 수 있습니다.
2) 유연한 플랫폼 선택
- 다양한 프로그래밍 언어와 플랫폼을 지원하므로, 개발자는 자신이 선호하는 기술 스택을 Elastic Beanstalk에서 사용할 수 있습니다.
3) 자동화된 관리
- Elastic Beanstalk는 로드 밸런싱, Auto Scaling, 모니터링, 백업 등의 인프라 관리 작업을 자동으로 처리하여 운영의 복잡성을 줄여 줍니다.
4) 확장성
- 트래픽 증가에 따라 Elastic Beanstalk는 자동 확장을 통해 EC2 인스턴스를 추가하여 애플리케이션의 확장성을 보장합니다. 반대로, 트래픽이 감소하면 불필요한 인스턴스를 종료하여 비용을 절감할 수 있습니다.
6. Elastic Beanstalk의 한계
- Elastic Beanstalk는 대부분의 인프라 관리 작업을 자동화하지만, 사용자가 세부적인 인프라 설정을 직접 관리해야 할 때는 다소 제한적일 수 있습니다. 예를 들어, 특정 네트워킹 설정이나 인프라 아키텍처를 커스터마이징 같은 경우가 해당됩니다.