카오스 테스팅(Chaos Testing, Chaos Engineering)은 프로덕션 환경에 의도적으로 장애를 주입하여 시스템의 복원력과 내결함성을 검증하는 실험적 방법론이다. Netflix의 Chaos Monkey에서 유래했다.
카오스 엔지니어링 원칙 (Chaos Engineering Principles)
1. 정상 상태(Steady State) 정의
- 측정 가능한 시스템 상태: 요청 성공률, 지연시간 등
2. 가설 수립
- "서버 1대 다운되어도 가용성 99.9% 유지"
3. 실제 세계 이벤트 시뮬레이션
- 서버 장애, 네트워크 지연, 디스크 꽉 참
4. 프로덕션에서 실험 (가능하면)
- Staging은 실제 트래픽 패턴 미반영
5. 자동화 + 지속 실행
장애 주입 유형
| 유형 | 설명 |
|---|
| 프로세스 킬 | 서비스 인스턴스 갑작스런 종료 |
| 네트워크 지연 | 레이턴시 주입 (100ms, 1000ms) |
| 패킷 손실 | 네트워크 패킷 일부 드롭 |
| CPU 부하 | CPU 100% 점유 시뮬레이션 |
| 디스크 꽉 참 | 디스크 쓰기 실패 유발 |
| 의존 서비스 다운 | 외부 API 응답 차단 |
| 클락 스큐 | 시간 동기화 오류 시뮬레이션 |
Chaos Monkey / Simian Army
Netflix Simian Army:
- Chaos Monkey: 랜덤 인스턴스 종료
- Latency Monkey: 네트워크 지연 주입
- Conformity Monkey: 모범 사례 미준수 인스턴스 종료
- Doctor Monkey: 비정상 인스턴스 탐지/격리
- Chaos Gorilla: AZ 전체 장애 시뮬레이션
- Chaos Kong: 리전 전체 장애 시뮬레이션
AWS Fault Injection Service (FIS) 예제
json
{
"description": "Inject CPU stress on EC2",
"targets": {
"myInstances": {
"resourceType": "aws:ec2:instance",
"selectionMode": "PERCENT(50)"
}
},
"actions": {
"cpu-stress": {
"actionId": "aws:ssm:send-command",
"parameters": {
"documentArn": "arn:aws:ssm:::document/AWSFIS-Run-CPU-Stress",
"duration": "PT5M"
},
"targets": { "Instances": "myInstances" }
}
},
"stopConditions": [
{ "source": "aws:cloudwatch:alarm", "value": "HighErrorRate" }
]
}
주요 도구
| 도구 | 대상 |
|---|
| Chaos Monkey | AWS EC2 |
| Chaos Toolkit | 멀티 클라우드 |
| LitmusChaos | Kubernetes |
| Gremlin | 엔터프라이즈 SaaS |
| Toxiproxy | 네트워크 프록시 |
| Fault Injection Service | AWS |
관련 문서
- •[[load-testing|부하 테스팅]]
- •[[circuit-breaker|서킷 브레이커]]
- •[[reliability-engineering|신뢰성 엔지니어링]]