전쟁이 발명한 기술, 평시의 코드가 상속한 것
9 views
# 전쟁이 만든 기술, 평시의 코드가 물려받은 것
전쟁은 끔찍하게 비효율적인 연구개발이다. 그런데도 어떤 기술은 전쟁 속에서 가장 빨리 자랐다. 나는 이 모순을 볼 때마다 20세기 과학기술사가 조금 서늘하게 느껴진다.
1943년 영국 블레츨리 파크. 앨런 튜링과 동료들은 독일군의 에니그마 암호를 풀려고 봄베(Bombe)라는 전기기계식 장치를 돌렸다. 봄베는 계산기가 아니었다. 계산을 사람이 아니라 기계가 반복하게 만든 장치였다. 미국에서는 맨해튼 프로젝트의 여파 속에서 ENIAC이 태어났고, 1957년 스푸트니크 충격은 ARPA를 낳았다. ARPA는 ARPANET을 거쳐 지금의 인터넷으로 이어졌다.
하지만 내가 계속 붙잡게 되는 건 기원담 자체가 아니다. 전장의 논리가 오늘 우리가 짜는 코드 한 줄, 그리는 아키텍처 한 장 안에 어떻게 남아 있는가. 그리고 우리는 그걸 알고 쓰고 있는가.
## 실패를 먼저 놓고 설계한다

전장은 평시의 엔지니어링이 피하고 싶은 조건을 기본값으로 만든다. 장비는 고장 난다. 관측은 틀린다. 시간은 부족하다. 누군가는 일부러 속이려 한다.
1940년 영국 본토 항공전에서 영국 공군이 독일 루프트바페를 막아내는 데 쓴 핵심 장비는 체인 홈(Chain Home) 레이더망이었다. 이상한 점이 있다. 체인 홈의 개별 레이더 정확도는 독일의 프레야(Freya) 레이더보다 떨어졌다. 그런데 영국은 단일 장비의 정밀도에 기대지 않았다. 여러 관측값을 중앙 필터룸에 모으고, 서로 맞춰보고, 그 결과를 비행단에 다시 보냈다. 다우딩 시스템(Dowding System)은 그렇게 움직였다.
분산 시스템을 다뤄본 사람이라면 이 구조가 낯설지 않을 것이다. 노드는 틀릴 수 있다. 일부는 죽는다. 그래서 합의(consensus), 쿼럼(quorum), 단일 장애점 제거가 필요하다. Raft와 Paxos가 논문으로 정리되기 훨씬 전, 영국 해안의 레이더 격자망은 비슷한 감각으로 돌아가고 있었다.
평시의 나는 종종 정상 경로(happy path)를 먼저 본다. 버튼을 누르면 요청이 가고, 응답이 오고, 화면이 바뀐다. 전시는 그렇게 생각할 여유가 없다. 실패가 예외가 아니라 출발점이다.

## 늦은 정답은 오답이다
에니그마 해독은 수학 문제였지만, 동시에 시간 문제였다. 독일 해군은 매일 자정 키를 바꿨다. 블레츨리 파크가 그날 안에 키를 풀지 못하면 호송선단은 그대로 위험에 빠졌다. 24시간 1분 뒤의 정답은 쓸모가 없었다.
나는 이 감각이 오늘의 SLA, SLO, 실시간 시스템 안에도 남아 있다고 본다. `p99 레이턴시 200ms 이내`라는 문장은 단순한 성능 목표가 아니다. 그 시간을 넘기면 응답의 의미가 사라진다는 뜻이다. 결제 시스템에서 3초 늦게 온 승인은 거절과 비슷해지고, 거래소에서 몇 밀리초 늦은 호가는 손실로 돌아온다.
빠른 시스템은 자기 존재를 잘 드러내지 않는다. 사용자가 기다리지 않고, 멈칫하지 않고, 생각하지 않을 때 비로소 제대로 움직인다. 속도는 때로 흔적이 없는 것으로 증명된다.
## 적대적 환경을 기본값으로 둔다

암호학의 역사는 “누군가 보고 있다”는 가정을 점점 더 정교하게 만든 기록이다. 클로드 섀넌은 1949년 「비밀 시스템의 통신 이론」에서 적이 시스템의 구조를 안다고 전제했다. 비밀은 알고리즘이 아니라 키에 있어야 한다. 케르크호프스의 원리도 같은 방향에 있다.
제로 트러스트(Zero Trust) 아키텍처는 여기서 멀지 않다. 내부망이라고 믿지 않는다. 모든 요청을 인증하고 인가한다. 침해는 이미 일어났다고 보고 설계한다. 2010년대 BeyondCorp가 이 모델을 정리했지만, 그 감각 자체는 새롭지 않다. 전장의 상식이 사무실 네트워크로 돌아온 셈이다.
여기서 조금 불편해진다. 우리가 물려받은 건 좋은 설계 습관만이 아니기 때문이다.
## 잘못 물려받은 것들

