이 글에는 제휴 링크가 없고 글에 나오는 제품을 만든 곳들(마이크로소프트·OpenAI·앤트로픽 등)과 아무 관계가 없습니다. 제가 직접 만든 중계기의 개발 기록을 바탕으로 썼습니다. 삽화는 GPT 이미지 생성, 도식은 직접 제작했습니다.
자동 업데이트가 계속 되돌아간 이유 — 깨어나기도 전에 끝난 건강검진 (LLM 중계기 개발기)
수면 내시경으로 건강검진을 받는다고 해 볼게요. 검사는 무사히 끝났고, 이제 잠에서 깨어나기만 하면 됩니다. 그런데 담당자가 초시계를 누르더니 30초를 잽니다. 30초 안에 눈을 뜨지 않으면 ‘검진 실패’로 적고 처음부터 다시 받게 하는 규칙이래요. 잠이 깊은 사람은 몇 번을 다시 받아도 결과가 같겠죠. 몸에는 아무 문제가 없는데도요.
더 곤란한 건 규칙을 바꾸는 방법이었어요. 규칙을 바꾸려면 담당자를 바꿔야 하는데, 새 담당자를 들일지 말지를 정하는 사람이 바로 그 옛 담당자였거든요. 그것도 같은 30초 검진으로요.
제가 만든 LLM 중계기의 자동 업데이트가 꼭 이랬습니다. 새 판(새 버전)으로 바꾸면, 옛 판이 남긴 도우미가 새 판이 30초 안에 대답하는지 지켜봤어요. 그런데 새 판은 처음 켜질 때 파일 수천 개를 푸느라 어떤 컴퓨터에서는 몇 분이 걸렸고, 도우미는 그걸 ‘실패’로 판정해 조용히 옛 판으로 되돌렸습니다.
이 글은 LLM 중계기 개발기의 23편입니다. 지난 22편 「‘준비 중’이 끝나지 않는 화면」에서는 모든 상태에는 끝이 있어야 한다는 이야기를 했어요. 오늘은 반대로, 끝을 너무 일찍 정해 버린 이야기입니다.

