버그가 아니라 장애를 잡아라!! QA와 카오스 엔지니어링의 만남
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
DevOps
대상자
QA 엔지니어, 개발자, SRE(Site Reliability Engineer)
핵심 요약
- 카오스 엔지니어링은 시스템의 복원력(Resilience)을 테스트하기 위해 인위적으로 장애를 유도하는 방법론입니다.
- Application Level 테스트를 통해 null exception 문제를 사전에 탐지하고, mitmproxy를 활용한 자동화 테스트로 비정상 상황 대응력을 강화했습니다.
- QA 테스트와 달리, 카오스 엔지니어링은 비정상적인 동작을 가정하여 서비스 중단 시 대비 방안을 검증합니다.
섹션별 세부 요약
1. 카오스 엔지니어링의 필요성
- 24시간 운영되는 이커머스 서비스에서 인프라, 코드, 데이터, 휴먼 오류 등 다양한 요인이 장애를 유발할 수 있습니다.
- QA 테스트만으로는 예측 불가능한 장애에 대비하기 어렵습니다.
- 카오스 엔지니어링은 장애를 예측하고 복구 시스템을 사전에 검증합니다.
2. 카오스 엔지니어링의 주요 유형
- Application Level: API 호출 실패, null 반환 등 애플리케이션 내부 오류 유도.
- Host Level: DB 다운, 프로세스 종료 등 서버 자체 문제 시뮬레이션.
- Resource Attack: CPU/메모리 과부하, 네트워크 지연 등 자원 고갈 테스트.
- People Attack: 잘못된 설정, 오배포 등 인간 오류 시뮬레이션.
3. Application Level 테스트 사례 (null exception)
- null exception 발생 시 전체 페이지 렌더링 중단 문제가 발생했음.
- mitmproxy를 활용해 API 응답의 특정 필드를 null로 주입하여 테스트.
- "해당 API를 사용하는 페이지가 정상적으로 보여야 한다. 단, null 필드는 노출되지 않아야 한다."가 목표.
4. mitmproxy를 통한 테스트 프로세스
- response(flow: HTTPFlow) 함수를 중심으로 API 응답값 변환.
- api_list 파일에 테스트 대상 API 등록 후, mitmproxy 실행.
- /api/data, /api/data2 등 필드별 null 주입을 자동화하여 테스트.
- 에러 바운더리(Error Boundary) 적용을 통해 null exception 방지.
결론
- 카오스 엔지니어링은 QA 테스트와 구분되는 비정상 상황 대응 전략으로, mitmproxy와 같은 도구를 활용해 자동화된 장애 테스트를 구현해야 합니다.
- 정기적인 검증 프로세스와 에러 바운더리 적용을 통해 시스템의 복원력 강화와 사용자 경험 보장이 가능합니다.