항공기 주변 조업(수하물·급유·토잉)은 사고가 나면 치명적이지만, CCTV를 사람이 계속 지켜볼 수는 없습니다.
A-VLAN은 조업 영상을 넣으면 "이 목표(안전 점검 항목)가 충족됐는가"를 스스로 판단할 때까지 스킬을 조합·실행·재조정하는 목표 주도(goal-driven) 영상 분석 에이전트입니다.
이 글의 딥다이브는 세 가지입니다. ① 분석 능력을 스킬 카탈로그로 조합하는 구조, ② 루프가 "끝났다"를 판단하는 이중 종료 설계, ③ 압축 영상에서 실제 시각을 복원하는 앵커링 트러블슈팅.
문제: 영상 분석은 “한 번의 추론”이 아니다
조업 안전 분석 요구는 다양합니다 — “작업자가 안전 구역을 침범했는가”, “브릿지 접현 단계별로 규정 절차를 지켰는가”, “이 시간대 위험 이벤트를 브리핑해달라”.
단일 모델 호출로는 이 스펙트럼을 못 다룹니다.
객체 탐지, 행동 분석, 거리·구역 규칙 판정, 법령 근거 조회, 보고서 생성이 요구별로 다르게 조합되어야 합니다.
초기 버전(전신, ‘25년 기업혁신대상 대한상공회의소 회장상 수상)은 고정 파이프라인이었습니다.
A-VLAN 재구축의 핵심 질문은 이것이었습니다 — 분석 능력을 어떻게 조합 가능한 단위로 쪼개고, 조합을 누가 결정하게 할 것인가.
딥다이브 ① 조합형 스킬 카탈로그 — 능력을 데이터로 만들기
분석 능력을 SkillDescriptor로 선언화했습니다.
각 스킬은 자신이 무엇을 하는지(탐지·행동분석·준수판정·브리핑·브릿지 접현 분석 등), 어떤 입력을 요구하고 어떤 산출을 내는지를 기술하는 메타데이터를 가지며, 하나의 스킬이 N개의 실행 단계로 전개될 수 있습니다(1:N).
스킬 실행은 SkillPipelineExecutor가 담당하고, 탐지 결과는 파이프라인에 인라인으로 흐르며, 단계별로 적합한 모델을 역할 라우터가 배정합니다.
카탈로그를 데이터로 만들자 두 가지가 따라왔습니다.
첫째, planned 실행과 pipeline 실행의 tool 카탈로그를 분리하고 그래프 무결성(drift) 검사를 넣어, 계획에 없는 도구가 실행되는 사고를 구조적으로 막았습니다.
둘째, 사용자 커스텀 스킬이 가능해졌습니다 — 유효 카탈로그는 전역 스킬과 사용자 스킬의 합집합으로 계산되고, 실행 결과가 적재되어 스킬 선택 힌트로 학습되며, 반복 패턴에서 검증을 통과한 스킬 초안을 시스템이 자동 제안하고 사용자가 승인합니다.
사용자 정의 파일이 로드되는 만큼 경로 traversal 하드닝도 함께 넣었습니다.
딥다이브 ② GoalOrchestrator — 루프의 이중 종료
목표가 들어오면 GoalOrchestrator가 관제 루프를 돕니다: select(카탈로그에서 목표에 맞는 스킬 조합 선택) → compose(실행 순서로 조립) → evaluate(산출이 목표를 커버하는지 평가) → refine(부족한 부분에 대한 조정을 만들어 다음 반복에 반영).
루프 설계에서 가장 중요한 결정은 종료 조건입니다.
생성형 루프는 “조금만 더 하면 나아질 것 같은” 상태가 계속되기 때문입니다.
A-VLAN은 이중 종료를 씁니다 — 평가 단계의 커버리지 기반 만족 판정이 나거나, max_iterations 도달이면 멈춥니다.
만족 판정은 열려 있는 목표를 끝까지 쫓게 하고, 반복 상한은 비용과 지연의 최악 케이스를 보장합니다. refine이 만들 수 있는 조정도 허용 목록으로 제한해(허용된 조정 유형 검사) 루프가 임의 방향으로 발산하지 않게 했습니다.
평가를 조정하는 손잡이는 3개로 정리했습니다 — 객관 지표(탐지 근거 수치 기반 판정), 단일화(중복 산출 통합), 세분화(per-person 행동 분석 등 granularity 조정).
안전 이벤트 판정 자체도 규칙화되어 있습니다: 실제 프레임 해상도 기준 거리 정규화, 시간 구간(interval) 룰, 경계선 통과(line-cross) 룰이 safety_events로 흐릅니다.
판정에 법령 근거가 필요하면 항공법령 코퍼스에 대한 듀얼 RAG(정확 문자열 매칭 + 벡터 검색)로 조문을 붙입니다 — 법령 인용은 유사도만으로는 위험하고, 조문 번호 같은 식별자는 정확 매칭이 더 신뢰할 수 있기 때문입니다.
딥다이브 ③ 벽시계 시각↔프레임 앵커링 — “10시 59분에 무슨 일이 있었나”
운영자의 질문은 프레임 번호가 아니라 시각으로 옵니다 — “10시 59분경 상황을 보여달라”.
그런데 분석 대상 영상은 저장 효율을 위해 50배 압축(타임랩스)된 CCTV 영상입니다.
영상 재생 위치와 실제 벽시계 시각 사이의 매핑이 없으면, 시각 기반 질의도, 리포트의 “언제” 표기도 불가능합니다.
해결의 열쇠는 영상 파일명이었습니다.
CCTV 영상 파일명에는 촬영 시작 시각과 압축 배율이 인코딩되어 있습니다(예: 20250716_105946_x50 — 2025-07-16 10:59:46 시작, 50배속).
여기에 영상의 fps를 결합하면 벽시계 시각 → 원본 경과 시간 → 압축 영상의 프레임 인덱스로 내려가는 결정적 매핑이 됩니다.
시간 질의가 오면 해당 시각을 앵커 프레임으로 변환하고, 구간이 지정되지 않으면 앵커 전후 일정 프레임 수로 분석 span을 잡습니다.
리포트 표기도 함께 풀었습니다 — 추출 시점을 “<영상명>의 HH시MM분SS초”(실제 시각)와 압축 영상 재생 위치(mm:ss) 양쪽으로 병기해, 운영자는 실제 시각으로 이해하고 검증자는 영상에서 바로 그 지점을 찾아갈 수 있습니다.
VLM scene agent는 앵커 프레임 스틸과 탐지 요약을 받아 세션 브리프를 만들어, 이후 모든 스킬 실행이 같은 상황 인식 위에서 돌게 합니다.
구조 — 1주의 전면 재구성
기능 개발 도중 백엔드를 Clean/Hexagonal 계층으로 전면 재구성했습니다.
도메인(스킬·오케스트레이션·이벤트 규칙)이 어댑터(VLM 클라이언트, 탐지 모델, 저장소, API)에 의존하지 않게 분리했고, 재구성의 안전망으로 plan-shape identity 오라클 테스트를 먼저 깔았습니다 — 리팩토링 전후에 같은 목표가 같은 형태의 실행 계획을 만드는지 검증하는 테스트입니다.
구조를 바꾸는 작업일수록 “동작이 변하지 않았다”를 기계로 증명할 장치를 먼저 세우는 것이 순서라는 원칙을 지켰습니다.
배포는 오프라인 환경을 고려해 wheelhouse 기반 Docker 빌드로 구성했습니다.
수상과의 관계
‘AI 항공조업 안전기술’은 **기업혁신대상 대한상공회의소 회장상(‘25)**을 수상했습니다.
수상작은 A-VLAN의 전신 버전이며 본인이 개발했습니다.
A-VLAN은 그 검증된 문제 의식을 조합형 스킬·목표 주도 루프·시각 앵커링 구조로 재설계한 후속 버전입니다.
정리
A-VLAN에서 다룬 문제는 “영상에서 무엇을 탐지하는가”보다 한 층 위에 있습니다 — 분석 능력을 조합 가능한 단위로 만들고, 조합의 결정과 종료를 시스템이 책임지게 하는 것.
스킬 카탈로그는 능력을 데이터로 만들었고, GoalOrchestrator의 이중 종료는 자율 루프에 예측 가능한 상한을 줬으며, 파일명 기반 시각 앵커링은 압축 영상 분석 결과를 운영자의 언어(실제 시각)로 되돌렸습니다.
짧은 기간에 아키텍처 재구성과 기능 확장을 병행하며, 오라클 테스트를 먼저 세우는 리팩토링 규율을 검증한 프로젝트이기도 합니다.