결론 요약
- 증상 — 자동 업데이트를 해도 어떤 컴퓨터에서는 버전이 그대로였어요. 옛 판의 도우미가 새 판이 30초 안에 대답하지 않는다며 조용히 되돌렸기 때문이에요
- 원인 — 새 판은 처음 켜질 때 파일 5천8백여 개를 푸는데, 어떤 컴퓨터에서는 몇 분이 걸렸어요. 게다가 판정하는 쪽이 옛 판이라, 판정 시간을 늘린 새 판도 그 판정을 통과해야만 들어올 수 있었어요
- 해결 — 파일을 처음부터 다 펼쳐 까는 설치 프로그램으로 바꿨어요. 첫 실행의 풀기 단계가 사라졌고, 이미 깔린 판은 설치 프로그램을 한 번 손으로 실행해 갈아탔어요
🔄 1. 자동 업데이트는 어떻게 일했나
8월 8일 새벽, 무거운 앱 껍데기를 걷어내고 트레이 프로그램을 새로 만들면서(25편에서 다룹니다) 윈도용 중계기에 자동 업데이트를 넣었어요. 저장 기록(커밋)의 제목은 ‘안전한 업데이트’였고, 설계도 그 이름에 걸맞게 꼼꼼했습니다.
① 새 판이 나왔는지 확인하고, 사용자가 승인하면 내려받아요
② 받은 파일의 크기와 지문을 확인해요. 여기서 지문(SHA-256)은 파일 내용으로 계산한 긴 확인 번호예요. 한 글자만 달라져도 전혀 다른 값이 나와서, 받은 파일이 원본과 똑같은지 볼 때 흔히 써요
③ 중계기가 처리 중인 요청이 모두 끝날 때까지 기다려요. 일하는 도중에 문을 닫지 않으려고요
④ 트레이가 자기 실행 파일을 복사해서 ‘업데이트 도우미’로 띄우고 스스로 꺼져요
⑤ 도우미는 옛 파일을 백업해 두고 새 파일로 바꿔 끼워요
⑥ 새 판을 켜고 0.5초마다 “살아 있니?” 하고 물어요. 프로그램이 제대로 살아 있는지 이렇게 확인하는 일을 개발에서는 건강 확인(헬스 체크, health check)이라고 불러요. 이름이 중계기이고 버전이 새 판 번호와 같은 대답이 30초 안에 와야 통과예요
⑦ 통과하면 백업을 지우고 끝. 통과하지 못하면 새 판을 끄고, 새로 깐 파일을 지우고, 백업을 되돌린 뒤 옛 판을 다시 켜요. 이걸 롤백(rollback), 우리말로 되돌리기라고 해요
새 판이 망가져 있어도 사용자는 쓰던 판으로 돌아가니, 안전장치로는 그럴듯했어요. 8월 초에 낸 새 판들의 안내문에도 ‘업데이트 적용 시험’과 ‘건강 확인에 실패하면 되돌리는지 보는 시험’을 둘 다 통과했다고 적혀 있어요.
그런데 ④에 작은 사실 하나가 숨어 있어요. 업데이트를 맡는 도우미는 지금 깔려 있는 옛 판의 실행 파일을 복사한 것이에요. 새 판을 들일지 말지를 옛 판이 정하는 구조였죠. 이 사실이 이번 이야기 내내 발목을 잡습니다.
📦 2. 상자 하나에 담은 파일 수천 개 — 8월 10일 새벽
업데이트 기능을 실제로 굴려 보자, 옛 판에서 새 판으로 건너가는 다리가 몇 번 끊겼어요. 8월 10일 새벽 1시 25분, 1시 44분, 2시 13분. 50분이 채 안 되는 사이에 새 판이 세 번 나왔습니다. 세 번 모두 같은 깨달음에서 나온 수정이었어요. 다리를 건너게 해 주는 건 새 판이 아니라 이미 깔린 옛 판의 코드라는 것이죠.
① 스스로를 막는 최소 조건 (v0.1.61) 새 판에는 ‘이 판을 받으려면 업데이트 기능이 최소 몇 판이어야 한다’고 적는 칸이 있는데, 여기에 새 판 자신의 번호를 적고 있었어요. 그러면 바로 앞 판조차 ‘내 업데이트 기능은 그보다 낮다’며 받기를 거부해요. 코드 주석은 이걸 자기 업데이트를 ‘순환 요구’로 만드는 실수라고 적었어요. 이 칸은 지금 방식의 업데이트 기능이 처음 들어간 판(0.1.57)으로 고쳤어요.
② 너무 긴 지시문 (v0.1.62) 옛 판은 도우미를 띄울 때 새 판에 든 파일 수천 개의 목록을 지시문에 통째로 실어 보냈어요. 그런데 윈도에는 프로그램을 띄울 때 건네는 지시문의 길이에 제한이 있어서, 도우미가 뜨기도 전에 막혔어요. 지시문에 판 번호와 파일 위치만 싣도록 고쳤지만, 그건 이 판이 깔린 다음의 이야기예요. 지금 다리를 건너려는 옛 판들은 여전히 긴 지시문을 만들었거든요.
③ 새 판의 모양을 옛 판에 맞추다 (v0.1.63) 옛 판은 이미 사용자 컴퓨터에 깔려 있어서 고칠 수가 없어요. 그래서 반대로 새 판의 모양을 바꿨어요. 파일 5천8백여 개를 상자 하나(앱 묶음)에 담아, 바깥에 남는 파일을 아홉 개로 줄였어요. 옛 판이 만드는 지시문은 1MB가 넘던 데서 1,964바이트로 줄었고, 다리는 다시 이어졌습니다.
대신 대가가 있었어요. 새 판은 처음 켜질 때 이 상자부터 풀어야 했어요. 한 번 풀어 둔 파일은 다음 실행부터 다시 쓰지만, 상자 안 내용이 바뀌는 새 판마다 첫 실행에서 다시 풀었고요. 8월 20일에 붙잡은 사고는 바로 이 상자에서 시작됐어요.
⏱️ 3. 깨어나기도 전에 끝난 검진
30초라는 판정 시간은 8월 8일, 상자가 생기기 전에 정한 숫자였어요. 이틀 뒤 첫 실행에 ‘상자 풀기’라는 일이 더해졌지만 초시계는 그대로였죠.
새 판이 처음 켜질 때 일어나는 일을 순서대로 보면 이래요.
- 새 판의 트레이가 켜지자마자 상자가 온전한지 확인하고 풀기 시작해요
- 다 풀어야 그 안에 든 중계기 서버를 켤 수 있어요
- 서버가 켜져야 도우미의 “살아 있니?”에 대답할 수 있어요
그리고 어떤 컴퓨터에서는 첫 실행의 압축 풀기가 몇 분씩 걸렸어요.
도우미 쪽에서 보면 이렇습니다. 새 판을 켰는데 30초 동안 대답이 없어요. 판정은 ‘새 판이 망가졌다’. 도우미는 설계대로 새 판을 끄고, 새 파일을 지우고, 옛 판을 되돌려 켰어요. 새 판은 망가진 게 아니라 아직 깨어나는 중이었는데 말이죠. 수면 내시경을 마친 사람이 눈을 뜨기도 전에 검진표에 ‘실패’가 찍힌 거예요.
되돌리기 장치는 설계대로 정확히 일했어요. 틀린 건 장치가 아니라 판정 기준이었죠.
사용자 쪽에서 보면 더 헷갈렸어요. 되돌린 옛 판은 아무 알림 없이 조용히 다시 켜졌거든요. 업데이트를 승인했는데, 조금 뒤 보이는 건 옛 판 그대로예요. 저장 기록에는 이 상황이 ‘업데이트했는데 버전이 그대로’라는 혼란이라고 적혀 있어요.
다시 시도하면 어떨까요? 같은 옛 도우미가, 같은 30초 초시계로, 같은 몇 분짜리 풀기를 지켜봐요. 결과도 같죠. 몇 번을 눌러도 같은 자리로 돌아오는 고리예요.

