[AWS] EC2 솔루션 아키텍처

silver's avatar
Nov 14, 2025
[AWS] EC2 솔루션 아키텍처

EC2 솔루션 아키텍처

고가용성 설계 원칙

단일 AZ 배치 (권장하지 않음) ap-northeast-2a: [EC2] [RDS Master] → AZ 장애 시 서비스 전체 중단 다중 AZ 배치 (권장) ap-northeast-2a: [EC2] [RDS Master] ap-northeast-2c: [EC2] [RDS Standby] → 한 AZ 장애 시에도 서비스 지속

탄력적 IP(Elastic IP)

특징

  • 고정된 공인 IPv4 주소
  • 인스턴스 중지/시작 시에도 IP 유지
  • 계정당 리전별 5개까지 무료 할당
# Elastic IP 할당 aws ec2 allocate-address --domain vpc # 인스턴스에 연결 aws ec2 associate-address \ --instance-id i-1234567890abcdef0 \ --allocation-id eipalloc-12345678 # 연결 해제 aws ec2 disassociate-address --association-id eipassoc-12345678 # Elastic IP 해제 aws ec2 release-address --allocation-id eipalloc-12345678

비용 최적화

⚠️ 할당된 Elastic IP가 인스턴스에 연결되지 않으면 시간당 과금
권장 사항:
  • 사용하지 않는 Elastic IP는 즉시 해제
  • 가능하면 Load Balancer 사용 (IP 관리 불필요)
  • DNS 기반 라우팅 활용 (Route 53)

배치 그룹(Placement Groups)

인스턴스 간 네트워크 성능을 최적화하기 위한 논리적 그룹입니다.

1. 클러스터 배치 그룹 (Cluster)

특징
  • 단일 AZ 내에 인스턴스를 밀집 배치
  • 10Gbps 네트워크 대역폭
  • 낮은 지연시간
사용
  • 고성능 컴퓨팅(HPC)
  • 빅데이터 분석
  • 밀접하게 연결된 애플리케이션
단점
  • 단일 AZ이므로 고가용성 낮음
  • 하드웨어 장애 시 모든 인스턴스 영향
# 클러스터 배치 그룹 생성 aws ec2 create-placement-group \ --group-name my-cluster \ --strategy cluster

2. 분산 배치 그룹 (Spread)

특징:
  • 각 인스턴스가 서로 다른 하드웨어에 배치
  • 다중 AZ 지원
  • AZ당 최대 7개 인스턴스
사용 사례:
  • 고가용성이 중요한 애플리케이션
  • 독립적인 장애 도메인 필요
  • 중요한 데이터베이스 클러스터
# 분산 배치 그룹 생성 aws ec2 create-placement-group \ --group-name my-spread \ --strategy spread

3. 파티션 배치 그룹 (Partition)

특징
  • 인스턴스를 파티션(논리적 세그먼트)으로 나눔
  • 각 파티션은 다른 하드웨어 랙 사용
  • AZ당 최대 7개 파티션
사용
  • Hadoop, Cassandra, Kafka 같은 분산 시스템
  • 파티션 수준의 장애 격리 필요
# 파티션 배치 그룹 생성 aws ec2 create-placement-group \ --group-name my-partition \ --strategy partition \ --partition-count 3

ENI (Elastic Network Interface)

개념

  • VPC의 가상 네트워크 카드
  • 인스턴스에 연결/분리 가능
  • 프라이빗 IP, Elastic IP, MAC 주소 보유

사용 시나리오

1. 장애 조치(Failover)
정상 상황: Primary Instance (활성) → ENI (IP: 10.0.1.10) 장애 발생: Primary Instance (중지) Secondary Instance (활성) ← ENI 이동 (IP: 10.0.1.10 유지)
2. 듀얼 홈 인스턴스
EC2 Instance ├── eth0 (ENI-1): 10.0.1.10 (관리용 네트워크) └── eth1 (ENI-2): 10.0.2.20 (서비스 네트워크)

ENI 생성 및 연결

# ENI 생성 aws ec2 create-network-interface \ --subnet-id subnet-12345678 \ --description "Management Interface" \ --groups sg-12345678 # 인스턴스에 연결 aws ec2 attach-network-interface \ --network-interface-id eni-12345678 \ --instance-id i-1234567890abcdef0 \ --device-index 1 # ENI 분리 aws ec2 detach-network-interface \ --attachment-id eni-attach-12345678

EC2 Hibernate (최대 절전 모드)

  • 인스턴스의 RAM 내용을 EBS 루트 볼륨에 저장
  • 재시작 시 RAM 내용 복원
  • 빠른 부팅과 상태 유지

