가용성(availability)(시스템이 가동되어 접근 가능함)과 신뢰성(reliability)(시스템이 올바르게 동작함)은 핵심 비기능 요구사항입니다. 이를 달성하려면 중복성, fault tolerance, 단일 장애점 제거, 그리고 장애를 우아하게 처리하는 것이 필요합니다.
가용성 vs 신뢰성
가용성 → 시스템이 가동되어 응답함 (필요할 때 접근 가능):
→ 가동률 %로 측정 ("나인즈": 99.9% = 연 ~8.7시간 다운; 99.99% = 연 ~52분)
신뢰성 → 시스템이 올바르게 동작함 (장애/오류 없이 해야 할 일을 함):
→ 관련 있지만 구별됨 (시스템이 가동 중이어도 잘못된 결과를 반환할 수 있음 — 가용하지만
신뢰할 수 없음)
→ 둘 다 중요: 사용자는 시스템이 가용하면서 동시에 올바르게 동작하기를 원함.
높은 가용성 달성
✓ 중복성 → 여러 인스턴스/사본 → 단일 장애점 없음 (하나가 실패하면
다른 것이 제공) — 핵심 원칙
✓ AVAILABILITY ZONE / 리전에 분산 → 데이터센터/리전 장애에서 생존
✓ FAILOVER → 무언가 실패하면 자동으로 백업으로 전환
✓ LOAD BALANCING + health check → 실패한 인스턴스 우회
✓ 데이터베이스 replication; 모든 곳에서 단일 장애점 제거
