← 작업일지

2026-08-11 · v1.0.0

2026.08.11 작업일지 v1.0.0

20:12, 나는 「경고만 하던 규칙」을 실제 차단으로 바꾸는 커밋을 올리고 있었다. 22:48, 그 차단이 원문을 통째로 증발시킨다는 지적을 받고 다시 열었다. 22:58, 그 사이 옆에서는 로컬 32B 모델이 초당 2 토큰을 뱉으며 조용히 기각당하고 있었다.

오늘은 “경고를 진짜 마찰로 바꾸면 무슨 일이 생기는가”를 세 군데서 동시에 배운 날이다. 규칙 하나를 차단으로 승격했더니 예상 못 한 부작용이 나왔고, 검증 파이프라인 하나를 좁혔더니 25분이 4분이 됐고, 로컬 LLM을 상시 워커로 쓸 수 있는지 다시 재봤다가 같은 결론에 다시 도착했다.

1. 경고는 지켜지지 않는다

봇이 아니키에게 한국어로 답해야 한다는 규칙이 있다. 문서에도 있고 메모리에도 있었다. 그런데 영어 시스템 알림이 발화자인 턴에서 영어 답이 그대로 폰에 착지하는 일이 반복됐다. 문장으로 두 군데나 적어뒀는데 안 지켜졌다는 건, 처방이 문장 추가가 아니라는 뜻이다.

그래서 게이트를 경고에서 차단으로 올렸다(T-260811-022). 대상도 DM 전용에서 DM+그룹으로 넓혔다.

2. “차단하면 유실 없다”는 절반만 참이었다

머지 게이트에서 지적이 들어왔다. 차단하면 대신 통지문이 나가니 유실이 없다고 썼는데, 차단된 원문 자체는 어디에도 안 남는다는 것이었다. 통지문은 “막았다”는 사실만 전하지 막힌 내용을 전하지 않는다.

수리는 단순했다. 차단 원문을 로컬 JSONL에 적재하고(상한 200건 회전) 통지문에 보관 경로를 한 줄 붙였다. 적재에 실패해도 통지문은 나가게 뒀다 — 보존하려다 알림까지 죽이면 그게 더 나쁘다.

배운 것 — “막았으니 안전하다”는 검증되지 않은 절반이다. 막은 다음에 그 내용이 어디로 가는지까지 적어야 설계가 닫힌다.

3. 658건을 94건으로

PR 하나 올릴 때마다 검증 스윕이 25~32분 돌았다. 셸 파일 하나 고쳐도 전량을 돌리니까 그렇다. --scope pr 축을 넣어 변경과 연관된 대상 + 스모크 세트만 돌게 했다(T-260811-020).

상황종전스코프 적용
셸 1파일 변경658건94건
스코프 밖 변경658건92건(스모크만)

기본값은 full로 뒀다. 플래그를 안 주면 종전과 완전히 같이 돈다 — 게이트가 조용히 좁아지는 것이 이 축의 유일한 사고 형태라서, 좁히기는 명시 옵션으로만 열었다.

4. 카톡봇의 두뇌를 갈아끼웠다

카톡봇의 판단 엔진을 교체하고(21:26), 그림을 읽는 축까지 붙였다(21:37). 격리 계약은 그대로 지켰다 — 호스트 디렉토리를 통째로 마운트하지 않고, 그림 한 장만 컨테이너 안으로 복사한 뒤 읽기 권한을 그 경로 하나로만 열었다.

개발 중에 잡은 버그 두 개가 더 값졌다. 하나는 미로그인 상태에서 엔진이 실패했는데 에러 문구를 정상 답변처럼 내보내 카톡방에 그대로 나갈 뻔한 것. 다른 하나는 권한 거부를 모델이 말로 얼버무리면 그 답이 진짜 답인 척 통과하던 것. 둘 다 “실패가 성공과 같은 모양으로 반환되는” 같은 계열이다.

5. 로컬 32B 모델, 다시 재보고 다시 기각

맥북 M5(통합메모리 24GB)에 32B 코딩 모델을 얹어봤다. 예전에 소형 모델을 기각한 기록이 있었지만 “VRAM 30B급이면 재검토”라는 조건을 달아뒀었고, 이번에 그 조건이 충족돼서 다시 쟀다.

  • 적재: 성공. 19GB 모델이 21GB 상주.
  • 문맥 읽기: 30.9 tok/s — 정상.
  • 답 생성: 1.37~3.00 tok/s (평균 약 2).
  • 멀티파일 수정: 통과. 두 파일에 걸친 버그를 한 번에 고쳤다.
  • 도구 호출 포맷: 실패. 의미상 맞는 답은 만드는데, 에이전트 하네스가 요구하는 규격으로 감싸지 못했다.

결론은 “아직 아니다”. 근본 원인이 능력이 아니라 메모리라는 게 분명했다 — 21GB를 24GB에 얹으면 OS와 세션이 쓸 여유가 3GB뿐이라 상시 압축·스왑 상태가 된다. 실제로 로드 직후 여유 페이지가 81MB까지 붕괴했다가 언로드하니 20GB로 즉시 회복했다.

배운 것 — “로드된다”와 “여유 있게 돌아간다”는 다른 조건이다. 재검토 조건을 걸 땐 후자로 걸어야 한다.

6. 그래서 뭐가 남았나

  • 한국어 게이트가 차단으로 발효됐고, 차단된 원문도 보존된다.
  • PR 시점 검증이 필요할 때 658건 대신 94건만 돌릴 수 있게 됐다.
  • 카톡봇이 글자와 그림을 함께 읽는다.
  • 로컬 32B 상시 워커 안은 기각으로 확정. 모델 파일은 디스크에 남겨뒀다.

들어간 돈은 0원이다. 로컬 모델 실험에 든 건 전기와 11분이었고, 그 11분으로 “월 얼마짜리 GPU를 살 필요가 있나”라는 질문을 닫았다.


다음 이야기는 완료 보고는 갔는데 장부는 12시간 비어 있던 이야기.

— 강대종 / @ssamssae