
자넷 잭슨의 노래가 노트북을 죽인다? 물리적 버그와 레거시의 교훈
자넷 잭슨의 노래가 노트북을 셧다운시킨 실화! 하드 드라이브의 공진 현상으로 발생한 전설적인 물리적 버그 사례를 통해 레거시 관리와 문서화의 중요성을 짚어봅니다.
김영태
테크리드

안녕하세요. 풀링포레스트 백엔드 개발자 김테크입니다.
개발자로 일하다 보면 도저히 논리적으로 설명되지 않는 '유령 같은 버그'를 마주할 때가 있습니다. 분명 코드는 완벽한데 서버가 죽고, 로그에는 아무런 에러 트레이스도 남아있지 않은 상황 말이죠. 저도 8년 차가 되었지만, 이런 상황을 마주하면 여전히 등골이 서늘해집니다. 오늘은 마이크로소프트의 레이먼드 첸(Raymond Chen)이 소개했던, 전설적이면서도 실화인 '물리적 버그' 이야기를 통해 우리가 다루는 시스템의 복잡함과 레거시 관리의 중요성에 대해 이야기해보고자 합니다.
솔직히 말해 처음 이 이야기를 들었을 때 저는 만우절 농담인 줄 알았습니다. 이야기는 Windows XP 시절로 거슬러 올라갑니다. 한 대형 PC 제조사가 자넷 잭슨(Janet Jackson)의 명곡 'Rhythm Nation' 뮤직비디오를 재생하면 특정 모델의 노트북이 크래시(Crash)되면서 셧다운되는 현상을 발견했습니다. 더 기가 막힌 건, 해당 노래를 재생하지 않고 그저 '옆에 놓여 있던' 다른 제조사의 노트북까지 덩달아 다운되는 현상이 발생했다는 점입니다.
소프트웨어 버그였을까요? 아니면 오디오 코덱의 메모리 누수였을까요?
원인은 허무하게도 '물리학'이었습니다. 범인은 당시 노트북에 널리 쓰이던 5400rpm 하드 디스크 드라이브(HDD)였습니다. 'Rhythm Nation' 노래의 특정 오디오 주파수가 이 하드 드라이브의 플래터가 회전할 때 발생하는 자연 고유 진동수(Resonant Frequency)와 정확히 일치했던 것입니다.
마치 오페라 가수가 고음을 내질러 와인잔을 깨트리는 것처럼, 노래의 특정 음역대가 하드 드라이브를 공진시켜 읽기/쓰기 헤드의 작동을 방해했고, 결국 시스템 전체를 붕괴시켰습니다.

이 문제를 해결하기 위해 제조사들이 선택한 방법은 무엇이었을까요? 하드 드라이브를 전량 리콜했을까요? 아닙니다. 비용 문제상 불가능했겠죠. 그들은 오디오 파이프라인에 '필터'를 하나 추가했습니다. 오디오가 출력될 때 문제가 되는 특정 주파수를 감지하면 실시간으로 제거해 버리는 소프트웨어 패치를 적용한 것입니다.
저는 이 대목에서 인프라 개발자로서 묘한 동질감과 안타까움을 동시에 느꼈습니다. 이것은 전형적인 '워크어라운드(Workaround)'이자 기술 부채이기 때문입니다.
아마 그 당시 코드를 작성한 개발자는 코드 어딘가에 주석으로 이렇게 남겨뒀을 겁니다.
// 자넷 잭슨 노래 재생 시 크래시 방지용 필터. 절대 삭제하지 마시오.하지만 시간이 흘러 5400rpm HDD가 사라지고 SSD가 표준이 된 지금, 누군가 그 레거시 코드를 본다면 어떤 생각을 할까요? "도대체 왜 오디오 드라이버가 특정 주파수를 검열하는 거야?"라며 불필요한 코드로 간주하고 지워버릴지도 모릅니다. 혹은 그 코드가 왜 존재하는지 아무도 기억하지 못해 영원히 시스템의 리소스를 갉아먹는 좀비 코드로 남을 수도 있겠죠.
풀링포레스트에서 백엔드 시스템을 운영하면서 저도 비슷한 경험을 합니다. 예전에 특정 시간대에만 DB 커넥션 풀이 폭발하는 이슈가 있었는데, 알고 보니 마케팅 팀에서 돌리던 레거시 배치 스크립트가 원인이었던 적이 있습니다. 그때 급하게 막았던 방어 로직들이 지금 우리 코드베이스 구석구석에 '임시 조치'라는 이름으로 숨어 있지는 않은지 돌아보게 됩니다.
이 에피소드가 우리에게 주는 교훈은 명확합니다.
소프트웨어는 하드웨어 위에서 돌아갑니다. 우리는 종종 추상화된 클라우드 환경(AWS, GCP 등)이나 컨테이너(Docker, K8s) 안에서 개발하다 보니 물리적 제약을 잊곤 합니다. 하지만 결국 어딘가에선 전기가 흐르고 디스크가 돕니다. 성능 문제나 기이한 버그가 발생했을 때, 코드만 파지 말고 인프라 환경이나 리소스의 물리적 한계(IOPS, 네트워크 대역폭 등)를 의심해 볼 필요가 있습니다.
'왜'를 기록해야 합니다. 급한 불을 끄기 위해 이상한 패치를 적용할 수 있습니다. 그건 부끄러운 게 아닙니다. 진짜 문제는 '왜 그렇게 했는지'를 남기지 않는 것입니다. 커밋 메시지나 코드 주석에 "Rhythm Nation 노래의 공진 주파수 때문임"이라고 적혀 있지 않다면, 후임자는 그 코드를 절대 이해할 수 없습니다. 문서화는 미래의 동료(혹은 미래의 나)를 위한 생명줄입니다.
열린 마음으로 디버깅해야 합니다. 노트북이 노래 때문에 꺼질 수 있다는 사실을 누가 상상이나 했겠습니까? 트러블슈팅을 할 때는 "말도 안 돼"라는 편견을 버려야 합니다. 모든 가능성을 열어두고 로그와 데이터를 기반으로 추적하는 끈기가 필요합니다.
개발자로서 우리는 매일 논리적인 세계를 구축하려 노력하지만, 현실 세계는 자넷 잭슨의 노래 한 곡에도 무너질 만큼 카오스 그 자체입니다. 혹시 지금 도저히 풀리지 않는 버그 때문에 막막해하고 계신가요? 잠시 모니터에서 눈을 떼고 커피 한 잔 하시면서, 혹시 내 코드 밖의 세상에서 '공진'이 일어나고 있는 건 아닌지 상상해 보시길 바랍니다.
오늘도 보이지 않는 진동수와 싸우고 계신 모든 개발자분들을 응원합니다.


