
샌프란시스코에서 일하다 보면 한국의 지하철이 그리워질 때가 한두 번이 아닙니다. 서울 지하철의 정시성은 거의 예술에 가깝지만, 이곳의 무니(Muni) 메트로는 도박에 가깝습니다. 아침 출근길, 중요한 미팅을 앞두고 지하철이 멈췄을 때의 그 막막함은 겪어보지 않은 사람은 모릅니다. 그런데 최근 흥미로운 프로젝트 하나가 눈에 들어왔습니다. 바로 Munimet.ro라는, 머신러닝(ML) 기반의 샌프란시스코 지하철 상태 페이지입니다.
보통 교통 공사가 제공하는 공식 앱이나 상태 페이지는 믿을 게 못 됩니다. 그들은 "지연 운행 중"이라는 모호한 말로 상황을 퉁치기 일쑤니까요. 하지만 엔지니어의 시각에서 이 문제는 단순한 불편함이 아니라 '데이터의 부재'와 '신뢰도(Reliability)의 문제'로 보입니다. 시스템이 죽었는지 살았는지 알려주지 않는 대시보드는 사실상 죽은 대시보드와 다를 바 없습니다. 이 프로젝트는 바로 그 지점을 파고들었습니다. 공식 API가 주는 뻔한 데이터가 아니라, 실제 차량의 움직임 패턴을 ML로 분석해 '진짜 상태'를 보여주겠다는 시도입니다.

SRE로서 이 프로젝트가 흥미로운 이유는 '관측 가능성(Observability)'에 대한 접근 방식 때문입니다. 우리가 서버를 모니터링할 때도 마찬가지입니다. CPU 사용량이 100%를 쳤다고 해서 무조건 장애는 아닙니다. 반대로 CPU가 0%라도 서비스는 죽어있을 수 있죠. 단순히 지표(Metric) 하나만 보고 판단하는 룰 기반(Rule-based) 경보는 수많은 오탐(False Positive)을 낳고, 새벽 3시에 잠든 엔지니어의 단잠을 깨웁니다. 이 프로젝트는 차량 간의 간격, 이동 속도, 정차 시간 같은 복합적인 데이터를 학습시켜 '비정상'을 탐지합니다. 즉, 엔지니어의 감(Gut feeling)을 데이터로 구현한 셈입니다.
사실 넷플릭스나 AWS 같은 대규모 시스템에서도 장애 탐지는 가장 어려운 과제 중 하나입니다. 트래픽이 평소보다 20% 떨어졌다고 칩시다. 이게 장애일까요, 아니면 그냥 오늘 날씨가 너무 좋아서 사람들이 밖으로 나간 걸까요? 단순한 임계값 설정만으로는 이런 맥락을 파악할 수 없습니다. 그래서 우리는 이상 탐지(Anomaly Detection) 모델을 도입해 과거의 패턴과 현재를 비교합니다. Munimet.ro가 지하철의 움직임을 학습해 "지금 이 시간대에는 이렇게 느릴 리가 없는데?"라고 판단하는 것과 정확히 같은 원리입니다.
하지만 이 글을 읽는 주니어 엔지니어들에게 꼭 해주고 싶은 말은, 기술의 화려함에 현혹되지 말라는 겁니다. ML을 썼다는 건 멋져 보이지만, 운영 관점에서는 관리해야 할 복잡도가 하나 더 늘어난 것입니다. 모델이 드리프트(Drift)해서 엉뚱한 예측을 내놓기 시작하면, 차라리 멍청한 룰 기반 알림보다 못할 수도 있습니다. 중요한 건 '무엇을(ML) 썼느냐'가 아니라 '어떤 문제(불확실한 도착 시간)를 해결했느냐'입니다. 이 프로젝트의 개발자는 지하철 이용객들의 '불안감'이라는 고통을 해결하기 위해 ML이라는 도구를 적절히 꺼내 들었을 뿐입니다.
제가 네이버에서 HDFS를 운영할 때도, AWS에서 EC2를 만질 때도 항상 되뇌던 말이 있습니다. "가장 좋은 자동화는 내가 신경 쓰지 않아도 되는 자동화다." 거창한 ML 파이프라인을 구축하느라 밤을 새우고 건강을 망치는 것보다는, 투박하더라도 확실하게 나를 호출해 주지 않는 스크립트가 훨씬 값어치 있습니다. Munimet.ro가 보여주는 가치도 결국 그것입니다. 이용자가 역에 가서 하염없이 기다리는 시간을 줄여주는 것, 즉 그들의 '인생 가용성'을 확보해 주는 것이죠.

샌프란시스코의 낡은 지하철 시스템 위에 최신 ML 기술을 얹었다는 아이러니가 꽤나 실리콘밸리스럽습니다. 하지만 그 이면에는 엔지니어링의 본질이 숨어 있습니다. 불확실성을 통제 가능한 데이터로 바꾸고, 사용자에게 예측 가능성을 제공하는 것. 여러분이 지금 만들고 있는 서비스의 대시보드는 어떤가요? 모든 불이 초록색인데 고객 센터 전화기에는 불이 나고 있지는 않나요? 그렇다면 여러분의 모니터링은 거짓말을 하고 있는 겁니다.
시스템의 가용성을 99.999%로 만드는 것도 중요하지만, 때로는 그 수치가 거짓임을 인정하고 진짜 데이터를 보여주는 용기가 더 필요합니다. Munimet.ro는 적어도 "지금은 답이 없으니 우버를 타세요"라고 말해주는 정직함이 있습니다. 우리네 인생도, 시스템 운영도 가끔은 그렇게 솔직한 신호가 필요하지 않을까요. 엔지니어 여러분, 부디 시스템 지키려다 여러분의 건강 지표에 빨간 불 들어오는 일은 없기를 바랍니다. 오늘도 무사히 on-call을 넘기시길.


