이번글은 실리콘밸리에서 넷플릭스 출신 개발자 분과 얘기를 할 기회가 생겨 그 중 제가 여쭤봤던 주제중 하나에 대해서 쓴 글입니다.
제 다른 글들 대비 재미는 없고 기술적인 얘기가 많을수 있습니다.
최근에 실리콘 밸리에 갔다와야 되는 일이 생겨 잠시 갔었습니다.
나름 실리콘 밸리에서 바쁘게(?) 일을 하던 와중 점심때 개발자 선배님들과 얘기를 할 기회가 생겼습니다.
애플, 구글, 넷플리스, 등등 출신분들 (정확히 어딘지는 말 안해줄꺼임 메롱) 과 얘기를 했는데 그중 넷플리스 출신분께 예전 부터 궁금했던 툴에 대해서 여쭤봤습니다. (과연 저는 어디서 일할까요?)
그 툴이 바로 Netflix Simian Army중 하나였던 Chaos Monkey입니다
원숭이들 귀엽다
저는 회사에서 이 툴에 대해서 들어본적이 있었지만 이번 기회에 자세한 내용을 들었고 그 이후 공부를 해보면서 재미있는 내용에 대해서 알수 있었습니다.
그래서 오늘은 Chaos Monkey (카오스 몽키) 와 Chaos Engineering (카오스 엔지니어링)에 대해서 알아보려고 합니다.
이 카오스 아닙니다. 같은 뜻이긴 할듯
Chaos Engineering (카오스 엔지니어링)이란 시스템이 어떻게 회복하는지 보기 위해 일부러 시스템 장애나 결함을 주입하는 행위 입니다.
쉽게 말해서 맷집 키우기 입니다.
맞을 일이 없긴 하겠지...
저희가 백신을 맞아서 바이러스에 저항 하는 방식과 매우 비슷하죠.
하지만 저희가 보통 생각하는 부하 테스트, 스트레스 테스트, 성능 테스트 와는 조금 다릅니다.
말 그대로 그냥 인스턴스나 파드를 꺼버리거든요. ???
사실 카오스 엔지니어링이였던거임
스트레스 테스트는 "대충 어디까지 하면 장애가 생길까~?" 를 해보는거고 카오스 엔지니어링은 "장애가 생기면 어떻게 될까~?"를 해보는거라고 이해하면 조금 편합니다.
어떻게 되긴. 빡치지
카오스 몽키는 Netflix의 Simian Army중 하나였던 툴입니다.
Netflix는 자체 서비스의 탄력성과 회복력을 확인하기 위해 수많은 에이전트 툴들을 (Monkey) 만들어서 사용했는데 그중 카오스 몽키는 인스턴스를 중지 시키는 툴이였습니다.
그리고 이 서비스를 넷플릭스는 오픈소스로 시중에 풀어서 많은 회사가 사용을 할수 있죠!
카오스 몽키를 실행하면 사용하고 있는 AWS EC2 인스턴스들이 랜덤하게 그냥 꺼집니다. (쿠버네티스였으면 노드죠?)
실제 서비스에서 인스턴스가 꺼지면 사용하던 사용자들이 불편함을 겪고 서비스 중지가 되겠죠.
서비스가 중지 되면 해결 방법이 여러게 있습니다만 대부분...
뭐 이런식으로 문제가 터졌을때 잘 처리가 되는지 그리고 사용자 경험에서 문제가 생기지 않는지 확인을 해볼수 있습니다.
굳이 카오스 몽키를 사용하는 이유는 인스턴스가 랜덤하게 터지는 특성상 그 역활을 사람이 하면 어쩔수 없이 준비를 하고 실행을 하기에 더 정확한 복구력을 확인 할수 있습니다.
개복치가 죽으면 어캐 복구하지
그리고 한 인스턴스가 꺼지는 동시에 다른 인스턴스들도 영향을 받을수 있습니다. 사실 이런 부분은 인스턴스가 죽을때까지 저희가 무슨일이 생길지 모릅니다. 이런 부가적인 결과도 확인을 하기위해 많이 사용됩니다.
카오스 몽키나 카오스 엔지니어링의 대부분은 사실 대기업을 위한 기술들입니다.
왜냐?
에초에 저런 복구력을 확인 하기 위해서는 인스턴스 한두개 죽어도 서비스의 지장이 없어야 하고 그걸 자동 복구하거나 복구 할때 그걸 전문으로 하는 엔지니어들이 존재해야됩니다.
즉 인프라가 갖춰진 회사들만 가능합니다.
솔직히 대부분의 회사는 데브옵스로 퉁 치고 그 사람/팀이 인프라, 데브옵스, 보안, 모니터링, ci/cd 다 하지 않나요?
해외도 상황은 비슷합니다
에초에 저 툴이 전세계 몇억명이 사용하는 넷플리스 서비스를 테스트를 하기 위해 만들어진 툴입니다......
그래서 카오스 엔지니어링을 도입할때는 조금 신중하게 생각하고 (울 회사 서비스가 이걸 견딜 수준이 되나?) 하셔야 됩니다.
그리고... 돈도 많이 듭니다!
개인이나 팀 플젝용은 아닙니다
에초에 이런걸 서비스화해서 제공해주는 업체들도 있을정도입니다.
카오스 엔지니어링과 카오스 몽키라는 툴은 회사에 다니면서 뎁옵스쪽으로 공부를 하시거나 이쪽에 종사하지 않는이상 알기 힘든 내용입니다.
이런 재미있는 얘기를 저만 알수는 없을꺼같아서 블로그 내용으로 꼭 쓰고 싶었습니다.
사실 예제 코드나 실제 어떻게 돌아가는지까지 보여드리고 싶지만... 이걸 제 프로젝트에서 할수 있을정도로 작은 기술은 아닌지라..ㅎㅎ..
물론 카오스 몽키 말고 카오스 엔지니어링을 사용한 프로젝트에서 해보실수 있는 다른 기술들도 있습니다!
Chaos-Monkey-Spring-Boot같은 툴을 사용해보시면 스프링 부트 앱에 장애를 생기게 할수 있습니다. (인스턴스를 죽이는 행위 같은거는 안됩니다)
독자 여러분들 즐거운 개발 되시고 긴 글 읽어주셔서 감사합니다!