소프트웨어 엔지니어가 해야 할 가장 중요한 일은, 시스템의 복잡도를 길들이는 일입니다. 왜 그럴까요? 소프트웨어는 너무나 쉽게 복잡해질 수 있기 때문입니다. 그건 또 왜 그럴까요? 소프트웨어에는 물리적인 한계가 거의 없기 때문입니다.
예컨대 현실세계에선 중력으로 인해 무게와 비용이 비례하고, 영토의 한계로 인해 부피와 비용이 비례합니다. 이런 물리적 제약을 잠시 잊어두고, 마음껏 상상력을 발휘할 수 있다는 점이 소프트웨어의 세계가 지닌 매력이죠. 우리는 소프트웨어의 세계에서 3만층의 초고층 빌딩을 지을수도, 3만 광년의 우주도 시뮬레이션 할 수 있습니다. 상상력이 마음껏 펼쳐지는 만큼, 우리는 더 복잡한 것들을 만들 수 있게 된 것이죠.
이렇게 복잡한 소프트웨어들은 우리 일상에 파고들었고, 역으로 현실세계에 존재하던 다양한 제약을 풀어버렸습니다. 거리가 떨어져있어도 소통할 수 있게 되었고, 현금이 없어도 결제할 수 있게 되었으며 극장에 가지 않아도 영화를 볼 수 있게 되었죠. 그리고 그 만큼, 소프트웨어가 제약의 실종으로 인해 복잡도가 폭발한 것과 같은 원리로, 현실세계의 복잡도도 소프트웨어가 존재하지 않던 시대에 비해 폭발적으로 증가했습니다.
그렇다면 현실세계의 폭발적인 복잡도는 누가 어떻게 길들이죠? 누구도 쉽게 답할 수 있는 문제가 아님은 분명합니다. 다만 저는 이 문제를 바라보는 한 명의 소프트웨어 엔지니어로서의 관점을 공유 할 수 있을 뿐입니다.
소프트웨어의 복잡도를 길들이는 방법은 결국 하나로 귀결됩니다. 그것은 '관심사 분리'라고도 불리고, '분할 정복'이라고도 불립니다. 결국 핵심은 쪼개는 것입니다.
개인은 큰 시스템 전부를 한 번에 이해할 수 없습니다. 우리가 할 수 있는 것은, 그것을 더 작은 시스템으로 쪼개어 개인이 인지할 수 있는 단위로 나누고, 그것이 잘 동작하도록 최선을 다하는 것이죠. 그리고 그 신뢰할 수 있는 작은 시스템으로 더 큰 시스템을 만드는 것입니다. 그리고 그 작은 시스템간의 의존성을 최소화하여 한 시스템의 고장이 전체 시스템의 고장으로 전파되는 일을 막는 것입니다.
현대사회도 이런 면에서 크게 다르지 않다고 봅니다. 소프트웨어의 발전으로 21세기는 20세기와 비교해도 압도적인 속도로 복잡해지고 있습니다. 이 복잡한 세계를 한 개인이 이해하고 문제를 진단하고 처방을 내리는 것은 사실상 불가능하게 되었습니다. 아무리 훌륭한 사람을 그 자리에 앉혀놔도, 그가 큰 장애를 만드는 작은 실수를 하게 되는 것은 시간 문제라고 봅니다. 우리가 충분히 만족할 수 있는 대통령을 만나지 못했던, 그리고 앞으로도 만나기 어려운 이유이기도 할 겁니다.
그리고 우리는 결국, 언젠가 이 필연적인 이런 작은 실수와 큰 장애들의 누적으로 인해 멸망할 것이란 점 역시 예측 가능하다고 생각해요. 소프트웨어의 세계와 달리, 물리세계는 특정 시점의 스냅샷을 저장할 수도, 그 스냅샷의 시점으로 시간여행을 할 수도 없으니까요.
다만 옛 선인들은, 소프트웨어 엔지니어가 '분할 정복'으로 문제를 풀었던 것과 비슷한 방식으로, 이 문제를 풀려 시도한 바 있습니다. 그것이 민주주의, 특히 풀뿌리 민주주의입니다. 한 개인이 나라 전체의 문제를 이해하고 풀기는 어렵지만, 자신이 속한 작은 공동체의 문제를 이해하고 푸는 것은 상대적으로 가능하죠. 이러한 풀뿌리 민주주의가 충분히 잘 동작하는 상황에서 더 큰 규모의 의사결정을 이런 공동체간의 이해와 타협으로 조율하는 것이 어쩌면 우리가 필연적인 멸망을 늦출 수 있는 가장 최선의 해결책일지도 모릅니다. 민주주의는 그저 구실 좋은 하나의 추상적 이념이 아니라, 현실적으로 우리가 멸망을 늦출 수 있는 강력한 수단인 것이죠. 이런 민주주의를 훼손하는 시도는 그렇기 때문에 용납될 수 없다고 생각합니다.
대한민국이란 시스템을 이루는 가장 큰 하부 단위 시스템은 입법부, 행정부, 사법부입니다. 이 단위 시스템의 경계를 허물고, 규약으로 만들어진 인터페이스를 제끼고 직접 상대 시스템의 메소드를 호출하거나 날쿼리를 날리는 일은, 그리고 그런 관리자 권한을 누군가에게 부여하는 일은, 그야 말로 조직이 절체절명의 위기에 빠진 긴급한 순간에만 용납될 수 있습니다. 그 많은 경계와 절차들은 모두 크고 작은 장애 회고의 누적으로 인해 생겼기 때문입니다.
그러니 그런 권한을 사용할 때에는 모든 구성원이 지켜보는 가운데에 충분하 절차를 지키고 기록을 남기며 조심스럽게 사용해야 합니다.
이 긴급권한을, 별다른 회의도 없이, 심야에 일방적으로 개인이 공개적 기록 없이 얻어서 사용했다면 그 뒤에 수습하기 어려운 파국이 올 것이라는 점은 쉽게 유추 가능합니다. 그리고 조직이 경험으로 쌓아놓은 수많은 프로토콜을 무시하고 이런 위기를 도입한 구성원을 잘라내지 않는 회사는, 제가 아는 한 없습니다. 그가 또 어떤 파국을 초래할지 알 수 없기 때문입니다.