제일 느린 관문을 고치지 않고 없앤 날
11:30, “이거 시스템 자체를 드롭시키자. 옛날엔 금방금방 했는데 요즘은 진행이 안 돼.” 11:36, 결정은 더 세졌다 — “아니, 스코프도 하지 말고 그냥 다 드롭해.”
고치는 것보다 없애는 게 맞을 때가 있다
한동안 모든 배포 앞에 ‘영수증 검사’라는 관문이 서 있었다. 코드를 합치기 전에 전체 테스트를 다 통과했다는 증빙을 붙여야 통과시켜 주는 구조였는데, 좋은 의도로 세운 게 시간이 지나면서 병이 됐다. 한 번 합치는 데 검사만 두 시간 반이 걸렸다.
더 나빴던 건 결과가 흔들린다는 점이었다. 리눅스 일꾼들 환경에서는 아침에 초록이던 게 저녁에 빨강으로 뒤집혔다. 코드는 그대로인데 판정만 바뀌었다는 건, 원인이 코드가 아니라 환경이라는 뜻이다. 통과 못 한 게 아니라 계기가 틀린 건데, 나는 매번 그 계기 앞에서 두 시간 반씩 서 있었던 것이다.
처음 꺼낸 안은 “필요한 곳에만 검사하도록 범위를 줄이자”였다. 몇 분 만에 판단이 더 단호해졌다 — 아예 의무를 없앤다. 대신 검사 도구 자체는 지우지 않고 남겨뒀다. 언제든 다시 켤 수 있게 해놓고, 반드시 붙여야 한다는 요구만 해제한 것이다. 그날 합쳐진 한 건이 영수증 없이 통과한 첫 사례가 됐다.
새 일꾼의 창구는 욕심을 줄이고 나서야 열렸다
같은 날, 새로 들인 일꾼(Grok)의 텔레그램 창구를 붙이는 작업이 하루 종일 답을 안 줬다. 문제가 하나가 아니라 겹겹이었다. 대화 세션을 이어 쓰는 방식이 틀려 있었고(새로 예약하는 옵션을 이어 쓰기에 그대로 써버렸다), 채팅 한 마디를 던지면 일꾼이 검색부터 시작해 3분간 묵묵부답이었고, 낡은 프로세스가 안 죽고 살아남아 새 프로세스와 같은 창구를 두고 다퉜다.
해법은 기능을 더 붙이는 쪽이 아니라 욕심을 줄이는 쪽이었다. “새 일꾼은 본진 한 대에만 켜자 — 배포도 그 노드만.” 전 기기에 동시에 깔겠다는 계획을 접고 한 대로 좁히니, 창구를 둘이 잡고 싸우는 그림 자체가 사라졌다.
구조도 바꿨다. 단발 명령을 던져놓고 답을 기다리는 방식 대신, 사람이 실제로 쓰는 대화 화면을 그대로 옮겨다 보여주는 미러 구조로 갈아탔다. 저녁에 왕복 두 번과 안전장치 두 종이 실제로 도는 걸 확인하고 나서야 손을 뗐다.
봇이 무대 뒤 소품을 단톡방에 흘렸다
카톡봇을 갤럭시 폰에서 맥미니 앱으로 옮기는 도중, 아찔한 장면이 나왔다. 봇이 답변에 자기 내부 도구 호출 기록을 그대로 실어 형들 단톡방에 보낸 것이다. 사람에게 보여줄 문장 대신 Bash / command: which scrot ... 같은 무대 뒤 소품이 무대 위로 걸어 나온 셈이다.
즉시 유출 차단을 넣었다. 봇의 답변은 무대 위다. 도구 기록이든 에러 원문이든, 한 글자라도 새면 그건 곧 사용자가 본다. 같은 날, 봇이 이미지가 붙은 질문을 못 읽고 되묻던 그림 눈 문제도 따로 잡았다.
배운 것
이날은 앱도 매출도 없이 100% 인프라만 만진 날이었다. 제일 아픈 병목을 제도적으로 걷어냈고, 새 일꾼의 창구를 안정적인 미러 구조로 세웠고, 카톡봇을 맥미니 네이티브 앱으로 옮기면서 유출과 그림 눈을 함께 수리했다. 눈에 보이는 새 기능은 하나도 없다.
매일 밟는 관문은 어느 순간 풍경이 된다. 있으니까 지키고, 지키니까 당연해진다. 고치는 방법을 고민하기 전에 이게 정말 필요한지부터 다시 물어야 했는데, 그 질문에 도달하는 데 두 시간 반짜리 검사를 여러 번 통과해야 했다.
— 강대종 / @ssamssae