핵심 인사이트 (3줄 요약)
- 엔지니어가 아무리 "우리 서버는 이중화되어 있어서 랜선 하나 뽑혀도 1초 만에 복구됩니다!"라고 주장해도, 실제 장애가 터지면 숨겨진 버그 때문에 시스템이 박살 나는 경우가 허다하다.
- 이를 확인하는 유일한 방법은 **결함 주입 테스트 (Fault Injection Test)**뿐이다. 시스템이 평화롭게 돌아갈 때, 관리자가 일부러 랜선을 자르거나, 메모리 비트를 뒤집거나, 전원 코드를 뽑아버려(결함 주입) 방어막이 제대로 작동하는지 두 눈으로 확인하는 훈련이다.
- 소프트웨어 레벨(패킷 드랍)부터 하드웨어 레벨(레이저로 실리콘에 오류 내기)까지 다양한 층위에서 수행되며, 고신뢰성 인프라 구축의 필수 관문이다.
Ⅰ. "진짜 고장 나면 어떻게 될까?"의 공포
자율주행 자동차 칩을 만들었습니다. "만약 주행 중에 메모리에 우주선(방사선)을 맞아서 1비트 에러가 나면, ECC 회로가 알아서 고쳐서 안전할 겁니다!"라고 문서에 적어놨습니다.
정말 그럴까요? 막상 방사선을 맞았는데 하드웨어가 꼬여서 핸들이 우측으로 꺾인다면? 이 끔찍한 사태를 막으려면, 자동차를 출시하기 전에 진짜로 달리고 있는 차의 메모리 칩에 일부러 에러를 내봐야 합니다. 이것이 **하드웨어 결함 주입 (Hardware Fault Injection)**입니다.
📢 섹션 요약 비유: 건물에 화재경보기를 달아놓고 "불나면 울리겠지" 하고 자는 건 바보입니다. 진짜 경보기가 울리는지 확인하려면, 대낮에 소방서 입회하에 경보기 밑에서 라이터 불을 켜보는(결함 주입) 훈련을 무조건 해봐야 합니다.
Ⅱ. 결함을 주입하는 방법들
결함을 주입하는 위치(계층)에 따라 방법이 아주 다양하며 가학적입니다.
1. 핀 주입 (Pin-Level Injection / 전기적 충격)
- 방식: 서버나 메인보드가 켜져 있을 때, 핀셋이나 특수 장비로 메인보드의 특정 데이터 핀(Data Pin)이나 주소 핀에 강제로 0V(접지)나 아주 높은 전압을 팍 찌릅니다.
- 목적: 노이즈나 합선(Short)이 발생했을 때 보드가 타버리는지, 아니면 우아하게 오류를 뱉고 멈추는지(Fail-Safe) 확인합니다.
2. 방사선 주입 (Radiation / Laser Fault Injection)
- 방식: 아주 비싼 우주항공/자동차 칩을 테스트할 때 씁니다. 칩 표면을 열어놓고(뚜따), 현미경으로 보면서 특정 SRAM 셀에 정밀한 **레이저나 알파 입자(방사선)**를 빵 쏩니다.
- 목적: 우주에서 1비트가 진짜 뒤집혔을 때(Soft Error), 내부의 락스텝(Lockstep) 회로나 ECC가 0.001초 만에 이를 낚아채서 고치는지 물리적으로 테스트합니다.
3. 소프트웨어 기반 주입 (Software Implemented Fault Injection, SIFI)
- 방식: 물리적 기계를 부수지 않고, OS(리눅스) 안에서 디버거나 커널 모듈을 이용해 CPU의 특정 레지스터 값을
1에서0으로 강제로 조작하거나, 랜카드 드라이버에게 "방금 받은 패킷 절반만 찢어서 버려(Drop)"라고 명령합니다. - 목적: 하드웨어가 아닌 시스템/네트워크 아키텍처의 이중화(Failover)가 제대로 도는지 확인합니다.
결함 주입 다이어그램 (ASCII)
[ 정상 작동 중인 서버 시스템 ]
│ (초당 1만 건 결제 처리 중)
▼
⚡ [ 결함 주입 (Fault Injection!) ] ◀ 관리자가 강제로 랜선 포트를 Disable 시킴
│
┌───────────▼─────────────┐
│ 1. 에러 감지 (Time 0) │
│ 2. 스탠바이 서버 기상 │ (이 과정이 3초 안에 끝나는지 스톱워치로 재는 것)
│ 3. IP 탈취 및 복구 │
└───────────┬─────────────┘
▼
[ 결제 정상 처리 재개 (테스트 통과!) ]
📢 섹션 요약 비유: 경호원들의 실력을 테스트하기 위해, 대통령 행차 중에 경호실장이 일부러 가짜 암살자를 투입(결함 주입)시켜 봅니다. 경호원들이 매뉴얼대로 1초 만에 대통령을 감싸안는지 테스트하는 실전 훈련입니다.
Ⅲ. 일회성 테스트에서 '카오스 엔지니어링'으로
과거에는 이런 무서운 테스트를 서비스 오픈 전에 딱 한 번, 주말 새벽에 몰래 했습니다. "재수 없으면 진짜 서버 데이터 다 날아가니까 살살하자..." 였습니다.
하지만 넷플릭스(Netflix) 같은 미친 기업들은 이 사상을 완전히 뒤집었습니다. "서버는 매일 고장 나는 게 정상이다. 그러니까 아예 평일 대낮에, 고객들이 넷플릭스 영화를 보고 있는 실제 운영 환경(Production)에서 무작위로 서버 전원을 뽑고 다니는 미친 원숭이(Chaos Monkey) 프로그램을 풀자!"
이것이 다음 장에서 설명할 결함 주입의 궁극적 진화형, **카오스 엔지니어링(Chaos Engineering)**의 탄생입니다.