Study
10 min read
AWS 핵심 서비스 — EC2, S3, RDS, VPC로 클라우드 인프라 구성하기
Docker와 Kubernetes는 애플리케이션 배포 도구다. 그 애플리케이션이 실제로 돌아갈 서버(인프라)는? AWS는 On-demand 방식으로 필요한 컴퓨팅, 스토리지, 데이터베이스를 빌려주는 클라우드 플랫폼이다. EC2·S3·RDS·VPC의 역할과 실무 사용법을 정리한다.
Series
배포 환경 이해하기- 1Container와 Docker 기초 — 왜 필요하고 어떻게 작동하는가
- 2Kubernetes 핵심 — Pod, Service, Deployment가 하는 일
- 3AWS 핵심 서비스 — EC2, S3, RDS, VPC로 클라우드 인프라 구성하기
- 4배포 전략 — Blue-Green, Canary, Rolling Deployment 무중단 배포의 기술
- 5GitOps와 CI/CD — GitHub Actions에서 Kubernetes까지 자동화 배포 파이프라인
- 6모니터링·로깅 — Prometheus, Grafana, ELK Stack으로 운영 환경 관찰하기
💡
한 줄 요약 — AWS는 클라우드 인프라 제공자다. **EC2(서버) + S3(파일) + RDS(DB) + VPC(네트워크)**의 조합으로 전체 웹 애플리케이션 아키텍처를 구성할 수 있다.
Docker와 Kubernetes까지 배웠다면, 이제 질문이 생긴다: "이 앱들이 실제로 돌아갈 서버는 어디에?"
전통적으로는:
- 물리 서버를 구입 (비싸고, 유지보수 필요)
- 데이터센터에 설치 (전기, 냉각, 보안 담당)
- 트래픽 늘면 서버 추가 구입 (또 기다려야 함)
**AWS(Amazon Web Services)**는 다른 방식을 제안한다:
필요한 만큼만 빌려쓰고, 필요없으면 반납. 비용은 사용한 만큼만.
이것이 클라우드 컴퓨팅이고, AWS는 가장 큰 클라우드 제공자다.
AWS의 4가지 핵심 서비스
1. EC2 — 서버 (Elastic Compute Cloud)
역할: "클라우드에서 빌린 서버"
개념
On-Premise (전통)
├─ 물리 서버 구입 ($5,000)
├─ 데이터센터 배치 (1주일 소요)
└─ 고정 비용 (유휴할 때도 돈 냄)
AWS EC2 (클라우드)
├─ 콘솔에서 인스턴스 생성 (2분)
├─ 필요할 때만 켜기 (Pay-as-you-go)
└─ 안 쓰면 즉시 종료
인스턴스 타입
| 타입 | vCPU | 메모리 | 용도 | 시간당 비용 |
|---|---|---|---|---|
| t2.micro | 1 | 1GB | 소규모 앱, 테스트 | $0.01 |
| t2.small | 1 | 2GB | 웹 서버 | $0.02 |
| m5.large | 2 | 8GB | 중규모 앱 | $0.10 |
| c5.xlarge | 4 | 8GB | CPU 집약적 | $0.17 |
프리티어 (무료):
- t2.micro: 월 750시간 무료 (충분히 24/7 운영 가능)
- 1년 동안 무료 (신규 가입자)
사용 방식
# 1. 콘솔에서 인스턴스 생성
AWS Console → EC2 → Instances → Launch Instance
# 2. 설정
- AMI (이미지): Ubuntu 20.04, Amazon Linux 2 등 선택
- 인스턴스 타입: t2.micro 선택
- 스토리지: 30GB 설정
- 보안: 포트 22(SSH), 80(HTTP), 443(HTTPS) 열기
# 3. 생성 → 공개 IP 할당 받음 (예: 54.123.45.67)
# 4. SSH 접속
$ ssh -i my-key.pem ec2-user@54.123.45.67
# 5. 앱 배포
$ docker pull my-app:1.0
$ docker run -d -p 80:8000 my-app:1.0Elastic Load Balancer (ALB)
한 대의 EC2로 충분하지 않으면:
Client 요청
↓
Application Load Balancer
↓
├─ EC2 Instance 1
├─ EC2 Instance 2
└─ EC2 Instance 3
자동으로 요청을 3개 인스턴스에 분산.
Auto Scaling
트래픽이 늘면 자동으로 인스턴스 추가:
트래픽 10% 증가 감지
↓
Auto Scaling Group이 판단
↓
EC2 인스턴스 2개 추가 생성
↓
3개 → 5개 인스턴스로 자동 확장 ✅
2. S3 — 파일 저장소 (Simple Storage Service)
역할: 무제한 파일 저장, 언제 어디서나 접근
개념
EC2 인스턴스의 디스크 크기는 제한적 (보통 30~100GB)
→ 더 많은 파일 필요 시?
S3: 사실상 무제한 스토리지 (몇 PB까지 가능)
버킷(디렉토리) 생성 → 파일 업로드
→ URL로 누구나 다운로드 가능
버킷과 객체
S3
└─ my-app-bucket (버킷 = 최상위 디렉토리)
├─ images/
│ ├─ profile-1.jpg
│ ├─ profile-2.jpg
│ └─ ...
├─ uploads/
│ └─ document.pdf
└─ ...
사용 사례
1. 정적 파일 호스팅:
웹사이트의 JS, CSS, 이미지 저장
→ S3 URL로 제공
→ 저렴하고 빠름 (CDN 연계 가능)
2. 로그 저장:
앱에서 생성되는 대량의 로그
→ EC2 디스크가 가득 찬다
→ S3에 자동 저장
→ 분석 필요 시 조회
3. 백업:
RDS 스냅샷 → S3에 자동 저장
EC2 인스턴스 이미지 → S3에 저장
접근 방식
# AWS CLI
$ aws s3 cp my-file.txt s3://my-bucket/
# Python SDK
import boto3
s3 = boto3.client('s3')
s3.put_object(Bucket='my-bucket', Key='my-file.txt', Body=b'content')
# 웹 URL로 공개 (ACL 설정 시)
https://my-bucket.s3.amazonaws.com/my-file.txt가격
| 스토리지 | 가격 |
|---|---|
| 첫 1GB | 무료 (프리티어) |
| 1GB ~ 1TB | $0.023/GB |
| 1TB 이상 | $0.022/GB |
(데이터 전송 비용 별도)
3. RDS — 데이터베이스 (Relational Database Service)
역할: 관리형 데이터베이스 서비스
개념
전통: EC2에 데이터베이스 설치
├─ PostgreSQL 설치
├─ 백업 스케줄 관리
├─ 패치 및 업그레이드 수동
└─ 높은 복잡성
RDS: 완전 관리형
├─ AWS가 자동 백업
├─ 자동 패치
├─ 자동 장애 복구 (Multi-AZ)
└─ 콘솔에서 클릭만 하면 끝
지원 엔진
- PostgreSQL
- MySQL
- MariaDB
- Oracle
- SQL Server
사용 방식
# 1. 콘솔에서 DB 인스턴스 생성
AWS Console → RDS → Create Database
- Engine: PostgreSQL 14
- Instance class: db.t3.micro (프리티어)
- Storage: 20GB
- Username: admin
- Password: secure_password
# 2. 엔드포인트 받음 (예: mydb.c9akciq32.us-east-1.rds.amazonaws.com)
# 3. 애플리케이션에서 연결
DATABASE_URL=postgresql://admin:password@mydb.c9akciq32.us-east-1.rds.amazonaws.com:5432/mydb
# 4. EC2 인스턴스에서 접속
$ psql -h mydb.c9akciq32.us-east-1.rds.amazonaws.com -U admin주요 기능
자동 백업:
매일 백업 생성 (최대 35일 보관)
특정 시점으로 복구 가능
읽기 복제본 (Read Replica):
Primary DB (쓰기)
↓
Read Replica 1 (읽기만, 다른 리전)
Read Replica 2 (읽기만, 다른 리전)
조회가 많으면 → Replica에서 조회
Multi-AZ (고가용성):
Primary (us-east-1a)
↓
동기 복제
↓
Standby (us-east-1b)
Primary 장애 발생 → 자동으로 Standby로 failover
가격
- db.t3.micro: 12/월)
- 프리티어: 12개월 750GB 저장소 + 백업 무료
4. VPC — 네트워크 (Virtual Private Cloud)
역할: AWS 리소스들을 위한 가상 네트워크
개념
VPC (Virtual Private Cloud)
│
├─ Public Subnet (인터넷 접근 가능)
│ └─ EC2 인스턴스 (웹 서버)
│ Port: 80, 443 열림
│
├─ Private Subnet (인터넷 차단)
│ └─ RDS 인스턴스 (데이터베이스)
│ EC2에서만 접근 가능
│
└─ Route Table (라우팅 규칙)
├─ 0.0.0.0/0 → Internet Gateway (외부 통신)
└─ VPC 내부 → 내부 통신
보안 그룹 (Security Groups)
방화벽처럼 작동:
EC2 보안 그룹:
Inbound:
- Port 22 (SSH): 0.0.0.0/0 (모든 IP에서 접근 가능)
- Port 80 (HTTP): 0.0.0.0/0
- Port 443 (HTTPS): 0.0.0.0/0
Outbound:
- 모든 트래픽 허용
RDS 보안 그룹:
Inbound:
- Port 5432 (PostgreSQL): EC2 보안그룹에서만
Outbound:
- 모든 트래픽 허용이렇게 하면 RDS는 EC2를 통해서만 접근 가능.
실전: 웹 애플리케이션 아키텍처
┌─────────────────────────────────────────┐
│ 인터넷 (0.0.0.0/0) │
└────────────────┬────────────────────────┘
│
┌───────▼────────┐
│ Route 53 DNS │
│ (example.com) │
└───────┬────────┘
│
┌───────▼──────────────┐
│ Application Load │
│ Balancer (ALB) │
└───────┬──────────────┘
│
┌──────────┼──────────┐
│ │ │
┌─────▼─┐ ┌─────▼─┐ ┌─────▼─┐
│ EC2-1 │ │ EC2-2 │ │ EC2-3 │ (Auto Scaling)
│ :8000 │ │ :8000 │ │ :8000 │
└───────┘ └───────┘ └───────┘
│ │ │
└──────────┼──────────┘
│ (Private Subnet)
┌───────▼──────────┐
│ RDS PostgreSQL │
│ (Multi-AZ) │
└──────────────────┘
│
┌───────▼──────────┐
│ S3 (Logs, Files) │
└──────────────────┘
흐름:
- 사용자가
example.com접속 - Route 53이 ALB의 IP로 라우팅
- ALB가 EC2 3개에 요청 분산
- EC2가 RDS에 쿼리 실행 (Private Subnet 통신)
- 업로드 파일은 S3에 저장
- 로그는 CloudWatch로 수집
비용 관리 팁
- 프리티어 최대 활용: EC2 t2.micro, RDS db.t3.micro, S3 5GB는 무료
- 언제 사용할지 명확히: 테스트할 때만 켜고, 안 쓸 때는 종료
- AWS Pricing Calculator: 예상 비용 계산
- Cost Explorer: 실제 사용 비용 모니터링
- Reserved Instance: 1년 선결제 시 40~60% 할인
핵심 정리
| 서비스 | 역할 | 가격 예시 |
|---|---|---|
| EC2 | 서버 | $0.01/시간 (t2.micro) |
| S3 | 파일 저장소 | $0.023/GB |
| RDS | 데이터베이스 | $0.017/시간 (db.t3.micro) |
| VPC | 네트워크 | 무료 |
다음 글 예고
- 배포 전략: Blue-Green, Canary, Rolling... 무중단 배포 방식 비교