일반 중지 vs Hibernate

일반 중지(Stop):
Stop → RAM 삭제 → 디스크만 유지 Start → OS 부팅 → 애플리케이션 시작
Hibernate:
Hibernate → RAM을 디스크에 저장 Resume → RAM 복원 → 바로 실행 재개

사용 조건

  • 150GB 이하 RAM 인스턴스
  • EBS 루트 볼륨 필수
  • 암호화된 EBS 볼륨 필요
  • 60일 이하 Hibernate 상태 유지

활용 사례

  • 장시간 실행되는 작업 중단/재개
  • RAM에 대량 데이터 로드 필요
  • 빠른 재시작이 필요한 개발 환경
# Hibernate 활성화된 인스턴스 생성 aws ec2 run-instances \ --image-id ami-12345678 \ --instance-type m5.large \ --hibernation-options Configured=true # Hibernate 실행 aws ec2 stop-instances \ --instance-ids i-1234567890abcdef0 \ --hibernate

실전 아키텍처 패턴

패턴 1: 웹 애플리케이션 (단일 AZ)

Internet ↓ Internet Gateway ↓ Public Subnet (ap-northeast-2a) ├── EC2 (웹 서버) - Elastic IP └── Security Group: 80, 443 허용 ↓ Private Subnet (ap-northeast-2a) └── RDS (데이터베이스) └── Security Group: 웹 서버만 3306 허용
장점: 간단한 구조, 저렴한 비용 단점: 단일 장애점, AZ 장애 시 서비스 중단

패턴 2: 고가용성 웹 애플리케이션

Internet ↓ Application Load Balancer (다중 AZ) ↓ ┌─────────────────────┬─────────────────────┐ │ AZ-A │ AZ-C │ │ Public Subnet │ Public Subnet │ │ ├── EC2 (웹 서버) │ ├── EC2 (웹 서버) │ │ └── Auto Scaling │ └── Auto Scaling │ │ │ │ │ Private Subnet │ Private Subnet │ │ └── RDS (Primary) │ └── RDS (Standby) │ └─────────────────────┴─────────────────────┘
장점: 고가용성, 자동 확장, 장애 조치 단점: 복잡한 구조, 높은 비용

패턴 3: 3-Tier 아키텍처

┌─────────────────────────────────────┐ │ Web Tier (Public Subnet) │ │ ALB → EC2 (Apache/Nginx) │ └─────────────────────────────────────┘ ↓ ┌─────────────────────────────────────┐ │ Application Tier (Private Subnet) │ │ ALB → EC2 (Spring Boot/Node.js) │ └─────────────────────────────────────┘ ↓ ┌─────────────────────────────────────┐ │ Data Tier (Private Subnet) │ │ RDS (Multi-AZ) + ElastiCache │ └─────────────────────────────────────┘
notion image

보안 강화

1. 최소 권한 원칙

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::my-app-bucket/*" } ] }

2. Security Group 계층화

Internet → SG-ALB (80, 443) → SG-WebServer (ALB만 허용) → SG-AppServer (WebServer만 허용) → SG-Database (AppServer만 허용)

3. 배스천 호스트(Bastion Host)

Developer PC ↓ SSH (22) Bastion Host (Public Subnet) ↓ SSH (22) Private Instances (Private Subnet)

4. Systems Manager Session Manager

  • SSH 키 불필요
  • 포트 22 열 필요 없음
  • 감사 로그 자동 기록
  • IAM 권한으로 접근 제어
# Session Manager로 접속 aws ssm start-session --target i-1234567890abcdef0

비용 최적화 전략

1. 인스턴스 예약

  • 온디맨드: 시간당 $0.0116 (t3.micro)
  • 1년 예약: 40% 할인
  • 3년 예약: 60% 할인

2. 스팟 인스턴스 활용

개발/테스트 환경: 100% 스팟 웹 서버 (Stateless): 70% 예약 + 30% 스팟 데이터베이스: 100% 예약

3. 적절한 크기 조정

# CPU 사용률 확인 (지난 14일) aws cloudwatch get-metric-statistics \ --namespace AWS/EC2 \ --metric-name CPUUtilization \ --dimensions Name=InstanceId,Value=i-1234567890abcdef0 \ --start-time 2024-11-03T00:00:00Z \ --end-time 2024-11-17T00:00:00Z \ --period 86400 \ --statistics Average # 평균 CPU < 10% → 다운사이징 검토
💡
  • 다중 AZ 배치로 고가용성 확보
  • 배치 그룹으로 성능 최적화
  • ENI로 유연한 네트워크 관리
  • 계층화된 보안 그룹 설계
  • 비용과 성능의 균형 고려
Share article

silver