일을 안 한 게 아니라, 안 한다고 착각한 거였다 — 화면 글자 하나가 멈춘 밤
자동화에서 제일 무서운 건 고장이 아니다. 고장은 멈추고 비명이라도 지른다. 진짜 무서운 건 ‘잘 돌고 있다고 믿는데 사실은 아무 일도 안 하고 있는’ 상태다. 이 글은 그 조용한 멈춤을 화면 글자 하나에서 찾아낸 아침의 기록이다.
밤에 자기 전에 AI 작업자 하나를 켜 뒀다. 내가 잘 동안 밀린 일감을 알아서 하나씩 집어 처리하라는 백그라운드 일꾼이다. 켜는 명령은 분명히 들어갔고, 30분마다 깨어나 “할 일 있나?” 확인하도록 예약도 됐다. 안심하고 잤다.
아침에 기록을 열어 봤다. 밤새 처리한 일: 0건. 깨어난 횟수는 멀쩡했는데, 매번 같은 한 줄만 남기고 도로 잠들어 있었다. “지금 사용자가 작업 중 — 양보.” 새벽 5시에도, 7시에도, 9시에도, 30분마다 꼬박꼬박 “주인이 쓰는 중이라 비켜 드립니다.” 그런데 그 시간에 나는 자고 있었다. 컴퓨터 앞엔 아무도 없었다.
양보는 미덕인데, 양보만 하면
먼저 이 일꾼이 왜 ‘양보’를 하는지부터. 이 백그라운드 일꾼은 내가 직접 쓰고 있는 작업 창에 끼어들어 일감을 밀어 넣는 구조다. 그래서 안전장치를 하나 박아 뒀다. “내가 그 창에서 뭔가 하고 있는 중이면, 끼어들지 말고 비켜라.” 사람으로 치면, 내가 통화 중인 책상에 인턴이 서류를 들이밀지 않는 것과 같다. 좋은 매너고, 꼭 필요한 규칙이다.
문제는 이 일꾼이 “주인이 지금 작업 중인가?”를 판단하는 방법이었다. 사람이라면 키보드를 두드리는지 보면 된다. 기계는 그게 안 되니, 화면 맨 아랫줄에 ‘작업 중’ 표시가 떠 있는지를 글자로 훑어서 판단하게 해 놨다. 처리 중일 때 화면에 뜨는 몇몇 단어 — 그중 하나가 ‘tokens’(토큰, AI가 글을 처리하는 단위)였다.
여기까지는 합리적이다. 실제로 AI가 한창 일할 땐 화면 아래에 “…2,400 tokens 처리 중” 같은 게 흐르니까.
범인은 ‘정리하세요’ 안내문이었다
그런데 함정이 있었다. 작업 창은 한가하게 쉬고 있을 때도, 대화가 길어져 메모리가 차오르면 맨 아래에 친절한 안내문을 하나 띄운다. “/clear 하면 272,000 tokens 를 아낄 수 있어요.” 대화를 정리해 메모리를 비우라는, 그냥 도움말이다.
보이는가. 이 안내문에도 ‘tokens’가 들어 있다.
일꾼은 글자만 봤다. ‘쉬고 있는 화면’의 정리 안내문 속 ‘tokens’를, ‘일하는 화면’의 처리 표시 속 ‘tokens’와 구별하지 못했다. 그래서 한가하게 비어 있는 창을 보고도 “어, ‘tokens’가 있네 = 주인이 작업 중이군 = 비켜야지” 하고 매번 도로 잠든 것이다. 게다가 대화가 길어져 메모리가 찰수록 저 안내문은 더 끈질기게 떠 있으니, 바쁜 날일수록 일꾼은 더 확실하게 멈췄다. 가장 일을 시키고 싶은 상황에서 가장 확실하게 손을 놓는, 정확히 거꾸로 된 안전장치였다.
잡아낸 건 결국 사람의 위화감
이걸 어떻게 찾았느냐가 사실 핵심이다. 처음엔 나도 일꾼의 기록만 보고 “아, 내가 밤새 뭔가 작업 중이었나 보다”라고 넘어갈 뻔했다. 기록에 그렇게 적혀 있으니까.
그런데 다른 화면에는 다른 숫자가 찍혀 있었다. 30분마다 다섯 대의 상태를 요약해 주는 알림에는, 같은 시간 내 본진 컴퓨터가 **“한가함”**으로 또렷이 찍혀 있었던 것이다. 한쪽은 “작업 중이라 양보”, 다른 쪽은 “한가함.” 같은 시각, 같은 기계, 정반대의 두 기록.
이 어긋남이 눈에 걸려서 물었다. “한가하다고 찍혀 있는데 왜 일을 안 해?” 그 한 문장이 조사의 시작이었다. 기계의 자기 보고는 그럴듯했지만, 사람 눈에 걸린 사소한 위화감 — 두 화면의 숫자가 안 맞는다는 — 이 아니었으면 그냥 “원래 그런가 보다”로 묻혔을 일이다.
자동화를 오래 돌리다 보면 배우는 게 있다. 시스템이 내미는 ‘정상’ 보고를 그대로 믿지 말고, 두 군데 이상에서 같은 사실을 확인하라는 것. 한 화면은 거짓말을 해도, 서로 다른 두 화면이 똑같이 거짓말하긴 어렵다.
사과가 아니라 패치로 끝내기
원인을 찾고 나선 빨랐다. ‘작업 중’ 판단을 하기 전에 저 정리 안내문 줄만 먼저 빼고 보도록 한 줄을 고쳤다. 쉬는 화면의 안내문은 이제 안 세고, 진짜 처리 표시만 센다. 같은 버그가 형제 일꾼 둘에 더 있어서 거기까지 같이 고쳤고, 다시는 같은 종류의 오해가 안 생기도록 기록(이슈)으로도 남겼다.
여기서 내가 요즘 가장 마음에 들어 하는 장면이 하나 겹친다. 사실 이 AI는 며칠 사이 내게 몇 번 사과를 했다. 한 번은 작은 그림을 만들 때 비용 드는 유료 도구를 미리 안 묻고 써서(“몇백 원이지만 비용 영향 작업은 먼저 여쭀어야 했어요”), 또 한 번은 명령 한 번이면 찾을 정보를 나한테 먼저 물어 시간을 뺏어서(“앞으로 묻기 전에 검색부터 하겠습니다”).
흥미로운 건 사과의 모양이다. 이 사과들은 “죄송합니다”에서 끝나지 않았다. 비용 건은 ‘유료 도구는 허락 없이 못 쓰게’ 강제로 막는 장치로 이어졌고, 검색 건은 ‘묻기 전에 찾아라’를 규칙으로 박는 걸로 끝났다. 이번 밤샘 멈춤도 똑같다. 사과 한마디가 아니라, 같은 일이 다섯 대 어디서도 다시 안 일어나게 만드는 패치로 마무리됐다.
AI에게 기대할 가치는 ‘안 틀리는 것’이 아니다. 그건 사람도 못 한다. 내가 값을 쳐 주는 건 틀렸을 때 그걸 증거로 인정하고, 미안하다는 말 대신 재발 방지로 끝내는 마무리다. 사람 팀에서도 흔치 않은 그 습관을, 요즘은 기계 쪽에서 더 자주 본다.
남는 교훈
세 줄로 줄이면 이렇다.
첫째, 잘 만든 안전장치일수록 오탐이 무섭다. ‘바쁘면 비켜라’는 옳은 규칙이었지만, ‘바쁨’을 글자 하나로 판단한 탓에 안 바쁜데도 영원히 비켰다. 안전장치는 박는 것보다, 그게 거꾸로 작동할 때를 상상하는 게 더 어렵다.
둘째, 조용한 실패는 시끄러운 실패보다 위험하다. 멈추고 에러를 뱉었으면 바로 알았을 텐데, “양보 중”이라는 그럴듯한 정상 보고를 하며 아무 일도 안 했다. 그래서 두 군데에서 교차 확인하는 습관이 매번 나를 구한다.
셋째, 실수의 가치는 마무리에서 나온다. 같은 실수라도 사과로 끝내면 재발하고, 패치로 끝내면 그걸로 끝난다.
자는 동안 일하는 기계를 갖는다는 건 편한 만큼 무섭다. 내가 안 보는 사이 ‘잘 돌고 있다는 착각’이 쌓이기 가장 좋은 환경이기 때문이다. 그래서 나는 자동화를 늘릴수록, 자동화가 스스로 내미는 ‘정상’ 보고를 점점 덜 믿는 쪽으로 간다. 역설 같지만, 그게 자동화를 오래 신뢰하는 유일한 방법이더라.
이 글은 백그라운드 자동 작업자가 밤새 ‘바쁨 오탐’으로 멈춰 있던 사고를 일반 독자용으로 풀어쓴 에피소드입니다. 다섯 대 함대 운영 구조는 ep34, 모델 전환 검증은 ep36에서 다뤘습니다.
— 강대종