서버실 한구석에 엉켜 있는 수많은 랜선 뭉치를 볼 때마다 묘한 공포감에 사로잡히곤 합니다. 어느 선이 어느 장비와 연결되어 있는지, 어디서 시작해서 어디로 끝나는지 도무지 알 수 없는 거대한 덩어리. 언젠가 이 엉킴 속에서 문제가 발생했을 때, 그 실타래를 풀어내야 할 사람은 바로 나 자신이라는 생각에 등골이 오싹해집니다. 물리적인 얽힘은 그나마 눈에 보이는 것이라도 있지만, 보이지 않는 곳에서 서로를 옭아매고 있는 소프트웨어의 엉킴은 훨씬 더 복잡하고 은밀하며, 때로는 치명적입니다.
독일의 민간 전설에서 유래했다는 ‘쥐들의 왕(Rat King)’ 현상은 바로 그런 은밀한 얽힘에 대한 섬뜩한 비유입니다. 여러 마리의 쥐들이 꼬리가 서로 엉켜 한 덩어리가 되고, 결국 그 엉킴 때문에 어느 한 마리도 자유롭게 움직일 수 없게 되는 기괴한 현상. 이들은 서로를 붙잡고 있지만, 동시에 서로에게 속박되어 버립니다. 이 이미지는 지난 20년간 소프트웨어 개발 현장에서 목격해온 수많은 시스템의 운명과 놀랍도록 닮아 있습니다.
초기에는 명확한 목적과 간결한 구조를 가진 시스템들이 대부분이었습니다. 각 모듈은 독립적인 기능을 수행했고, 그 관계는 비교적 단순했습니다. 하지만 시간이 흐르고 요구사항이 늘어나면서, 시스템은 필연적으로 복잡해지기 시작합니다. 처음에는 작은 의존성 하나둘이 생겨나고, 효율을 위해, 혹은 당장의 문제를 해결하기 위해 여러 컴포넌트들이 서로의 꼬리를 엮기 시작합니다. 마치 쥐들이 따뜻함을 위해 혹은 우연히 서로에게 가까이 붙어 꼬리를 엉키게 하듯, 소프트웨어 컴포넌트들도 그렇게 서로에게 얽혀갑니다.
이러한 얽힘은 처음에는 크게 문제 되지 않아 보일 수 있습니다. 오히려 어떤 면에서는 협력의 형태처럼 보일 수도 있습니다. 어떤 기능 하나를 수정하면 다른 여러 기능에 영향을 미쳐 마치 하나의 유기체처럼 움직이는 듯한 착각을 주기도 합니다. 마치 쥐들의 왕이 하나의 강력한 존재처럼 보일 수 있듯이 말입니다. 하지만 그 속내는 다릅니다. 이 얽힘은 독립성을 파괴하고, 변경의 자유를 앗아가며, 결국은 시스템 전체의 민첩성을 떨어뜨립니다.
레거시 시스템을 유지보수하는 개발자라면 누구나 이 ‘쥐들의 왕’ 현상에 깊이 공감할 것입니다. 특정 모듈 하나를 손대려 할 때, 그와 꼬리에 꼬리를 물고 얽혀 있는 수많은 다른 모듈들이 눈앞에 아른거립니다. 무엇 하나 건드리면 전체 시스템이 무너질지도 모른다는 불안감, 이른바 ‘깨트릴까 봐 두려운(Fear of Breaking)’ 감정은 개발자들을 소극적으로 만들고, 결국 시스템은 더욱더 단단히 얽힌 채로 방치됩니다. 작은 버그 하나를 고치는 데에도 예상치 못한 사이드 이펙트가 발생하고, 기능 추가는 기존의 엉킴을 더욱 강화하는 형태로 이루어지기 쉽습니다. 모놀리식 아키텍처에서 마이크로서비스로의 전환을 시도하는 이유 중 하나도 바로 이런 얽힘의 고리를 끊어내기 위함이었지만, 분산 시스템 역시 또 다른 형태의 얽힘, 즉 네트워크와 데이터 일관성이라는 새로운 쥐들의 왕을 만들어내기도 합니다.
결국 쥐들의 왕은 단순히 오래된 시스템이나
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.