🩹 4. 응급 처치 — 5분으로 늘리고, 되돌리면 알린다
8월 20일 오전 10시 20분, 함께 쓰던 사람의 보고를 받고 업데이트 도우미를 손봤어요(v0.1.77).
- 판정 시간 30초 → 5분 — 첫 실행에는 수천 개 파일을 푸는 일이 들어 있으니, 그 준비 시간에 맞춰 5분을 준다는 설명이 붙었어요
- 되돌리면 알린다 — 되돌린 판을 다시 켤 때 ‘되돌림’ 표시를 함께 넘겨서, 트레이가 알림 풍선을 띄우게 했어요. 제목은 ‘업데이트 롤백됨’, 내용은 새 판 적용에 실패해 이전 판을 복원했으니 기록(로그)을 확인하거나 다시 시도하라는 안내예요
두 번째 수정에 붙은 코드 주석은 짧아요.
롤백은 무알림이면 “업데이트했는데 버전이 그대로”라는 혼란만 남는다.
그런데 여기에 함정이 있었어요. 1절의 ④를 떠올려 보세요. 업데이트를 판정하는 도우미는 이미 깔린 판의 실행 파일이에요. 5분 초시계와 알림 풍선은 0.1.77 안에 들어 있으니, 0.1.77이 깔린 다음부터, 그러니까 0.1.77에서 출발하는 업데이트부터만 효과가 있어요.
그럼 0.1.76이 깔린 컴퓨터가 0.1.77로 가는 업데이트는요? 그 판정은 0.1.76의 도우미가 30초 초시계로 해요. 0.1.77도 처음 켜질 때 상자를 풀어야 하니, 첫 실행이 몇 분 걸리는 컴퓨터에서는 똑같이 되돌아가요. 5분 초시계를 든 새 담당자가 옛 담당자의 30초 검진에서 떨어지는 셈이에요.
실제로 같은 날 낮, 0.1.76이 깔린 컴퓨터에서 0.1.79로 다시 시도해도 끝내 실패하는 것이 직접 확인됐어요. 기록은 이렇게 정리했어요. 5분으로 고친 판도 옛 도우미로는 도달할 수 없다.

📀 5. 설치 프로그램으로 갈아타다
기록은 이 문제를 부트스트랩 결함이라고 불렀어요. 부트스트랩은 장화 뒤의 고리(bootstrap)를 잡아당겨 제 몸을 들어 올린다는 옛말에서 온 표현으로, 개발에서는 흔히 ‘자기 자신을 세우는 데 자기 자신이 필요한’ 상황을 가리켜요. 고장 난 업데이트 길을 고치는 수정이, 바로 그 고장 난 길로만 배달될 수 있었던 거죠.
그래서 같은 날 오후 2시 30분, 응급 처치 네 시간쯤 뒤에 길 자체를 바꿨어요(v0.1.80). 압축판 대신 윈도 설치 프로그램으로 내보내기로 한 거예요. 설치 프로그램은 윈도용 설치 파일을 만드는 공개 도구(Inno Setup)로 만들었어요.
- 파일을 다 펼쳐서 깐다 — 설치할 때 파일을 처음부터 제자리에 다 풀어 둬요. 상자가 없으니 첫 실행에 풀 것도 없어요. 기록은 이걸 되돌리기 고리의 원인 자체를 없애는 일이라고 적었어요
- 업데이트 순서가 단순해졌다 — 새 판 확인 → 설치 프로그램 내려받기 → 크기와 지문을 두 군데(새 판 안내 파일, 배포 페이지가 알려 주는 값)와 대조 → 처리 중인 요청이 끝나기를 기다림 → 설치 프로그램을 조용히 실행하고 중계기는 꺼짐 → 설치 프로그램이 파일을 바꾸고 중계기를 다시 켬
- 도우미·초시계·되돌리기를 뺐다 — 직접 만든 업데이트 도우미도, 30초든 5분이든 초시계도, 되돌리기도 이 흐름에는 없어요. 새 판 안내문에는 설치가 실패하면 이전 판은 손대지 않은 채 남는다고 적었어요
- 덤으로 더 작아졌다 — 설치 프로그램은 27.6MB로, 옛 압축판 40MB보다 작았어요
관리자 권한 없이 사용자 폴더에 깔리고 시작 메뉴에도 등록돼요. 설정과 암호화해 둔 열쇠는 그대로 남고요.

