CS Insights

카오스 엔지니어링(Chaos Engineering): 리눅스 tc(Traffic Control)로 빚어낸 인공 재앙과 서킷 브레이커

카오스 엔지니어링(Chaos Engineering): 리눅스 tc(Traffic Control)로 빚어낸 인공 재앙과 서킷 브레이커
사내에 Resilience4j를 이용해 서킷 브레이커(Circuit Breaker)를 이중 삼중으로 달아두었지만, "진짜로 장애가 나면 이게 작동할까?"에 대한 확신이 없었습니다. 그래서 저희는 넷플릭스의 카오스 몽키(Chaos Monkey) 철학을 받아들여, 평온한 개발 서버 망에 고의적인 인공 재앙을 투하하는 카오스 엔지니어링 실험을 감행했습니다. 이를 위해 가장 우아하고 파괴적인 리눅스 통제 도구인 'tc(Traffic Control)' 넷엠(netem) 인터페이스를 해킹했습니다. 결제 서버의 도커 컨테이너 네임스페이스로 침투하여 `tc qdisc add dev eth0 root netem delay 5000ms loss 30%` 며칠을 조작했습니다. 즉, 결제 서버로 들어오는 패킷의 30%를 허공에 버리고, 살아남은 패킷마저 강제로 5초 딜레이를 먹이도록 커널 네트워크 스케줄러를 망가뜨린 것입니다. 결제 서버가 처참하게 침몰하자, 이를 호출하던 프론트 게이트웨이 서버의 쓰레드들이 5초 대기에 물리며 연쇄 오버플로우가 날 줄 알았습니다. 그러나 정확히 3번의 타임아웃 오류가 발생한 직후, 로직 내의 서킷 브레이커가 [Open] 상태로 전환되며 타버린 퓨즈를 끊어냈습니다. 게이트웨이는 더 이상 죽어버린 결제 서버를 기다리지 않고 즉각적으로 0.01초 만에 Fallback(대체) 응답인 "결제 시스템 지연 안내"를 반환하며 스스로를 구원했습니다. 시스템의 신뢰성은 기도가 아니라 고의적으로 파괴하는 훈련 속에서만 증명된다는 거칠고도 아름다운 엔지니어링 진리를 확인했습니다.

Related Posts