← 업계·문화

철거 비용을 세어보고 12분 만에 설계를 뒤집었다

한 달짜리 무료 크레딧을 쓰려고 모델 게이트웨이를 붙이면서 두 설계안을 떼어낼 때 드는 일로 갈랐고, 다음 날 원복이 백업과 바이트 일치로 끝난 기록

목차
  1. 문제
  2. 편입 안은 21분 만에 기각됐다
  3. 철거 비용이 두 안을 갈랐다
  4. 로그인 한 번이 1순위 안을 뒤집었다
  5. 원복 결과가 설계를 증명했다
  6. 결론
  7. 한계·재검토 트리거

이미 쓰던 내 모델 게이트웨이에 끼워 넣는 안을 12분 만에 버리고 옆에 따로 세우는 쪽을 골랐다.
근거란에 적은 것은 나중에 떼어낼 때 드는 일이다.
한 달치 무료 크레딧을 다 태우면 끝나는 작업이라 시작부터 끝이 정해져 있었다.

문제

한 달치 모델 크레딧을 무료로 주는 Kiro를 쓰려고 외부 모델 게이트웨이를 붙이는 작업이었다.
그 게이트웨이는 이미 굴러가고 있었고 붙일 것은 프로바이더 하나였다.
선택지는 둘이었다. 게이트웨이 안에 백엔드로 편입하는 안과, 옆에 따로 세우고 라우팅만 그쪽으로 돌리는 안이다.
붙이는 비용만 재면 편입이 싸다. 설정이 한 곳에 모이고 관리할 프로세스가 늘지 않는다.
그런데 이 작업에는 끝나는 날이 있었다.

편입 안은 21분 만에 기각됐다

오전 여덟 시대에 조사부터 했다.
게이트웨이에 서드파티 백엔드를 끼울 배선이 이미 있는지 소스를 직접 열어 확인했고, 있어 보였다.
21분 뒤에 그 판단을 뒤집었다.
있다고 본 배선은 화면을 그리는 콜백 뭉치였고 플러그인 로더도 동적 로딩 경로도 없었다.
소스로 읽었기 때문에 오전 안에 갈렸다.

같은 기각 메모에 위험 지점을 하나 더 적었다.
편입에서 실제로 위험한 것은 설정 동기화가 내 설정을 덮어쓰는 쪽이었고, 리소스 경합은 위험 목록에서 내려갔다.
6분 뒤에는 목적 자체가 정정됐다.
붙이는 목적은 에이전트별 카탈로그 레인이다.
크레딧을 의도적으로 소진해야 하는 작업이니, 평소에 놀다가 사고 때만 켜지는 대체 경로로 설계하면 처음부터 틀린다.

철거 비용이 두 안을 갈랐다

12분 뒤에 편입을 버리고 따로 세우는 쪽을 택했다.
결정 메모의 근거란에 적힌 것은 철거 비용이다.
그때까지 나는 붙이는 비용만 세고 있었다. 떼는 비용을 표로 세워보자 순서가 뒤집혔다.

설계안철거할 때 필요한 일
옆에 따로 세우고 라우팅만 돌린다설정에서 프로바이더 블록 세 개를 지우고 프록시 프로세스를 내린다
기존 도구에 백엔드로 편입한다설정 생성기와 테스트를 되돌리고, 런타임 설정 파일을 다시 만들고, 스모크 점검에서 항목을 빼고, 이미 가동 중인 상주 서비스를 재기동한다

편입 쪽 목록이 긴 이유는 손댈 곳이 서로 물려 있어서다.
설정을 만들어내는 코드와 그 코드를 검사하는 테스트가 한 쌍으로 붙어 있다.
거기서 나온 설정 파일은 스모크 점검 항목이 물고 있고, 그 설정 파일을 물고 상주 서비스가 이미 떠 있다.
하나를 되돌리면 다음 것을 다시 만들어야 한다.
따로 세우는 쪽은 지우기와 내리기 둘로 끝나고 그 둘 사이에는 순서 의존이 없다.

로그인 한 번이 1순위 안을 뒤집었다

1순위로 정해둔 공개 프록시 구현은 전제를 하나 깔고 있었다.
로그인하면 SSO(싱글 사인온) 인증 캐시 파일이 만들어지고 그 파일에서 토큰을 읽는다는 전제다.
Homebrew로 명령줄 도구를 깔고 실제로 로그인해봤다.
그 캐시는 만들어지지 않았다. 토큰은 다른 위치에 다른 형태로 들어갔다.
그 구현은 그대로는 기동조차 되지 않는다.
순위를 정할 때 읽은 것은 설명이었고 순위를 뒤집은 것은 로그인 한 번이었다.

하루 안에 갈아탄 결과가 실제 저장 위치와 형태에 맞춘 자체 패치다.
그 패치의 의존성 선택도 같은 기준을 썼다.
네이티브 빌드가 늘어나는 외부 라이브러리를 붙이는 대신 런타임 표준 모듈로 끝냈고, 그 기각 사유를 커밋 트레일러에 남겼다.
의존성 하나도 나중에 떼어낼 물건으로 셌다.
저녁까지 배선이 끝났고 모델 19종(배선 완료 시점 카탈로그 계수)을 내가 쓰는 코딩 에이전트 세 종에 걸었다.

낮에 라우팅을 새 프로바이더 쪽으로 넘길 때는 원본 설정 파일을 먼저 백업으로 떠놨다.
지울 블록이 어디인지 이미 알고 있었으므로 되돌릴 지점도 그 파일 하나로 정해졌다.
붙이는 동안에도 떼는 절차가 같이 굴러간 셈이다.

원복 결과가 설계를 증명했다

다음 날 라우팅을 원래대로 되돌렸다.
설정 파일이 백업과 바이트 일치했고, 라우팅 점검이 통과했고, 진단은 0건이었다.
되돌렸다는 주장을 되돌린 결과물로 증명한 셈이다.
철거 비용이 싸다는 판단은 철거해보기 전까지 주장이었다.
모델 카탈로그는 그대로 뒀다. 되돌린 것은 라우팅뿐이다.

트라이얼이 태운 크레딧은 728 소모로 기록됐다(마이그레이션 완료 시점 기록 기준).
같은 달에 몰려 있던 다른 실험들도 형태가 같았다.
전부 짧고, 전부 실측으로 판정하고, 전부 접거나 되돌릴 수 있게 지어졌다.

결론

붙이기 쉬운 설계와 떼기 쉬운 설계는 다르다.
편입은 붙일 때 싸고 뗄 때 비싸다.
어느 쪽을 고를지는 그 작업에 끝나는 날이 있는지가 정한다.

신중함의 문제라기보다, 끝나는 날이 정해진 작업에서는 철거가 반드시 일어난다는 사실의 문제다.
반드시 일어날 일의 비용을 마지막에 재면 그때는 이미 손댈 곳이 서로 물린 뒤다.
그래서 설계를 고를 때 먼저 묻는 것을 바꿨다. 무엇을 붙여야 하는지보다 이걸 떼려면 무엇을 해야 하는지를 먼저 적는다.
라우팅을 넘기던 날에도 원본 설정 파일부터 백업으로 떠뒀다.

한계·재검토 트리거

2026-09 기준 / 재검토 트리거: 이 구성을 다시 붙이거나 완전히 걷어내는 일이 생겼을 때 철거 비용 표에 적은 두 줄과 실제로 든 일이 어긋나면 이 글의 판정을 다시 연다.