군사적 기원을 가진 기술은 군사적 편향도 같이 데려온다.
먼저 중앙 통제의 유혹이 있다. 다우딩 시스템에는 강력한 중앙 필터룸이 있었고, ARPANET 초기에도 중앙 조정의 흔적이 남아 있었다. 하지만 인터넷이 커진 건 중앙이 모든 걸 붙잡아서가 아니었다. BGP, DNS, SMTP는 느슨한 합의와 지역별 자율성 위에서 버텼다. 그런데도 많은 기업 시스템은 모든 로그, 권한, 결정을 한곳으로 빨아들이려 한다. 통제실 하나가 있으면 안전할 것 같지만, 그 방이 멈추면 전체가 같이 멈춘다.
또 하나는 “돈과 사람을 충분히 넣으면 풀린다”는 믿음이다. 맨해튼 프로젝트의 그림자는 길다. 거대한 예산, 최고의 인재, 정해진 기한. 그렇게 밀어붙이면 어떤 문제든 해결된다는 식의 착각이 생긴다. 프레더릭 브룩스가 「인월(人月)의 신화」에서 반박한 것도 바로 그 믿음이었다. 소프트웨어에는 사람을 더 넣는다고 시간이 줄지 않는 구간이 있다. 산모 아홉 명을 모아도 아기는 한 달 만에 태어나지 않는다.
적이 분명하다는 착각도 위험하다. 전장의 적은 대개 국경 너머에 있다. 평시 시스템의 적은 자주 우리 안에 있다. 잘못된 배포, 대충 본 코드 리뷰, 검토 없이 병합된 PR. 방화벽은 외부 침입자를 막지만, 장애 보고서의 첫 줄에는 내부 실수가 더 자주 등장한다.
그래서 적을 바깥에서만 찾으면 안 된다. 조용한 내부를 봐야 한다. 아무 일도 없어 보이는 대시보드, 오래된 권한, 아무도 설명하지 못하는 예외 처리. 사고는 그런 곳에서 기다린다.
## 평시로 번역한다는 것

전시 기술을 평시로 가져오는 일에는 책임이 따른다.
DARPA의 자율주행 그랜드 챌린지는 테슬라와 웨이모로 이어졌고, 군용 GPS는 우버 같은 서비스를 가능하게 했다. 음성 인식 초기 연구의 자금도 정보기관의 도청 수요와 무관하지 않았다. 우리가 매일 쓰는 라이브러리, API, 프로토콜의 계보를 거슬러 올라가면 군사 예산에 닿는 가지가 적지 않다.
그 사실만으로 죄가 되지는 않는다. 다만 모른 채 쓰는 건 위험하다. 도구가 어떤 가정 위에서 만들어졌는지 모르면, 그 가정이 만든 함정도 보지 못한다. TCP가 신뢰성을 위해 지연을 감수하는 이유. OAuth가 위임을 그렇게 세밀하게 다루는 이유. 컨테이너 격리가 권한 최소화를 첫 원칙처럼 붙드는 이유. 이런 설계 뒤에는 한때 실제 적과 마주했던 사람들의 기억이 남아 있다.
나는 가끔 IDE 앞에서 그런 생각을 한다. 지금 내가 쓰는 추상화가 어디서 왔는지, 이 안전장치가 처음 누구를 막기 위해 만들어졌는지. 알 필요 없다고 넘기면 편하다. 그런데 편한 무지는 자주 비싸다.
## 전장 없는 시대의 엔지니어
전쟁이 기술의 산파였다는 말은 불편하다. 그렇다고 외면할 수도 없다. 남는 질문은 이렇다. 절박함 없이도 우리는 같은 정도의 엄밀함을 가질 수 있을까. 분산의 미덕, 시간의 냉정함, 적대적 환경에 대한 감각을 평시에도 진지하게 다룰 수 있을까.
가능하다고 믿고 싶다. 대신 조건이 있다. 전장의 비유에 취하지 않아야 한다. 장애 대응 채널을 열 때마다 “워룸”이라는 말을 멋으로 쓰지 않으면서도, 실제 장애가 났을 때 그 방이 제대로 작동하게 만들어야 한다. 적이 없는 평화 속에서도 적이 있다고 가정하되, 사람을 적으로 만들지는 말아야 한다.
결국 전쟁이 남긴 가장 오래가는 유산은 무기가 아니라 사고방식인지도 모른다. 실패를 먼저 놓고, 시간을 가볍게 보지 않고, 신뢰를 함부로 주지 않는 태도. 그것을 평시의 윤리 안에서 다시 쓰는 일. 우리는 그 번역을 거의 매일 한다. 코드 리뷰를 할 때, 권한을 줄일 때, 타임아웃 값을 정할 때.
자정이 지나면 키는 바뀐다. 오늘의 키는 오늘 풀어야 한다.