AWS EC2 Basics 정리
AWSEC2Security GroupDVA-C02
작성자 : 오예환 | 작성일 : 2026-01-04 | 수정일 : 2026-01-04
1. Amazon EC2 개요
🤔 EC2가 뭔가요?
비유로 이해하기: EC2는 클라우드에 있는 내 컴퓨터입니다.
- 집에서 데스크톱 PC를 사는 대신
- AWS에서 가상 컴퓨터를 빌려서 사용
- 필요할 때 켜고, 안 쓸 때 끄면 사용한 만큼만 요금!
EC2 = Elastic Compute Cloud
┌─────────────────────────────────────────────────────────────────┐
│ EC2의 의미 │
│ │
│ Elastic = 탄력적으로 크기 조절 가능 │
│ Compute = 컴퓨팅 파워 (CPU, RAM) │
│ Cloud = 클라우드에서 제공 │
│ │
│ = Infrastructure as a Service (IaaS) │
│ = 인프라를 서비스로 제공 │
│ │
└─────────────────────────────────────────────────────────────────┘EC2와 함께 사용하는 것들
| 서비스 | 역할 | 비유 |
|---|---|---|
| EC2 | 가상 머신 | 컴퓨터 본체 |
| EBS | 가상 디스크 | 하드드라이브 |
| ELB | 로드 밸런서 | 트래픽 분배기 |
| ASG | 오토 스케일링 | 자동 증설 |
왜 EC2를 알아야 하나요?
EC2는 AWS의 가장 기본!
온프레미스 (예전 방식):
서버 구매 → 설치 → 유지보수 → 업그레이드...
💰 초기 비용 높음, 🕐 시간 오래 걸림
클라우드 (EC2):
클릭 몇 번 → 서버 생성! → 필요 없으면 삭제
💰 사용한 만큼만, ⚡ 몇 분 만에 생성2. EC2 구성 옵션
🤔 EC2를 만들 때 뭘 선택해야 하나요?
비유로 이해하기: 조립 컴퓨터 주문과 같습니다.
- CPU는 어떤 걸로? (인스턴스 타입)
- RAM은 몇 GB? (메모리)
- 하드디스크는? (스토리지)
- 운영체제는? (AMI)
선택 옵션
┌─────────────────────────────────────────────────────────────────┐
│ EC2 인스턴스 구성 요소 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 운영체제 (OS) │ │
│ │ ├─ Linux (Amazon Linux, Ubuntu, RHEL...) │ │
│ │ ├─ Windows Server │ │
│ │ └─ Mac OS │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 컴퓨팅 파워 │ │
│ │ ├─ CPU (vCPU 개수) │ │
│ │ └─ RAM (메모리 크기) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 스토리지 │ │
│ │ ├─ EBS (네트워크 드라이브, 영구 저장) │ │
│ │ ├─ EFS (공유 파일 시스템) │ │
│ │ └─ Instance Store (로컬 SSD, 임시 저장) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 네트워크 │ │
│ │ ├─ 네트워크 카드 속도 │ │
│ │ └─ Public IP (외부 접근용) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 방화벽 │ │
│ │ └─ Security Group (접근 제어) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 부트스트랩 스크립트 │ │
│ │ └─ EC2 User Data (첫 시작 시 실행할 명령) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘3. EC2 User Data
🤔 User Data가 뭔가요?
비유로 이해하기: 새 컴퓨터 초기 설정 자동화와 같습니다.
- 새 컴퓨터 사면: 윈도우 업데이트, 프로그램 설치, 설정...
- User Data: EC2가 처음 시작할 때 자동으로 실행할 스크립트
User Data 특징
| 특징 | 설명 |
|---|---|
| 실행 시점 | 인스턴스 첫 시작 시 1번만 |
| 실행 권한 | root 사용자로 실행 |
| 용도 | 초기 설정 자동화 |
사용 예시
#!/bin/bash
# EC2 User Data 예시
# 1. 시스템 업데이트
yum update -y
# 2. 웹 서버 설치
yum install -y httpd
# 3. 웹 서버 시작
systemctl start httpd
systemctl enable httpd
# 4. 간단한 웹 페이지 생성
echo "<h1>Hello from EC2!</h1>" > /var/www/html/index.html실제 사용 사례
| 사례 | User Data 내용 |
|---|---|
| 웹 서버 | nginx/apache 설치, 설정 |
| Node.js 앱 | Node.js 설치, 앱 클론, npm install |
| Docker 컨테이너 | Docker 설치, 이미지 pull, 컨테이너 실행 |
| 모니터링 | CloudWatch Agent 설치 |
초보자 팁: User Data는 디버깅이 어려움! → 복잡한 설정은 AMI로 미리 만들어두는 것 추천
4. EC2 인스턴스 타입
🤔 인스턴스 타입이 뭔가요?
비유로 이해하기: 자동차 등급과 같습니다.
- 경차(t2.micro): 가볍고 저렴, 일상용
- 세단(m5.large): 균형 잡힌 성능
- 스포츠카(c5.xlarge): 고성능, 빠름
- 트럭(r5.xlarge): 짐(메모리) 많이 싣기
인스턴스 타입 명명 규칙
┌─────────────────────────────────────────────────────────────────┐
│ m5.2xlarge 분석 │
│ │
│ m 5 . 2xlarge │
│ │ │ │ │
│ │ │ └─ 크기 (nano < micro < small │
│ │ │ < medium < large < xlarge │
│ │ │ < 2xlarge < 4xlarge ...) │
│ │ │ │
│ │ └─ 세대 (숫자가 클수록 최신, 더 좋음) │
│ │ │
│ └─ 인스턴스 클래스 (용도별 분류) │
│ t = 범용 (버스트) │
│ m = 범용 (일반) │
│ c = 컴퓨팅 최적화 │
│ r = 메모리 최적화 │
│ i = 스토리지 최적화 │
│ │
└─────────────────────────────────────────────────────────────────┘인스턴스 타입 카테고리
1️⃣ General Purpose (범용) - T, M 시리즈
균형 잡힌 성능: CPU, 메모리, 네트워크
사용 사례:
├─ 웹 서버
├─ 코드 저장소
├─ 개발/테스트 환경
└─ 소규모 데이터베이스
예시: t2.micro, t3.medium, m5.large, m6i.xlarget2.micro는 무료 티어! → AWS 학습 시 사용
2️⃣ Compute Optimized (컴퓨팅 최적화) - C 시리즈
CPU 성능이 중요한 작업
사용 사례:
├─ 배치 처리
├─ 미디어 트랜스코딩 (영상 변환)
├─ 고성능 웹 서버
├─ 과학 모델링 / 머신러닝
├─ 게임 서버
└─ HPC (고성능 컴퓨팅)
예시: c5.large, c6i.xlarge, c7g.2xlarge3️⃣ Memory Optimized (메모리 최적화) - R, X, z 시리즈
메모리에서 대용량 데이터 처리
사용 사례:
├─ 고성능 데이터베이스
├─ 분산 캐시 (Redis, Memcached)
├─ 인메모리 데이터베이스
├─ 실시간 빅데이터 처리
└─ BI (비즈니스 인텔리전스)
예시: r5.large, r6i.xlarge, x2idn.xlarge4️⃣ Storage Optimized (스토리지 최적화) - I, D, H 시리즈
대용량 데이터 읽기/쓰기
사용 사례:
├─ OLTP 시스템 (고빈도 트랜잭션)
├─ 관계형/NoSQL 데이터베이스
├─ 데이터 웨어하우스
├─ 분산 파일 시스템
└─ 캐시 (Redis 등)
예시: i3.large, d2.xlarge, h1.2xlarge인스턴스 타입 비교 표
| 인스턴스 | vCPU | 메모리 | 용도 |
|---|---|---|---|
| t2.micro | 1 | 1 GB | 무료 티어, 테스트 |
| t3.medium | 2 | 4 GB | 개발 환경 |
| m5.large | 2 | 8 GB | 범용 프로덕션 |
| c5.xlarge | 4 | 8 GB | CPU 집약적 |
| r5.large | 2 | 16 GB | 메모리 집약적 |
💡 유용한 사이트: https://instances.vantage.sh 모든 EC2 인스턴스 타입과 가격 비교!
5. Security Groups (보안 그룹)
🤔 Security Group이 뭔가요?
비유로 이해하기: EC2 앞에 있는 보안 경비원입니다.
- "22번 포트로 오는 사람? 들어와도 됨"
- "80번 포트로 오는 모든 사람? OK"
- "3306번 포트? 특정 IP만 허용"
Security Group = 방화벽
┌─────────────────────────────────────────────────────────────────┐
│ Security Group 개념 │
│ │
│ ┌───────────────┐ │
│ 인터넷 │ │ │
│ │ │ Security │ ┌──────────┐ │
│ ┌────┴────┐ │ Group │ │ EC2 │ │
│ │ 요청 1 │──────▶│ (방화벽) │────────▶│ Instance │ │
│ │ Port 80 │ ✅ │ │ ✅ │ │ │
│ └─────────┘ │ ┌───────────┐ │ └──────────┘ │
│ │ │ Inbound: │ │ │
│ ┌─────────┐ │ │ Port 80 ✅│ │ │
│ │ 요청 2 │──────▶│ │ Port 22 ✅│ │ │
│ │Port 3306│ ❌ │ │ Port 3306❌│ │ │
│ └─────────┘ │ └───────────┘ │ │
│ │ │ │
│ │ ┌───────────┐ │ │
│ │ │ Outbound: │ │ │
│ │ │ All ✅ │ │ │
│ │ └───────────┘ │ │
│ └───────────────┘ │
│ │
│ ⚠️ 차단된 요청은 EC2에 도달하지도 않음! │
│ │
└─────────────────────────────────────────────────────────────────┘Security Group 규칙
| 규칙 | 설명 |
|---|---|
| Inbound | 외부 → EC2 (들어오는 트래픽) |
| Outbound | EC2 → 외부 (나가는 트래픽) |
기본 설정
| 방향 | 기본값 |
|---|---|
| Inbound | 모두 차단 ❌ |
| Outbound | 모두 허용 ✅ |
Security Group 규칙 예시
┌─────────────────────────────────────────────────────────────────┐
│ Inbound Rules 예시 │
│ │
│ Type Protocol Port Source Description │
│ ───────────────────────────────────────────────────────────── │
│ SSH TCP 22 My IP 내 IP만 SSH │
│ HTTP TCP 80 0.0.0.0/0 모든 곳에서 웹 │
│ HTTPS TCP 443 0.0.0.0/0 모든 곳에서 HTTPS│
│ Custom TCP TCP 3000 0.0.0.0/0 Node.js 개발서버│
│ MySQL TCP 3306 sg-12345 특정 SG에서만 │
│ │
└─────────────────────────────────────────────────────────────────┘Security Group 알아야 할 것들
✅ 알아야 할 특징
| 특징 | 설명 |
|---|---|
| 다중 연결 | 하나의 SG를 여러 EC2에 연결 가능 |
| 리전/VPC 종속 | 다른 리전/VPC에서 사용 불가 |
| EC2 외부 | 트래픽이 차단되면 EC2는 모름 |
| SSH용 SG 분리 | SSH(22)는 별도 SG로 관리 권장 |
🔍 트러블슈팅
문제: 애플리케이션에 접속이 안 돼요!
타임아웃 (Timeout):
→ Security Group 문제일 확률 높음!
→ 해당 포트가 Inbound에 허용되어 있는지 확인
Connection Refused:
→ Security Group은 OK
→ 애플리케이션이 안 돌아가거나 포트가 다름Security Group 참조
다른 Security Group을 규칙에 사용 가능!
┌─────────────────────────────────────────────────────────────────┐
│ SG 참조 예시 │
│ │
│ ┌──────────────────────────────────────────────┐ │
│ │ Security Group 1 │ │
│ │ Inbound: │ │
│ │ - Port 80 from SG-2 ✅ │ │
│ │ - Port 80 from SG-3 ❌ │ │
│ └──────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────┼──────────────┐ │
│ ↓ ↓ ↓ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ EC2 A │ │ EC2 B │ │ EC2 C │ │
│ │ SG-2 │ │ SG-2 │ │ SG-3 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ ✅ ✅ ❌ │
│ (접근 가능) (접근 가능) (접근 불가) │
│ │
│ 장점: IP가 바뀌어도 SG만 맞으면 OK! │
│ │
└─────────────────────────────────────────────────────────────────┘알아야 할 포트 번호
| 포트 | 프로토콜 | 용도 |
|---|---|---|
| 22 | SSH | Linux 접속 |
| 21 | FTP | 파일 전송 |
| 22 | SFTP | 보안 파일 전송 (SSH 사용) |
| 80 | HTTP | 웹 (비암호화) |
| 443 | HTTPS | 웹 (암호화) |
| 3389 | RDP | Windows 접속 |
| 3306 | MySQL | MySQL DB |
| 5432 | PostgreSQL | PostgreSQL DB |
6. SSH 접속 방법
🤔 SSH가 뭔가요?
비유로 이해하기: 원격 리모컨과 같습니다.
- TV 앞에 안 가도 리모컨으로 조작하듯이
- EC2 앞에 안 가도 SSH로 명령 실행!
SSH 접속 방법 요약
| OS | 방법 |
|---|---|
| Mac / Linux | 터미널에서 ssh 명령 |
| Windows ≥ 10 | PowerShell에서 ssh 명령 |
| Windows < 10 | Putty 프로그램 |
| 모든 OS | EC2 Instance Connect (브라우저) |
SSH 접속 예시 (Mac/Linux)
# 1. 키 파일 권한 설정 (최초 1회)
chmod 400 my-key.pem
# 2. SSH 접속
ssh -i my-key.pem ec2-user@54.123.45.67
# │ │ │
# │ │ └─ EC2의 Public IP
# │ └─ 사용자명 (Amazon Linux는 ec2-user)
# └─ 키 파일 경로EC2 Instance Connect
가장 쉬운 방법! 브라우저에서 바로 접속
┌─────────────────────────────────────────────────────────────────┐
│ EC2 Instance Connect │
│ │
│ 1. AWS Console → EC2 → 인스턴스 선택 │
│ 2. "Connect" 버튼 클릭 │
│ 3. "EC2 Instance Connect" 탭 선택 │
│ 4. "Connect" 클릭 │
│ │
│ ✅ 장점: │
│ - 키 파일 필요 없음! │
│ - AWS가 임시 키를 자동 업로드 │
│ - 브라우저에서 바로 터미널 │
│ │
│ ⚠️ 주의: │
│ - Amazon Linux 2에서만 기본 지원 │
│ - 포트 22는 여전히 열려 있어야 함! │
│ │
└─────────────────────────────────────────────────────────────────┘SSH 트러블슈팅
| 문제 | 원인 | 해결 |
|---|---|---|
| 타임아웃 | Security Group | 포트 22 Inbound 열기 |
| Permission denied | 키 권한 | chmod 400 key.pem |
| Connection refused | SSH 서버 | EC2 상태 확인 |
7. EC2 구매 옵션
🤔 왜 여러 구매 옵션이 있나요?
비유로 이해하기: 호텔 예약과 같습니다.
- 당일 예약 (On-Demand): 비싸지만 자유로움
- 장기 계약 (Reserved): 저렴하지만 기간 약속
- 빈 방 경매 (Spot): 매우 저렴하지만 언제든 쫓겨날 수 있음
구매 옵션 한눈에 보기
┌─────────────────────────────────────────────────────────────────┐
│ EC2 구매 옵션 비교 │
│ │
│ 비용 ↑ │
│ │ │
│ │ ┌─────────────────┐ │
│ │ │ Dedicated Host │ 전용 물리 서버 (가장 비쌈) │
│ │ └─────────────────┘ │
│ │ ┌─────────────────┐ │
│ │ │ On-Demand │ 정가 (시간당 결제) │
│ │ └─────────────────┘ │
│ │ ┌─────────────────┐ │
│ │ │ Reserved │ 1~3년 약정 (최대 72% 할인) │
│ │ └─────────────────┘ │
│ │ ┌─────────────────┐ │
│ │ │ Savings Plans │ 사용량 약정 (최대 72% 할인) │
│ │ └─────────────────┘ │
│ │ ┌─────────────────┐ │
│ │ │ Spot │ 남는 자원 경매 (최대 90% 할인!) │
│ │ └─────────────────┘ │
│ │ │
│ └─────────────────────────────────────────────────────────→ │
│ 안정성 ↑ │
│ │
└─────────────────────────────────────────────────────────────────┘1️⃣ On-Demand (온디맨드)
특징:
├─ 사용한 만큼 결제 (Linux: 초당, Windows: 시간당)
├─ 가장 비쌈 (but 선결제 없음)
├─ 장기 약정 없음
└─ 언제든 시작/중지
추천 상황:
├─ 단기 워크로드
├─ 예측 불가능한 사용 패턴
└─ 개발/테스트 환경2️⃣ Reserved Instances (예약 인스턴스)
특징:
├─ 1년 또는 3년 약정
├─ 최대 72% 할인
├─ 특정 인스턴스 타입/리전/OS 고정
└─ 선결제 옵션 (No/Partial/All Upfront)
추천 상황:
├─ 24/7 운영 서버
├─ 데이터베이스
└─ 예측 가능한 사용량
종류:
├─ Standard RI: 변경 불가, 할인 큼 (72%)
└─ Convertible RI: 변경 가능, 할인 적음 (66%)선결제 옵션:
| 옵션 | 설명 | 할인 |
|---|---|---|
| No Upfront | 선결제 없음 | 적음 |
| Partial Upfront | 일부 선결제 | 중간 |
| All Upfront | 전액 선결제 | 최대 |
3️⃣ Savings Plans (절감 플랜)
특징:
├─ "시간당 $10 쓸게요" 식으로 약정
├─ 최대 72% 할인 (RI와 동일)
├─ 인스턴스 패밀리 + 리전 고정
├─ 인스턴스 크기/OS/테넌시는 유연
└─ 초과 사용분은 On-Demand 가격
예시:
"us-east-1에서 M5 패밀리에 시간당 $10 약정"
→ m5.large, m5.xlarge, m5.2xlarge 모두 사용 가능
→ Linux, Windows 모두 가능4️⃣ Spot Instances (스팟 인스턴스)
특징:
├─ 최대 90% 할인! (가장 저렴)
├─ 언제든 중단될 수 있음! ⚠️
├─ 남는 EC2 용량을 경매 방식으로
└─ 입찰가 < 현재가 → 인스턴스 종료됨
추천 상황:
├─ 배치 작업
├─ 데이터 분석
├─ 이미지 처리
├─ 분산 워크로드
└─ 시작/종료 시간이 유연한 작업
비추천:
├─ 데이터베이스 ❌
├─ 중요한 서비스 ❌
└─ 중단되면 안 되는 작업 ❌5️⃣ Dedicated Hosts (전용 호스트)
특징:
├─ 물리 서버 전체를 단독 사용
├─ 가장 비쌈
├─ 서버 배치 제어 가능
└─ 소켓/코어 단위 라이선스에 적합
추천 상황:
├─ 라이선스 규정 준수 (BYOL)
├─ 규제/컴플라이언스 요구사항
└─ 물리 서버 격리 필요6️⃣ Capacity Reservations (용량 예약)
특징:
├─ 특정 AZ에 용량 예약
├─ 할인 없음 (On-Demand 가격)
├─ 기간 약정 없음
├─ 사용 안 해도 요금 발생
└─ RI, Savings Plans와 결합 가능
추천 상황:
├─ 특정 AZ에 반드시 인스턴스 필요
├─ 재해 복구
└─ 중요 이벤트 대비구매 옵션 비교표
| 옵션 | 할인 | 약정 | 중단 | 용도 |
|---|---|---|---|---|
| On-Demand | 없음 | 없음 | ❌ | 단기, 테스트 |
| Reserved | ~72% | 1-3년 | ❌ | 24/7 서버, DB |
| Savings Plans | ~72% | 1-3년 | ❌ | 유연한 사용 |
| Spot | ~90% | 없음 | ✅ | 배치, 분석 |
| Dedicated Host | ~70% | 선택 | ❌ | 라이선스, 규제 |
| Capacity Reservation | 없음 | 없음 | ❌ | 용량 확보 |
호텔 비유로 정리
┌─────────────────────────────────────────────────────────────────┐
│ 호텔 비유 │
│ │
│ On-Demand = 당일 예약, 정가 │
│ Reserved = 1년 계약, 할인 (매달 같은 방) │
│ Savings Plans = 1년 계약, 할인 (방 타입은 자유) │
│ Spot = 빈 방 경매 (쫓겨날 수 있음) │
│ Dedicated Host = 호텔 건물 전체 대여 │
│ Capacity Res. = 방 예약만 (사용 안 해도 요금) │
│ │
└─────────────────────────────────────────────────────────────────┘핵심 요약
인스턴스 타입 선택
| 용도 | 타입 | 시리즈 |
|---|---|---|
| 일반 웹 서버 | 범용 | T, M |
| CPU 집약 (ML, 배치) | 컴퓨팅 | C |
| 대용량 메모리 (DB, 캐시) | 메모리 | R, X |
| 고성능 스토리지 | 스토리지 | I, D |
Security Group 핵심
| 항목 | 기본값 |
|---|---|
| Inbound | 모두 차단 ❌ |
| Outbound | 모두 허용 ✅ |
구매 옵션 선택
| 상황 | 추천 |
|---|---|
| 단기/테스트 | On-Demand |
| 24/7 운영 서버 | Reserved |
| 유연한 장기 사용 | Savings Plans |
| 배치/분석 (중단 OK) | Spot |
| 라이선스 규정 | Dedicated Host |