๐ฆ Stateless Web App โ WhatIsTheTime.com
์๋น์ค ์๊ตฌ์ฌํญ
- ํ์ฌ ์๊ฐ์ ์๋ ค์ฃผ๋ ๋จ์ ์น ์๋น์ค
- โ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ์
- ์ด๊ธฐ์๋ Downtime ํ์ฉ
- ์ต์ข
๋ชฉํ
- Vertical + Horizontal Scaling
- Downtime ์๋ ํ์ฅ
๐งฉ 1๋จ๊ณ โ Starting Simple (๋จ์ผ EC2)
User
โ
Public EC2
+ Elastic IP
- Public EC2
- Elastic IP ์ฌ์ฉ
- ๊ตฌ์กฐ๋ ๋จ์ํ์ง๋ง:
- ๋จ์ผ ์ฅ์ ์ง์ (SPOF)
๐งฉ 2๋จ๊ณ โ Vertical Scaling
User
โ
PublicEC2(ScaleUp)
- ์ธ์คํด์ค ํ์
์
๊ทธ๋ ์ด๋
- ์: t2 โ m5
- ๋ฌธ์ ์
- ์ ๊ทธ๋ ์ด๋ ์ค Downtime ๋ฐ์
- ํ์ฅ ํ๊ณ ์กด์ฌ
๐งฉ 3๋จ๊ณ โ Horizontal Scaling (๋ฌธ์ ๋ฐ์)
User
โ
Route53 (ARecord, TTL1h)
โ
Public EC2 instances (์ฌ๋ฌ ๊ฐ)
- EC2 ์ฌ๋ฌ ๋๋ก ํ์ฅ
- Elastic IP ์ ๊ฑฐ
- Route 53 A Record ์ฌ์ฉ
- ๋ฌธ์
- ์ธ์คํด์ค๊ฐ ์ฌ๋ผ์ ธ๋
- TTL ๋์ ์ฃฝ์ IP๋ก ์์ฒญ ๊ฐ๋ฅ
๐งฉ 4๋จ๊ณ โ Load Balancer ๋์
User
โ
Route53 (Alias)
โ
ELB + HealthCheck
โ
Private EC2
- Load Balancer ๋์
- EC2๋ Private Subnet
- Health Check๋ก ๋น์ ์ ์ธ์คํด์ค ์ ์ธ
- ๋ณด์ ๊ทธ๋ฃน ์ ํ
๐งฉ 5๋จ๊ณ โ Auto Scaling Group
User
โ
Route53 (Alias)
โ
ELB
โ
Auto ScalingGroup
- ์ธ์คํด์ค ์๋ ์ฆ๊ฐ
- ์ฅ์ ์ ์๋ ๋ณต๊ตฌ
- ์ด์ ๋ถ๋ด ๊ฐ์
๐งฉ 6๋จ๊ณ โ Multi-AZ ๊ตฌ์ฑ
User
โ
Route53
โ
ELB (Multi-AZ)
โ
ASG (AZ1,2,3)
- ์ต์ 2๊ฐ AZ ์ด์
- AZ ์ฅ์ ์๋ ์๋น์ค ์ ์ง
- ๊ณ ๊ฐ์ฉ์ฑ ํ๋ณด
๐งฉ 7๋จ๊ณ โ Reserved Instances
- ์ต์ ์ธ์คํด์ค ์๋งํผ
- Reserved Instances ๊ตฌ๋งค
- ๋ชฉ์
- ๋น์ฉ ์ ๊ฐ
- ๊ธฐ๋ณธ ์ฉ๋ ํ๋ณด
๐ WhatIsTheTime.com ์ ๋ฆฌ
์ด ์ํคํ ์ฒ์์ ๋ค๋ฃฌ ํต์ฌ ๊ฐ๋
- Public vs Private IP
- Elastic IP vs Route 53 vs Load Balancer
- Route 53 TTL / A Record / Alias
- ์๋ ๊ด๋ฆฌ vs Auto Scaling Group
- Multi-AZ
- ELB Health Check
- Security Group ์ค๊ณ
- Reserved Instance๋ก ๋น์ฉ ์ต์ ํ
๐ง Stateful Web App โ MyClothes.com
์๋น์ค ์๊ตฌ์ฌํญ
- ์จ๋ผ์ธ ์ผํ๋ชฐ
- ์ผํ ์นดํธ ์กด์ฌ
- ๋์ ์ฌ์ฉ์ ์๋ฐฑ ๋ช
- ์ํ ํ์ฅ ํ์
- ์น ๊ณ์ธต์ ์ต๋ํ Stateless ์ ์ง
- ์ผํ ์นดํธ ์ ์ค โ
- ์ฌ์ฉ์ ์ ๋ณด DB ํ์
๐งฉ ๊ธฐ๋ณธ ๊ตฌ์กฐ โ Multi-AZ + ASG
User
โ
ELB
โ
ASG (AZ1,2,3)
๐งฉ ๋ฌธ์ 1 โ Session ์ ์ง
โ ๋ฌธ์
- ๋ค๋ฅธ EC2๋ก ์์ฒญ ์ ๋ฌ ์
- ์ผํ ์นดํธ ์ ์ค
๐งฉ ํด๊ฒฐ 1 โ ELB Stickiness
- ๋์ผ ์ฌ์ฉ์๋ฅผ ๋์ผ ์ธ์คํด์ค๋ก ์ ๋ฌ
- ๋จ์
- ์ธ์คํด์ค ์ฅ์ ์ ์ธ์ ์ ์ค
- ํ์ฅ์ฑ ์ ํ
๐งฉ ํด๊ฒฐ 2 โ Cookies ํ์ฉ
- ์ผํ ์นดํธ ์ ๋ณด๋ฅผ ์ฟ ํค์ ์ ์ฅ
- ๋ฌธ์ ์
- HTTP ์์ฒญ ๋ฌด๊ฑฐ์
- ๋ณด์ ์ํ (๋ณ์กฐ ๊ฐ๋ฅ)
- ์ฟ ํค ํฌ๊ธฐ ์ ํ (4KB)
- ์๋ฒ์์ ๊ฒ์ฆ ํ์
๐งฉ ํด๊ฒฐ 3 โ Server Session Store
Web EC2
โ ElastiCache
- ์ฟ ํค์๋ session_id๋ง ์ ์ฅ
- ์ค์ ์ธ์
๋ฐ์ดํฐ๋
- ElastiCache
- (๋์: DynamoDB)
๐งฉ ์ฌ์ฉ์ ๋ฐ์ดํฐ ์ ์ฅ
EC2
โ
Amazon RDS
- ์ฃผ์, ์ด๋ฆ ๋ฑ ์์ ๋ฐ์ดํฐ
- ๊ด๊ณํ DB ์ฌ์ฉ
๐งฉ Read Scaling
๋ฐฉ๋ฒ 1 โ RDS Read Replica
- Read ์ ์ฉ ํ์ฅ
- Master๋ Write ์ ๋ด
๋ฐฉ๋ฒ 2 โ Cache (Lazy Loading)
- ์์ฃผ ์กฐํ๋๋ ๋ฐ์ดํฐ ์บ์
- Cache Miss ์ DB ์ ๊ทผ
๐งฉ Disaster Recovery โ Multi-AZ
- EC2: Multi-AZ
- ElastiCache: Multi-AZ
- RDS: Multi-AZ
๐งฉ Security Group ์ค๊ณ
- ELB โ EC2๋ง ํ์ฉ
- EC2 โ RDS / ElastiCache๋ง ํ์ฉ
- ์ธ๋ถ:
- HTTP / HTTPS๋ง ํ์ฉ (0.0.0.0/0)
๐ MyClothes.com ์ ๋ฆฌ
- 3-Tier Web Architecture
- ELB Sticky Sessions
- Stateless Web ์ค๊ณ
- ElastiCache
- Session Store
- Cache
- Multi-AZ
- RDS + Read Replica
- ๋ณด์ ๊ทธ๋ฃน ์ํธ ์ฐธ์กฐ
๐ฉ Stateful Web App โ MyWordPress.com
์๊ตฌ์ฌํญ
- ์์ ํ์ฅํ WordPress
- ์ด๋ฏธ์ง ์ ๋ก๋ ์ ์ ๋์
- ์ฌ์ฉ์ ๋ฐ์ดํฐ & ์ฝํ ์ธ DB ์ ์ฅ
๐งฉ DB ๊ณ์ธต โ RDS Multi-AZ
EC2
โ
RDS (Multi-AZ)
๐งฉ Aurora ์ฌ์ฉ (๊ถ์ฅ)
- Multi-AZ ๊ธฐ๋ณธ ๋ด์ฅ
- Read Replica ์๋ ์ง์
- ๋์ ์ฑ๋ฅ
๐งฉ ์ด๋ฏธ์ง ์ ์ฅ โ EBS (๋ฌธ์ )
- ๋จ์ผ EC2์๋ง ์ ํฉ
- Multi-AZ์์ ์ด๋ฏธ์ง ๋ถ์ผ์น ๋ฐ์
๐งฉ ์ด๋ฏธ์ง ์ ์ฅ โ EFS (ํด๊ฒฐ)
EC2 (AZ1) โโ
EC2 (AZ2) โโผโ EFS
EC2 (AZ3) โโ
- ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๋์ผ ํ์ผ ์์คํ ์ฌ์ฉ
- ๋ถ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉ
๐ MyWordPress.com ์ ๋ฆฌ
- Aurora๋ก Multi-AZ + Read Replica
- EBS vs EFS ์ฐจ์ด
- ๋ถ์ฐ ์์คํ ์์๋ EFS ํ์
โก Instantiating Applications Quickly
๋ฌธ์
- ํ ์คํ ๋ฐฐํฌ ์
- ์ค์น
- ์ค์
- ๋ฐ์ดํฐ ๋ณต์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆผ
ํด๊ฒฐ ์ ๋ต
EC2
- Golden AMI
- ๋ฏธ๋ฆฌ ์ฑ/์์กด์ฑ ์ค์น
- User Data
- ๋์ ์ค์
- Hybrid
- AMI + User Data (Elastic Beanstalk)
RDS / EBS
- Snapshot ๋ณต์
- ์ด๊ธฐ ๋ฐ์ดํฐ ํฌํจ
๐งฑ ๋ํ์ ์ธ 3-Tier ์ํคํ ์ฒ
Route53
โ
ELB
โ
ASG (Web Tier)
โ
ElastiCache
โ
RDS (Data Tier)
- Public / Private / Data Subnet ๋ถ๋ฆฌ
- Multi-AZ
๐งโ๐ป Developer์ ๋ฌธ์ ์
- ์ธํ๋ผ ๊ด๋ฆฌ ๋ถ๋ด
- ๋ฐฐํฌ ๋ณต์ก์ฑ
- ํ์ฅ ๊ฑฑ์
- ๋๋ถ๋ถ์ ์น์ฑ ๊ตฌ์กฐ๋ ์ ์ฌ
- ๊ฐ๋ฐ์๋ ์ฝ๋ ์คํ๋ง ์ํจ
๐ฑ Elastic Beanstalk
๊ฐ๋ฐ์ ์ค์ฌ PaaS ์๋น์ค
ํน์ง
- EC2, ASG, ELB, RDS ์๋ ๊ตฌ์ฑ
- ์ฉ๋, ๋ก๋๋ฐธ๋ฐ์ฑ, ๋ชจ๋ํฐ๋ง ์๋
- ๊ฐ๋ฐ์๋ ์ฝ๋๋ง ๊ด๋ฆฌ
- ๊ตฌ์ฑ ์ ์ด ๊ฐ๋ฅ
- ์๋น์ค ์์ฒด ๋น์ฉ โ
- underlying ๋ฆฌ์์ค๋ง ๊ณผ๊ธ
๐งฉ Elastic Beanstalk ๊ตฌ์ฑ ์์
- Application
- Application Version
- Environment
- Environment Tier
- Web Server
- Worker
๐งฉ ์ง์ ํ๋ซํผ
- Go, Java, Tomcat
- .NET (Linux / Windows)
- Node.js, PHP, Python, Ruby
- Docker (Single / Multi / Preconfigured)
๐งฉ Web Tier vs Worker Tier
Web Tier
- HTTP ์์ฒญ ์ฒ๋ฆฌ
- ALB ์๋จ
Worker Tier
- SQS ๊ธฐ๋ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ
- ๋ฉ์์ง ์ ๊ธฐ์ค ์ค์ผ์ผ
๐ Elastic Beanstalk ๋ฐฐํฌ ๋ชจ๋
Single Instance
- ๊ฐ๋ฐ ํ๊ฒฝ
- ๋จ์ ๊ตฌ์กฐ
High Availability
- ASG + ALB
- ํ๋ก๋์ ๊ถ์ฅ
- Multi-AZ
- RDS Master / Standby