Delivery · Operations
고객 환경으로의 이식, 배포, 운영
Posts 8
업로드마다 LLM을 부르는 빌드는 자동으로 켜 둘 수 없었습니다
온톨로지가 문서를 올릴 때마다 만들어지려면 기본 빌드에는 호출 비용이 없어야 했습니다. 표 구조와 형태소, 한국어 패턴만으로 클래스·개체·상하위를 세우고 관계 추출은 옵션 단계로 분리한 과정과, 그 뒤 드러난 문서 500개 상한 결함을 정리합니다.
에이전트마다 빌드하면 같은 문서를 에이전트 수만큼 다시 읽어야 했습니다
은행 관리 설정에서 늘어나는 에이전트를 온톨로지로 보여 주려 했습니다. 문서 지식은 자산마다 한 번만 빌드하고, 에이전트의 소유·자산·배포·실행 관계는 설정 테이블에서 LLM 없이 구성해 규칙 인사이트까지 낸 과정입니다.
98 대 86으로 진 평가는 같은 조건의 비교가 아니었습니다
경쟁 클라우드 에이전트와 캐피탈 사내 규정 165문항으로 다시 비교하기 전에 문서 적재, 청크, 근거 개수, 평가기 시간을 하나씩 맞췄습니다. 같은 답변 모델과 같은 채점 모델로 한 번 실행한 결과는 80.0% 대 66.7%였습니다.
그래프 서버가 없는 곳에서 빌드는 트리플 0개로 완료되고 있었습니다
폐쇄망 고객에게 별도 그래프 서버는 반입 심사와 승인, 운영 인력이 따로 드는 구성 요소였습니다. 지식그래프의 정본을 이미 있는 PostgreSQL 테이블 세 개로 옮기고, 같은 빌드 결과를 두 저장소에 이중 기록해 대조한 과정입니다.
규칙을 고친 뒤에도 남은 판정 흔들림은 공유 추론 서버에서 왔습니다
대형 유통 품질검사 에이전트가 같은 서류에 합격과 불합격을 번갈아 냈습니다. 판정 규칙, 이미지 판독, 프롬프트, 부하를 하나씩 제외하고 같은 텍스트를 10번 넣는 실험으로 공유 서버의 배치 처리까지 좁힌 과정입니다.
그래프를 정리하다가 정상 클래스 1,500개를 지웠습니다
인스턴스와 관계가 부족한 클래스를 자동 삭제했더니 정상 클래스 약 1,500개가 함께 사라졌습니다. 추출이 아직 만들지 못한 관계를 후처리가 불필요로 판정한 것입니다. 탐지와 삭제를 나눈 과정입니다.
몇 시간짜리 빌드를 캐시에 올려두고 있었습니다
빌드가 몇 시간으로 늘자 작업 상태를 공유 캐시에 복제했습니다. 캐시가 만료되면 취소와 재개 정보를 복원할 수 없었습니다. 실행 상태와 지식 결과를 서로 다른 저장소로 나눈 과정입니다.
설치는 됐는데 같은 실행이라고 부를 수 없었습니다
워크플로우를 wheel로 묶어 다른 환경에 설치했습니다. 도구를 호출하자 제품 안에서만 성립하던 전제가 드러났습니다. 포장 형식을 두 번 갈아엎으며 무엇을 고정해야 실행이 옮겨가는지 확인한 과정입니다.
Engineering 19
nginx 기본 502 페이지가 가리킨 곳: 응답에 실린 신원 헤더와 클라이언트 헤더 위조 경로
원격 조회가 불가능한 폐쇄망의 문서 다운로드 502를 응답 본문 형태로 가설을 하나씩 배제해, 게이트웨이가 서비스용 신원 헤더를 브라우저 응답에도 실어 앞단 nginx의 헤더 버퍼를 넘기는 구조로 좁혔습니다. 조사 중 클라이언트가 보낸 신원 헤더가 서비스까지 전달되던 위조 경로를 찾아, 이미 검증된 보안 수정을 이식해 막았습니다.
공정 비교는 평가 파이프라인을 의심하는 데서 시작했습니다: 대조군 오염, 평가기 루프 차단, 회수 지표 결함
사내 규정 165문항으로 경쟁 클라우드 에이전트와 비교하기 전에 평가 파이프라인 자체를 검증했습니다. 적재 결함, 오염된 대조군, 상대 설정 오인, 응답 시간을 부풀리던 평가기, 회수를 과소 집계하던 지표를 차례로 찾아 고친 뒤 같은 조건에서 80.0% 대 66.7%를 측정했습니다.
온톨로지 엔진의 이식성: 커밋 258개 격차를 파일 단위로 맞추고 출력 동일성으로 라이브러리를 검증하기
같은 온톨로지 기능을 고객 배포 라인과 다른 서비스에 반복해서 싣는 비용을 줄이려고, 고객 라인을 파일 단위와 3-way 병합으로 제품 라인에 맞추고 빌드 로직을 환경 의존 없는 라이브러리로 옮겼습니다. 동일성은 실코퍼스 14,924청크의 출력 대조로 증명했고, 남은 연동 코드 약 12,000줄은 호스트가 네 가지 포트만 구현하면 되는 어댑터 계층으로 분리하자고 제안했습니다.
재색인을 요청-응답에서 백그라운드 작업으로: 30초 타임아웃 뒤에 있던 UI와 백엔드의 계약 불일치
요청 하나 안에서 전 청크 재임베딩까지 끝내던 재색인 API가 클라이언트 30초 타임아웃에 걸려 실패처럼 보이고 중복 실행되던 문제를, 202 응답과 상태 조회, Redis 사본과 SET NX로 다중 파드에서도 컬렉션당 한 작업만 도는 구조로 바꿨습니다. 두 파드 시나리오 테스트가 상태 조회 순서 결함을 잡아냈습니다.
루프백 웹소켓이 열리지 않던 이유: 영업점 단말 화면 호출과 크롬 Local Network Access 실측
에이전트 답변과 현황판에서 영업점 단말 업무 화면을 여는 루프백 웹소켓 연동을 방향별로 판정해 구현했습니다. 시연 PC에서 연결이 1ms 만에 실패하던 원인을 크롬 Local Network Access로 확정해 정책으로 풀었고, 그 뒤 드러난 채팅 코드펜스 파서 결함까지 고쳤습니다.
은행 관리 콘솔 에이전트 온톨로지: 운영 테이블에서 LLM 없이 구성하고 분포로 판정하기
관리자가 300여 개 에이전트와 컬렉션·DB·도구의 관계를 탐색하고 질문할 수 있도록, 문서를 다시 추출하지 않고 운영 테이블에서 에이전트 그래프를 결정론적으로 구성했습니다. 상태 서명 기반 증분, 분포 기반 인사이트 규칙, 그래프 근거 질의, 서버 측 그래프 요약까지 설계 판단과 실측을 정리합니다.
FAQ 검색 순위 수리: 전제가 맞지 않던 그래프 융합을 끄고 빠져 있던 BM25F 어휘 점수 되돌리기
고객센터 FAQ 165문항에서 정답 문서가 후보에는 있는데 상위 3개 밖으로 밀리던 원인을 단계별 순위 측정으로 추적했습니다. 노드 단위가 맞지 않던 그래프 융합을 끄고, 어댑터에서 빠져 있던 BM25F 어휘 점수를 라이브러리 설계대로 복원해 정답 문서 1위 비율을 66.1%에서 96.4%로 올렸습니다.
증분 빌드라 불렀지만 비용은 전량이었습니다: 청크 기준선, 조회 상한 500, 이름 색인으로 끊은 비례
문서를 추가할 때마다 온톨로지 빌드가 전체를 다시 처리하거나, 새 문서가 없는데도 같은 빌드를 반복하고 있었습니다. 빌드된 청크 집합을 PostgreSQL 기준선으로 두고 SDK 기본 조회 상한 500 때문에 문서 57.8%가 그래프에서 빠지던 결함을 고친 뒤, 대상 조회·후처리·감분 단계마다 비용이 전체가 아니라 변경분에 비례하도록 바꿨습니다.
설정에 없는 규칙이 마스킹을 계속할 때: 정규식 경계, 성공으로 기록된 쓰기 실패, findall 그룹 튜플
날짜·금액이 마스킹되고 지운 정책이 계속 적용되던 현상을 경계 없는 정규식 템플릿, 쓰기 실패를 성공으로 기록하던 컨트롤러, 재승인 때 사라지는 예외, 그룹 정규식에서 튜플을 반환하는 findall로 나눠 고쳤습니다. 쌍둥이 정책은 복합 FK로 막는 테이블 통합안으로 정리했습니다.
취약점 점검 대응: 배포 기준 라이브러리 인벤토리와 vLLM 0.20.1 → 0.27.1 무수정 업그레이드 판단
레포를 그냥 읽으면 틀리는 세 가지 함정을 피해 8개 서비스의 직접·전이 의존성을 배포 기준으로 수집하는 생성기를 만들고, 은행의 CVSS 기준표와 대조해 vLLM 취약을 확정했습니다. 어댑터 결합도와 런타임 위험을 좁혀 무수정 업그레이드를 권고했고, 배포 후 재생성한 목록으로 변경분을 제출했습니다.
Fuseki 없이 지식 그래프 운영하기: PostgreSQL 테이블 3개로 옮기며 드러난 숨은 결합들
별도 JVM 트리플스토어인 Fuseki는 설정 하나가 어긋나면 그래프 계층 전체가 멈추고 폐쇄망 반입 부담도 컸습니다. 같은 빌드를 두 저장소에 이중 기록해 충실도를 대조한 뒤 Fuseki 쓰기를 기본 비활성화했고, 완료 판정·재시도·카운트·품질 지표에 숨어 있던 Fuseki 전제를 하나씩 걷어내며 검색을 라이브러리로 일원화했습니다.
xgen-seepage: 인터넷 없이 설치되는 Excel 에이전트 커넥터와 Office.js를 걷어낸 이유
XGEN 에이전트가 사용자가 열어 둔 Excel 통합문서를 직접 읽고 편집하게 하는 독립 커넥터입니다. Office 애드인 대신 COM 직결과 단일 실행 파일 배포를 택해 폐쇄망 설치를 가능하게 했고, 실제 서버와 실제 Excel에서 검증하며 압축 협상 충돌, 실행 파일의 번들 누락, Office.js 대기 멈춤을 차례로 해결했습니다.
'이전 대화가 쌓였습니다'의 오지목: 토큰 예산 계층을 고쳤더니 공유 GPU가 느려진 이유와 원복
'이전 대화가 쌓였다'는 안내만 반복하던 에이전트를 토큰 버킷 로그로 추적해 문구의 오지목, 줄일 수 없던 시스템 프롬프트·도구 스키마, 오히려 텍스트를 늘리던 truncate를 고쳤습니다. 그 수정이 잠들어 있던 압축 경로를 깨워 공유 GPU 지연을 만든 메커니즘을 확인해 원복했고, 재현으로 근본 압력이 검색 결과 크기에 있음을 확인했습니다.
sam2-mcp: 30초 호출 한도에 맞춘 비전 MCP 서버와 이미지형 PDF 실패 추적
GPU 없는 머신에서 SAM 2 세그멘테이션과 비전 OCR을 에이전트 도구로 제공하는 FastMCP 서버입니다. 호출당 30초 한도와 세션당 단일 호출이라는 플랫폼 제약을 실측으로 확인해 병렬 처리를 서버 안으로 옮겼고, 이미지형 PDF에 몰린 심의 실패를 서로 독립된 결함들로 분해해 고쳤습니다.
완료로 기록된 빈 그래프: 구조 복원, 부분 커밋, 출력 예산 기반 배치 사이징
빌드는 완료로 표시되는데 그래프가 비어 있거나 구조가 무너진 문제를 석 달에 걸쳐 추적했습니다. 리팩토링이 지운 중복 제거·상속 로직을 복원하고, 오진을 세 번 정정하며 예외를 삼키던 배치 처리와 all-or-nothing 저장을 찾아냈고, 배치 크기를 모델 출력 한도에서 산출해 절단 시 반분 재시도하게 바꿨습니다.
품질검사 판정을 결정론적으로: LLM에는 파일 하나의 판단만, 나머지는 코드와 다수결로
재실행마다 파일 판정이 11~58% 바뀌던 품질검사 파이프라인을 파일별 단일 판정, 결정형 규칙, 코드 집계로 다시 짰습니다. 규칙 시험에서 판정 변동 0/23을 얻었고, 실파일에서 남은 흔들림은 같은 텍스트 10회 실험으로 공유 추론 서버까지 좁힌 뒤 N회 다수결로 종합 판정을 안정시켰습니다.
빌드 진행률은 어디서 읽어야 하는가: 그래프 역산을 걷어내고 PostgreSQL 카운터를 정본으로
진행률을 RDF 그래프 역질의로 복원하던 구조 때문에 74초 걸리는 진행률 API, 좀비 잡, 빌드 중 전체 API 무응답이 겹쳤습니다. 정본을 PostgreSQL로 옮겼다가 되돌리고 다시 옮긴 경위와, 진행 상태와 빌드 결과를 분리한 네 가지 원칙, 이벤트 루프 오프로드의 실측을 정리합니다.
전용 QA 노드를 범용 하네스 노드로 옮기며: 캡슐이 숨기던 기능과 엔진이 읽지 않던 채널
품질검사 전용 캡슐 노드가 암묵적으로 처리하던 이미지 입력, 서브툴 바인딩, 세션 전달, RAG 전달을 범용 하네스 노드로 옮기며 드러난 결함 15종을 고객사 개발 환경에서 실측하며 고쳤습니다. 그중 두 번은 수정값을 엔진이 읽지 않는 채널에 쓰고 있었고, 엔진 소스로 설정 해석을 재현해 살아 있는 채널로 다시 연결했습니다.
컴파일된 에이전트가 밖에서도 동작하는가: 빈 도구 정의, 빠진 패키지 초기화 파일, 0자로 잘린 RAG
캔버스에서 만든 에이전트를 wheel·npm·MCP 도구로 내보내 환경변수만으로 실행되게 하면서, 빌드와 설치는 성공하는데 실제로는 동작하지 않던 세 경로를 추적했습니다. 비어 있던 도구 정의는 서브파이프라인 동결로, PyPI 네 버전의 import 실패는 fresh-clone 빌드 검증으로, 한 번도 동작하지 않던 standalone RAG는 기본값 세 곳을 고쳐 바로잡았습니다.