스케일링
Scaling
시스템 용량을 조절하는 것. 수직 스케일링(더 큰 서버), 수평 스케일링(더 많은 서버)으로 구분.
Scaling
시스템 용량을 조절하는 것. 수직 스케일링(더 큰 서버), 수평 스케일링(더 많은 서버)으로 구분.
스케일링(Scaling)은 시스템의 처리 용량을 늘리거나 줄이는 것입니다. 트래픽 증가에 대응하고, 비용을 최적화하며, 서비스 가용성을 유지하기 위해 필수적인 기술입니다.
수직 스케일링(Vertical/Scale-Up)은 단일 서버의 리소스(CPU, RAM)를 증가시킵니다. 간단하지만 물리적 한계가 있고 다운타임이 필요할 수 있습니다. 수평 스케일링(Horizontal/Scale-Out)은 서버 수를 늘려 부하를 분산합니다. 무중단으로 확장 가능하지만 상태 관리가 복잡합니다.
클라우드 환경에서는 Auto Scaling으로 메트릭 기반 자동 확장/축소를 구현합니다. CPU 사용률 70% 초과 시 인스턴스 추가, 30% 미만 시 축소하는 식입니다. Kubernetes HPA(Horizontal Pod Autoscaler)가 대표적입니다.
실무에서는 Stateless 설계로 수평 확장이 용이하게 합니다. 세션은 Redis에, 파일은 S3에 저장하여 각 인스턴스가 독립적으로 동작하도록 합니다. 데이터베이스는 읽기 복제본으로 수평 확장하고, 쓰기 분산에는 샤딩을 적용합니다.
# Kubernetes HPA (Horizontal Pod Autoscaler)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
behavior:
scaleDown:
stabilizationWindowSeconds: 300 # 축소 전 5분 대기
policies:
- type: Percent
value: 10
periodSeconds: 60 # 분당 10%씩 축소
scaleUp:
stabilizationWindowSeconds: 0 # 즉시 확장
policies:
- type: Percent
value: 100
periodSeconds: 15 # 15초마다 100%까지 확장
---
# AWS Auto Scaling (Terraform)
resource "aws_autoscaling_group" "web" {
name = "web-asg"
min_size = 2
max_size = 20
desired_capacity = 4
vpc_zone_identifier = var.subnet_ids
launch_template {
id = aws_launch_template.web.id
version = "$Latest"
}
target_group_arns = [aws_lb_target_group.web.arn]
tag {
key = "Name"
value = "web-instance"
propagate_at_launch = true
}
}
resource "aws_autoscaling_policy" "scale_up" {
name = "scale-up"
scaling_adjustment = 2
adjustment_type = "ChangeInCapacity"
cooldown = 300
autoscaling_group_name = aws_autoscaling_group.web.name
}
시니어: "블랙 프라이데이 트래픽 예상이 평소 5배인데, 스케일링 전략 논의해봐요."
주니어: "미리 minReplicas를 10으로 올려두고, HPA max를 50까지 설정하면 어떨까요? 이벤트 후에 다시 원복하고요."
면접관: "수평 스케일링과 수직 스케일링의 차이점과 각각의 장단점은?"
지원자: "수직 스케일링은 구현이 쉽고 기존 아키텍처 유지가 가능하지만 물리적 한계와 비용 효율성 문제가 있습니다. 수평 스케일링은 무한 확장이 가능하고 가용성이 높지만 상태 관리와 분산 시스템 복잡도가 증가합니다."
리뷰어: "scaleDown 정책이 너무 공격적인 것 같아요. 트래픽 패턴 변동이 있으면 thrashing 발생할 수 있어요."
개발자: "stabilizationWindowSeconds를 300초로 늘리고 10%씩 축소하도록 수정하겠습니다."