런던의 핀테크 운영 담당자가 동일한 사고 보고서를 진단 도구에 사흘 간격으로 두 번 붙여넣습니다. 파일은 같고, 줄도 같고, 신뢰 점수도 같으며, 제안된 수정 사항도 같은데 — 화요일에 스키마가 변경되어 이제 그 수정 사항이 틀렸습니다. 아무도 시스템을 속인 것이 아닙니다. 시스템은 자신이 구축되도록 설계된 것을 정확히 수행했을 뿐입니다. 이것이 불편한 부분입니다.
Corporate AI 365는 근본 원인 분석(root-cause analysis)을 세 가지 요소의 해시 값에 기반하여 캐싱합니다: 문제 텍스트, 코드 스냅샷, 그리고 모델 버전. 동일한 해시, 매번 동일한 답변 — 이것이 승인 게이트를 동전 던지기처럼 무작위가 아닌 방어 가능한 것으로 만듭니다. 하지만 캐시는 그것을 무효화해야 하는 주체만큼만 정직할 수 있으며, 실시간 데이터베이스에 절대 연결하지 않는 시스템에서 그 무효화 요소 중 하나는 누군가가 다시 내보내야(re-export) 기억하는 파일입니다.
캐시 키가 생각보다 작다
베를린의 엔지니어가 진단에 필요한 입력을 상상할 때, 전체 리포지토리와 전체 데이터베이스를 떠올립니다. 하지만 캐시는 어느 쪽도 보지 않습니다. 커밋된 소스 트리(source tree)와 스크립트화된 스키마 내보내기(scripted schema export) — 개발자가 생성하여 체크인하거나 업로드하는 테이블, 컬럼, 제약 조건 및 뷰의 덤프를 봅니다. 연결 문자열(connection string)도 없고, 프로덕션에 대한 쿼리도 절대 없습니다. 이것이 우리가 설계할 때 포기할 수 없는 부분입니다.
그 결과는 해시가 서로 다른 속도로 움직이는 두 가지 아티팩트의 함수라는 것입니다. 코드는 푸시될 때마다 변경됩니다. 진단 엔진은 GitHub, GitLab, Bitbucket 또는 Azure DevOps 커넥터를 통해 리포지토리를 직접 읽기 때문에 이를 즉시 감지합니다. 스키마 내보내기는 누군가 다시 내보낼 때만 변경됩니다. 만약 마이그레이션(migration)이 스테이징 환경에 컬럼을 추가했지만 팀이 스크립트화된 스키마를 재생성하는 것을 잊는다면, 코드 스냅샷은 최신처럼 보이고, 해시도 최신처럼 보이며, 캐싱된 진단 결과가 완전한 신뢰도로 제공됩니다 — 분석이 의미한다고 생각하는 컬럼이 더 이상 그 의미를 갖지 못할 수도 있습니다.
이것은 캐싱 전략의 버그가 아닙니다. 라이브 연결을 유지하기를 거부하는 데 따르는 정직한 비용입니다. AI가 프로덕션(production)에 직접 쿼리하도록 하여 스키마를 '항상 최신' 상태로 만들 수는 있지만 — 그리고 우리는 의도적으로 그렇게 구축하지 않았습니다. 왜냐하면 AI 추론 엔진이 라이브 행(row)을 읽을 수 있는 순간, 귀하의 보안 검토는 대화가 아니라 책임 감사(liability audit)가 되어버리기 때문입니다. 따라서 트레이드오프는 그대로 유지됩니다: 재현성(reproducibility)과 깨끗한 신뢰 경계(trust boundary)를 얻는 대신, 누군가의 업무로 처리해야 하는 수동 단계를 감수하는 것입니다.
왜 수동 단계가 간소화된 팀에서 실제 위험인가
이러한 트레이드오프는 스키마 위생을 습관처럼 관리하는 시니어 엔지니어가 있을 때는 견딜 만합니다. 하지만 그런 사람이 없을 때는 실질적인 노출(exposure)입니다. 현재 유럽의 중소기업(SMEs) 및 중견 기업들 사이에서, 최근 업계 설문조사에 따르면 팀의 상당 부분—10개 중 6개 정도—이 공석을 채울 자격을 갖춘 개발자를 찾기 어렵다고 보고합니다. 더블린의 물류 회사나 암스테르담의 소매업체가 플랫폼 팀 대신 세 명의 제너럴리스트(generalist)로 프로덕션 지원을 운영한다고 해서, 스키마 내보내기가 두 스프린트 동안 오래되었다고 해서 태만하다는 의미가 아닙니다. 그들이 이 규율을 전담으로 관리할 여유 인력이 없습니다.
이것은 중요합니다. 왜냐하면 잘못된 진단의 비용은 대칭적이지 않기 때문입니다. 업계 연구에 따르면, 기업의 다운타임(downtime)은 대규모 조직의 경우 분당 평균 9,000 US달러 수준으로 추정됩니다. 그리고 확신을 갖고 잘못된 컬럼(column)을 지목하는 진단은 단순히 사고를 해결하지 못할 뿐만 아니라, 사고 발생 초기 20분을 잘못된 가설에 소진시킵니다. 시니어 엔지니어가 AI의 출력을 즉석에서 검토해 줄 간소화된 팀에게 있어, 그 20분은 통제 가능한 사고와 확대되는 사고 사이의 전부일 수 있습니다.
우리가 실제로 무효화하는 것과 의도적으로 하지 않는 것
이러한 점을 고려할 때, 설계상의 해답은 스키마가 항상 최신이라고 가장하는 것이 아닙니다. 대신, 오래된 상태(staleness)를 조용히 넘어가는 것이 아니라 눈에 띄게 만드는 것입니다:
- 캐시 항목은 해시와 함께 내보내기 타임스탬프를 기록하므로, 진단 결과가 단순히 '항상 최신'으로 제시되는 것이 아니라 '스키마 마지막 스크립트: 11일 전' 옆에 표시될 수 있습니다.
- 수동으로 스키마를 재내보낼 경우 새로운 해시와 새로운 진단 실행이 강제됩니다. 이는 사이드 아티팩트(side artifact)가 아닌 코드 변경과 정확히 동일하게 취급됩니다.
- AI가 실시간 사실(live fact)—행 개수, 실제 값, 현재 인덱스 사용 여부—를 확인할 필요가 있을 때, 개발자가 수동으로 실행할 읽기 전용 쿼리(read-only query)를 작성합니다. 그 결과는 우리 캐시로 돌아오는 것이 아니라 사람에게 전달되어, 상황이 중요하더라도 실시간 데이터 경계(live-data boundary)를 유지합니다.
- 대규모 모노레포(monorepo)의 경우 전체 레포지토리 수준에서 해싱을 의도적으로 수행하지 않습니다. 핵심은 실제로 관련되는 파일과 스키마 객체에 국한되며, 따라서 코드베이스의 다른 곳에서 발생한 무관한 커밋이 아무것도 새롭지 않은 재진단을 강제하거나—그리고 더 중요하게는—관련된 변경 사항이 레포지토리 전체의 노이즈 속에 묻히는 것을 방지합니다.
이 모든 것이 스키마 내보내기를 자동화하는 것은 아닙니다. 그렇게 할 수 없다면, 우리는 실시간 연결(live connection)을 구축하지 않을 것입니다. 이것이 하는 일은 '진단이 틀렸다'를 '진단이 틀렸고, 어떤 입력값이 오래되었으며 언제 마지막으로 업데이트되었는지 정확히 여기 있다'로 바꾸는 것입니다. 이는 감사할 수 있는 시스템과 믿음에 의존해야만 하는 시스템의 차이입니다. 런던, 베를린, 암스테르담 또는 더블린에 위치하여 시니어 엔지니어 그룹 없이 프로덕션 지원을 수행하는 팀에게 그 감사 추적(audit trail)은 주니어 개발자가 출력물을 신뢰하고 행동할 수 있게 하고, 관리자가 나중에 손짓으로 설명하지 않고도 결정을 설명할 수 있게 해주는 요소입니다.
corp.dirayahai.com에서 카드 없이 14일 무료 체험을 시작하여 레포지토리를 연결하고 스키마를 한 번 스크립트한 다음, 캐시가 무엇을 알고 있고 언제 마지막으로 확인했는지 정확히 확인해 보세요.
Corporate AI 365 — 레포지토리를 연결하고 실제 문제를 하나 보고, 그 답이 올바른 라인을 가리키는지로 판단하세요. 무료 체험 시작하기 →