남은 건 이미 깔린 압축판들이었어요. 0.1.79까지의 옛 판은 압축판만 찾을 줄 알아서, 설치 프로그램으로 나온 새 판을 보면 ‘받을 파일이 없다’는 오류로 멈춰요. 아무것도 지우거나 바꾸지 않고 분명하게 멈추도록 해 두었어요. 그래서 이 판들은 설치 프로그램을 한 번 손으로 실행해서 갈아타야 했어요. 새 판 안내문에 따르면 이 한 번이 30초 되돌리기 고리에 갇혀 있던 컴퓨터도 풀어 줘요. 그다음 업데이트부터는 설치 프로그램이 맡고요.
자동 업데이트에서 ‘이번 한 번은 손으로’라는 안내는 어색해 보일 수 있어요. 하지만 업데이트 길 자체가 고장 났을 때, 그 길로 고침을 보내려는 시도는 끝나지 않아요. 한 번의 손 작업이 가장 정직한 해결이었어요.
물론 설치 프로그램에도 숙제가 따라왔어요. 같은 날 저녁에는 중계기를 켜 둔 채 설치하면 ‘실행 중인 앱 닫는 중’에서 멈추는 일이 있었고(21편), 아무 창 없이 조용히 설치하는 방식은 다음 편의 이야기가 됩니다.
📋 6. 남긴 규칙 — 옛 판을 유일한 심판으로 두지 않는다
- 옛 판을 새 판의 유일한 심판으로 두지 않는다 — 업데이트를 판정하는 코드는 언제나 이미 깔린 옛 판에 있어요. 판정이 틀리면 그 판정을 고친 판조차 도착하지 못해요. 8월 10일 새벽의 다리 공사와 8월 20일의 고리는 같은 이야기였어요
- 판정 시간은 가장 느린 첫 실행에 맞춘다 — 30초는 상자가 생기기 전의 숫자였어요. 첫 실행에 할 일이 늘면 판정 기준도 함께 다시 봐야 해요. 더 좋은 건 첫 실행에 오래 걸리는 일 자체를 없애는 것이었고요
- 되돌리기는 보이게 한다 — 조용한 되돌리기는 안전장치가 아니라 수수께끼를 남겨요. 실패했다면 실패했다고, 무엇을 보면 되는지까지 알려야 해요
- 업데이트 길이 고장 나면, 한 번의 손 작업을 부탁한다 — 옛 판은 아무것도 망가뜨리지 않고 분명하게 멈추고, 사람이 한 번만 갈아타면 그다음부터는 새 길로 가요
정리
① 자동 업데이트는 옛 판의 도우미가 새 판을 켜고 30초 안에 대답하는지 보는 방식이었어요. 그런데 새 판은 첫 실행에 파일 5천8백여 개를 풀어야 했고, 어떤 컴퓨터에서는 몇 분이 걸려 조용히 되돌아갔어요 ② 판정 시간을 5분으로 늘리고 되돌림을 알리게 했지만, 판정하는 쪽은 늘 옛 판이라 이미 깔린 판들에는 그 수정이 도착하지 못했어요 ③ 파일을 다 펼쳐 까는 설치 프로그램으로 바꿔 원인을 없앴고, 이미 깔린 판은 설치 프로그램을 한 번 손으로 실행해 갈아탔어요
다음 24편은 「조용한 업데이트는 멈춘 줄 안다」예요. 설치 프로그램이 아무 창 없이 조용히 일하는 동안 트레이 아이콘까지 사라지자, 업데이트가 멈춘 줄 알았던 이야기를 할게요.
2026년 10월 1일 기준입니다. 제가 만든 중계기의 개발 기록(저장 기록의 시각과 메모, 새 판 안내문, 문서)을 바탕으로 썼고, 특정 기업·서비스의 공식 입장이 아닙니다.