Chaos Monkey 소개


JUnit 챕터에서 프로젝트의 단위및 인수테스트를 위한 라이브러리의 사용법과 각각의 메서드들이 의도한대로동작하는지를 테스트하는 방법을 익혔고, Testcontainer를 통해 가상화 컨테이너환경구성, 그리고 JMeter 도구를 사용해서 성능테스트 방법을 학습했다.

다양한 성능 테스트중 HTTP API 성능 테스트 위주로 진행을하며 API요청을 해보았는데, 이번 챕터에서는 운영 이슈 테스트를 학습할 것이다. HTTP API 요청을 할 때 늘 같은 인터넷 속도와 환경, 그리고 서버의 메모리상태와 동시 접속하는 사용자는 늘 달라진다. 그렇게 다음과 같은 운영 환경 문제가 발생할 수 있다.

이러한 이슈들은 아주 자주 발생하지는 않고 간혹가다 한 번씩 발생을하지만, 발생했을 때의 여파는 매우 크다.

이렇게 생기는 문제들을 카오스(Chaos)라 하는데, 이런 이슈를 핸들링하는 방법을 카오스 엔지니어링이라 한다.

그리고 이런 카오스 엔지니어링을 도와주는 툴들이 있는데, 대표적으로 넷플릭스에서 만든 Chaos Monkey라는 툴이 있다.

🚀참고: 카오스 엔지니어링 툴

넷플릭스의 카오스 엔지니어링을 설명하기 위한 기본 원칙을 담고 있는 책의 번역본

카오스 엔지니어링의 원칙 :: Channy's Blog

이번 포스팅에서는 Chaos Monkey for Spring Boot를 사용해서 카오스 엔지니어링을 해 볼 것인데, 다음과 같은 애노테이션이 붙어있는 빈(bean)들에 접근제어자가 public인 경우 다음과 같은 공격을 할 수 있으며, Chaos Monkey를 사용해 공격을 해서 카오스 엔지니어링을 진행해볼 것이다.

공격 대상(Watcher)

공격 유형(Assaults)

🤫왜 이런 운영이슈 테스트를 해야할까?

테스트 대상 프로젝트에서 특정 레파지토리가 응답 지연이 발생한다면 해당 레파지토리를 사용하는 서비스나 컨트롤러도 같이 응답이 지연된다. 이런 상황들을 재연할 수 있다면, 우리는 개발단계에서 임의의 응답지연이나 문제가 이슈가 발생하는 대상을 찾을 수 있고, 문제가 없는 리포지토리로 바꾸거나 성능개선을 추구할 수 있다.