본문 바로가기
CS

[Testing/QA] 카오스 엔지니어링의 개념과 예시 - System 회복력의 검증

by Warehaus 2024. 5. 25.

 

 

사진: Unsplash 의 Soheb Zaidi

 

 

 

최근 이런저런 기술용어들을 찾아보다가 접하게 된 "카오스 엔지니어링" 

 

몽키테스트와 연관된 용어로, 마구잡이로 테스트하는 방식 정도로만 인지를 하고 있었고 정확한 정의를 알고 있지는 못한 것 같아서 공부삼아 포스팅을 작성했다.

 

아래 내용에서는 카오스 엔지니어링이란 무엇인지, 어떤 특징이 있는지, 그리고 실제로 어떻게 활용되는지를 중점적으로 알아보았다.

 

 

카오스엔지니어링

 

정의 : 시스템의 회복력(resilience)을 테스트하고 개선하기 위해 의도적으로 시스템에 문제를 일으키는 실험을 수행하는 기술적 접근 방식

 

카오스 엔지니어링은 시스템이 예상치 못한 장애 상황에서도 어떻게 반응하고, 어떻게 회복하는지를 파악하는데 그 목적을 둔다.

 

 

 

카오스 엔지니어링의 주요 목적

 

- 시스템의 결함을 미리 발견하여 개선
- 장애 발생 시 시스템의 자동 복구 능력 강화
전체 시스템의 신뢰성과 안정성 향상

 

 

특징


카오스 엔지니어링의 핵심은 실험이다.

실험을 통해 시스템이 실제 환경에서 어떻게 작동하는지 확인하고, 잠재적인 약점을 파악할 수 있다.

 



- 실험 기반 접근 : 카오스 엔지니어링은 단순한 이론적 분석이 아니라, 실제 시스템 환경에서 실험을 수행한다. 이를 통해 얻은 데이터를 기반으로 시스템의 약점을 개선할 수 있을 것이다.

 

- 자동화된 실험도구 : 카오스 엔지니어링에는 다양한 자동화 도구를 사용.  무작위로 시스템 컴포넌트를 비활성화하여 시스템의 내구성을 테스트한다.

 

- 점진적 접근 : 카오스 엔지니어링에서의 실험은 점진적으로 수행한다. 작은 범위에서 부터 실험을 시작하여 점차 범위를 늘려가며 이는 시스템 전체에 영향을 미칠 수 있는 리스크를 피하는데 목적을 둔다.

 

- 모니터링과 피드백:  카오스 엔지니어링 실험은 항상 모니터링과 피드백을 동반한다. 실험 중 발생한 모든 데이터는 기록되고 분석되어 시스템 개선에 활용한다. 모니터링이 없는 카오스 테스트는 사실 상 의미없는 장애생성에 불과할 것이다.

 

 

*카오스 테스트는 실험을 확대시켜가면서 시스템 상의 문제를 기록하고 수집된 데이터를 바탕으로 더 durable 한 시스템을 만든는 행위로 볼 수 있다.

 

 

카오스 엔지니어링의 활용 예시

 

카오스 엔지니어링은 다양한 산업 분야에서 활용될 수 있습니다. 

아래는 활용 예시입니다.



1. 넷플릭스의 Chaos Monkey

 

넷플릭스는 카오스 엔지니어링의 선두주자로, Chaos Monkey라는 도구를 개발했습니다. Chaos Monkey는 무작위로 넷플릭스의 클라우드 인프라스트럭처 컴포넌트를 종료시켜 시스템의 회복력을 테스트합니다. 이를 통해 넷플릭스는 전 세계 수백만 명의 사용자에게 안정적인 서비스를 제공할 수 있습니다.

 

넷플릭스는 AWS 의 큰 고객 중 하나인데, 자체 인프라를 운영하지 않다보니 AWS가 어느정도로 견고한지에 대한 검증이 필요했고, 이를 목적으로 Chaos monkey를 만들어 카오스 엔지니어링을 수행한 것으로 알려져 있습니다.

 

 

 

2 아마존 웹 서비스(AWS)

AWS는 자체 인프라스트럭처의 회복력을 테스트하기 위해 카오스 엔지니어링을 도입했습니다. AWS의 카오스 엔지니어링 팀은 네트워크 장애, 서버 다운 등의 다양한 시나리오를 실험하여 서비스 중단 없이 문제를 해결할 수 있는 방법을 연구합니다.

 

 

3 핀테크 기업

 

핀테크 기업들도 카오스 엔지니어링을 통해 시스템의 안정성을 확보하고 있습니다. 예를 들어, 결제 시스템의 장애가 발생했을 때 어떻게 빠르게 복구할 수 있는지, 데이터 무결성을 어떻게 유지할 수 있는지 등을 테스트합니다. 이를 통해 고객들에게 신뢰성 있는 금융 서비스를 제공하고 있습니다.

 

 

 

고려사항


카오스 엔지니어링은 강력한 도구이지만, 도입 시 주의해야 할 점도 있습니다.

 

 

우선 시스템의 현재 상태와 예상되는 결과를 이해하고 있어야하며 실험을 시작하기 전 사전준비와 계획이 반드시 필요합니다. 또한 앞서 언급했듯이 모든 실험은 모니터링이 가능해야 합니다. 이를 위해서는 시스템을 모니터링하는 시스템이 반드시 구축되어야 의미있는 실험을 진행할 수 있습니다.

 

또 다른 고려사항으로는 조직문화가 있는데 카오스 엔지니어링의 성공적 수행을 위해서는 이를 이해하고 지지하는 문화가 필요합니다. 적어도 카오스 엔지니어링의 목적과 필요성에 대한 공감대가 형성될 수 있도록 교육이 필요할 것 입니다.

 

 

결론

 


카오스 엔지니어링은 시스템의 회복력과 안정성을 높이는 강력한 방법입니다. 의도적인 실험을 통해 시스템의 약점을 파악하고 개선함으로써, 예상치 못한 장애 상황에서도 안정적인 서비스를 제공할 수 있습니다. 

 

넷플릭스, AWS와 같은 대기업뿐만 아니라 다양한 산업 분야에서 카오스 엔지니어링을 도입하여 시스템의 신뢰성을 높이고 있습니다. 시스템의 안정성을 강화하고, 더 나은 서비스를 제공하기 위해 도입을 고려해 보시기 바라며 앞에 언급 된 도입시 주의사항에 대해서도 생각해 보는걸 추천합니다.