카오스 엔지니어링은 프로덕션 또는 사전 프로덕션 환경에서 의도적이고 통제된 방식으로 장애를 일으켜 그 영향을 파악하고 더 나은 방어 태세와 인시던트 유지 관리 전략을 계획하는 것입니다.
조직의 중요한 애플리케이션이나 인프라에 장애가 발생할 기회는 매일 새롭게 생겨나고 있으며, 이는 고객에게 서비스를 제공하는 능력에 잠재적인 위협이 될 수 있습니다. 장애의 원인은 보안 침해, 잘못된 구성 또는 서비스 중단 등 여러 가지 문제에서 비롯될 수 있습니다. 클라우드에서 호스팅되는 애플리케이션과 데이터가 많아질수록 오류나 중단 가능성이 높아져 보안 문제가 증가할 수 있습니다.
이러한 중단을 해결하는 한 가지 방법이 바로 카오스 엔지니어링입니다. 이 프로세스는 엔지니어가 아무 목적 없이 인스턴스나 서비스를 종료하거나 시스템 장애를 일으키는 무작위적인 프로세스가 아닙니다. 향후 발생할 수 있는 잠재적 문제를 식별하여 엔지니어링 팀이 사전에 문제를 해결하고 추후 라이브 환경에서 문제를 방지할 수 있도록 지원합니다.
카오스 엔지니어링이 중요한 이유는 오류나 중단이 발생하면 조직의 추진력이 둔화되고, 다운타임이 증가하며, 그때마다 해결책을 찾느라 귀중한 시간이 소요될 수 있기 때문입니다. Netflix는 온프레미스에서 클라우드로 전환1하면서 이를 직접 경험했는데, 2008년 시스템 장애로 인해 서비스 제공이 3일 동안 중단되는 사태를 겪은 바 있습니다.
비디오 스트리밍 운영으로 전환되기 전에 일어난 사건이었으며, 비디오 스트리밍 운영이었다면 중단으로 인한 비용은 기하급수적으로 증가했을 것입니다. 이 경험의 결과, Netflix는 중단을 최소화하기 위해 가능한 모든 조치를 취하기로 결정하고 워크플로에 카오스 엔지니어링을 도입하기 시작했습니다. 이 덕분에 문제가 발생하기 전에 파악하고, 피할 수 없는 장애가 발생하는 경우에도 피해를 최소화할 수 있게 되었습니다.
Netflix는 자동 복구 절차를 통해 수정하거나 해결할 수 있는 취약점을 식별할 수 있도록 IT 서비스 및 인프라에 무작위 인시던트를 생성하는 오픈 소스 도구인 카오스 몽키2를 만들었습니다. 카오스 몽키는 클라우드 불안정성에 대응하기 위해 프라이빗 데이터 센터에서 Amazon Web Services(AWS)로 이전할 때 도입되었습니다. 이제는 많은 조직에서 카오스 엔지니어링 실험을 실행하기 위해 카오스 몽키를 사용하고 있습니다.
카오스 엔지니어링은 조직의 프로덕션 환경에서 인프라 장애, 중단 또는 구성 요소 누락의 중요한 방어 수단으로 사용됩니다. 카오스 엔지니어링은 사이트 안정성 엔지니어(SRE)와 DevOps 팀의 다른 구성원이 서비스의 심각한 중단을 방지하여 지속적인 서비스 제공을 할 수 있도록 지원합니다. 또한 취약성을 더 잘 파악하고 중단이 발생할 경우 영향을 최소화하는 방법을 알 수 있도록 돕습니다.
다양한 프로그램 종속성을 고려할 때 코드의 작은 문제라도 전체 프로덕션 환경에 치명적인 영향을 미칠 수 있습니다. 예를 들어, 금융 서비스 회사의 거래 소프트웨어 시스템에서 오류가 발생하면 수백만 달러3의 손실이 발생할 수 있습니다.
조직이 모든 IT 사고를 피할 수는 없지만, 카오스 관리를 통해 발생 가능한 시나리오와 최선의 해결책을 파악함으로써 피해를 최소화할 수 있습니다.
복원력과 디지털 성숙도가 높고 대시보드 및 기타 도구를 통해 높은 관측 가능성을 확보한 조직은 실험을 통해 발생하는 문제에 대해 즉각적인 조치를 취할 수 있으므로 카오스 엔지니어링을 도입해야 합니다. 이러한 관측 가능성이 부족한4 조직은 카오스 엔지니어링을 통해 생성된 실험을 진행하는 데 시간이 너무 오래 소요될 수 있습니다.
카오스 엔지니어링은 클라우드, 특히 퍼블릭 클라우드와 클라우드 네이티브 앱을 사용하는 조직에도 필수적입니다. 퍼블릭 클라우드에서는 클라우드 공급업체와의 조율이 필요한 중단 문제가 발생할 수 있으며, 이로 인해 온프레미스의 문제를 처리하는 것과는 다른 접근 방식이 필요합니다.
Constellation Research5에 따르면 클라우드를 사용하는 기업들은 클라우드와 서비스형 소프트웨어(SaaS)가 이러한 인시던트에 미치는 영향을 고려하지 않은 채 IT 인시던트에 접근하는 경우가 여전히 많습니다.
또한 마이크로서비스의 사용이 늘어나면서 시스템에서 실행되는 호스트 또는 컨테이너의 수가 증가하면, 카오스 실험을 통해 발굴하고 해결할 수 있는 고유한 과제도 발생하게 됩니다. 카오스 엔지니어링은 복잡성 처리의 초점을 코드 설계 단계에서 시스템 운영 단계로 전환하여 복잡성을 제거하는 대신 더 큰 자동화를 가능하게 합니다.
또한 카오스 엔지니어링은 조직이 지속적 통합 및 지속적 배포(CI/CD) 파이프라인의 속도를 향상하는 데도 도움이 될 수 있습니다. Netflix처럼6 카오스 엔지니어링을 CI/CD에 통합하면 조직은 지속적인 실험을 자동화하면서 잠재적인 영향을 제어할 수 있습니다.
마지막으로, 조직이 API를 통해 파트너와 점점 더 많이 연결된다는 사실은 해당 시스템의 문제가 다른 조직에도 영향을 미칠 수 있다는 것을 의미합니다. 카오스 엔지니어링을 구축하면 조직은 아키텍처의 약점을 파악하고 이를 수정하여 궁극적으로 향후 발생할 장애를 예측할 수 있는 능력을 키울 수 있습니다.
성공적인 카오스 엔지니어링은 조직이 고객에게 중대한 영향을 미치는 기술적 장애를 최소화하는 데 도움이 되며, 더 강력하고 탄력적이며 복잡한 시스템 아키텍처의 구축 또한 지원합니다. 조직이 카오스 엔지니어링을 추진하기로 결정했다면 다음 단계는 사전 프로덕션 환경에서 실행할지, 아니면 프로덕션 환경에서 실행할지를 결정하는 것입니다.
DevOps 팀에는 카오스 엔지니어링 실험을 통해 다양한 시스템 프로세스를 테스트할 수 있는 몇 가지 옵션이 있습니다.
이상적인 카오스 엔지니어링 프로세스를 만들려면 조직이 대규모 분산 시스템을 갖출 수 있도록 몇 가지 원칙을 세워야 합니다.
카오스 엔지니어링을 활용하는 조직은 프로덕션 환경에서 카오스 테스트를 진행할지, 아니면 사전 프로덕션 환경에서 진행할지 결정해야 합니다. 프로덕션 환경에서 카오스 엔지니어링을 진행하는 것이 가장 유용한 몇 가지 이유가 있습니다.
라이브 환경은 인시던트가 고객 경험에 어떤 영향을 미치는지 이해할 수 있는 가장 정확한 환경을 제공합니다. 사전 프로덕션 환경이 실제 환경과 정확히 일치하지 않아 실험에 약간의 가변성이 발생할 수 있다는 점이 또 다른 이유입니다.
예를 들어, 사전 프로덕션 환경의 인시던트는 라이브 환경과 트래픽 수준이 동일하지 않기 때문에 현실적인 대응이 불가능할 수 있습니다. 또한 해당 환경과 보안 구성이 동일하지 않을 수도 있습니다.
일부 조직에서는 라이브 사이트에 의도적으로 문제를 일으키는 것을 두려워하여 사전 프로덕션 또는 개발 사이트에서 실험을 진행하기도 합니다. 이렇게 하면 발생하는 모든 문제가 실제 고객 경험에는 영향을 미치지 않습니다. 이러한 문제를 완화하기 위해 일부 조직에서는 라이브 프로덕션 환경으로 전환하기 전에 프로세스를 파악할 수 있도록 사전 프로덕션 환경에서 시작하기도 합니다.
조직은 위험 허용 범위에 따라 어떤 환경을 사용할지 선택할 수 있습니다. 궁극적으로 카오스 엔지니어링은 실제 대규모 문제를 테스트하는 것을 목표로 하므로 프로덕션 환경에서야말로 현재 상황과 수정이 필요한 사항을 가장 정확하게 파악할 수 있습니다.
카오스 엔지니어링은 조직에 몇 가지 주요 이점을 제공합니다.
고객은 회사에서 구매하는 서비스의 가용성에 대해 높은 기대를 갖고 있습니다. 다운타임이 발생하거나 고객이 비용을 지불한 서비스에 액세스할 수 없게 되면 고객 만족도에 심각한 영향을 미쳐 매출 손실과 평판 손상을 초래할 수 있습니다. 시스템을 테스트하고 해결책을 파악해 두면 시스템이 상당 기간 동안 다운될 위험이 줄어듭니다.
중단은 잘못된 코드, 서버 문제 또는 외부 위협으로 인해 발생할 수 있습니다. 후자는 보안 관행이 우수하더라도 발생할 수 있습니다. 카오스 엔지니어링은 악용될 수 있는 문제를 식별하는 데 도움이 되므로 조직은 패치와 버그 수정을 도입하여 서비스를 안전하게 유지할 수 있습니다.
카오스 엔지니어링을 통해 조직은 보다 정확한 정보에 기반하여 미래에 발생할 문제를 해결하는 방법에 대한 청사진을 만들 수 있습니다. 카오스 엔지니어링을 도입한 조직은 다양한 인시던트에 대한 구체적인 대응책을 갖추고 있어 더 빠르게 복구하고 다운타임을 줄일 수 있습니다. 카오스 엔지니어링은 다운타임을 최대 20%까지 줄일 수 있습니다.7
카오스 엔지니어링 실험에서는 시스템이 리소스를 할당하는 방법을 파악합니다. 이 실험을 도입하면 시스템이 부하를 처리하는 방법과 병목 현상이 발생하거나 발생할 가능성이 있는 위치를 알 수 있습니다.
카오스 엔지니어링은 팀이 시스템 탄력성과 소프트웨어의 유연성을 높이는 데 도움이 됩니다. 조직은 현재 시스템이 문제를 처리하는 방식을 알고 있으므로 새로운 소프트웨어 및 솔루션 코딩에 보다 지능적으로 접근할 수 있습니다.
비즈니스와 기술 혁신을 접목한 업무 수행 방식의 변화로 기업의 민첩성을 확보합니다.
AI를 핵심으로 하는 HR을 재구상하고 현대화하여 더 뛰어난 비즈니스 성과를 제공하고 직원들의 잠재력을 완전히 발휘하세요.
핵심 프로세스 전반에 데이터 분석, AI 및 자동화를 도입하는 엔드투엔드 서비스를 통해 재무 성과와 비즈니스 가치를 실현합니다.
1 Chaos Engineering: System Resiliency in Practice(ibm.com 외부 링크), Casey Rosenthal, Nora Jones, 2020년.
2 What is Chaos Monkey? Chaos engineering explained(ibm.com 외부 링크), InfoWorld, 2020년 5월 13일.
3 Knight Capital Says Trading Glitch Cost It USD 440 Million(ibm.com 외부 링크), New York Times, 2012년.
4 There Is No Resilience without Chaos(ibm.com 외부 링크), The New Stack, 2023년 4월 13일.
5 Incident Management in the Cloud Era(ibm.com 외부 링크), Constellation Research, 2023년.
6 ChAP: Chaos Automation Platform(ibm.com 외부 링크), Netflix 블로그, 2017년 7월 26일.
7 The I&O Leader's Guide to Chaos Engineering(ibm.com 외부 링크), Gartner, 2021년 10월 28일.