12.2.4. 오라클 시스템 백엔드 3대 컴포넌트 아키텍처: 쿼리 실행기, 결과 정규화기, 비교 판별기

12.2.4. 오라클 시스템 백엔드 3대 컴포넌트 아키텍처: 쿼리 실행기, 결과 정규화기, 비교 판별기

수만 건의 SQL 프롬프트 및 테이블 스키마 텍스트가 융단 폭격처럼 쏟아지는 거대한 엔터프라이즈 MLOps 오라클 평가 아키텍처를 프로덕션 레벨에서 단 한 건의 무결점 오류 없이 구동하기 위해서는, 단순히 파이썬 스크립트 하나를 짜는 1차원적인 접근을 버려야 한다.
AI가 생성한 확률론적인 텍스트(예측 SQL)와 인간이 작성한 결정론적인 정답지(Golden SQL)를 동시에 데이터베이스 네트워크 위에서 컴파일(Compile)하고 실행시켜 비교(Execution-based Oracle)하기 위해서는, 시스템 백엔드 내부에 **각각 강력하고 독립된 단일 책임(Single Responsibility)을 지니며 비동기적(Asynchronous)으로 맞물려 동작하는 3개의 특수 마이크로 컴포넌트 객체 집합(Micro-Component Classes)**이 물리적으로 견고하게 설계되고 구현되어야만 한다.

1. 쿼리 실행기 (Query Executor: The Driver)

첫 번째 관문인 이 오라클 컴포넌트의 유일하고도 가장 무거운 책임은, 네트워크 드라이버(Driver) 커넥션을 열어 샌드박스 내부의 타이밍 DB 클러스터로 무자비하게 포탄(SQL Query 문자열)을 쏘아 보내고, 연산이 끝나 터져 나오는 거대한 결과의 파편(Record Tensor / Row Set)들을 메모리 공간으로 안전하게 건져 올리는(Fetch) 것이다.

하지만 무턱대고 쿼리를 실행시켜서는 시스템이 전멸한다. 이 실행기 클래스 엔진을 설계할 때 가장 심혈을 기울여 반드시 구현해야 하는 핵심 엔지니어링 쉴드(Shield)는 바로 **‘하드 타임아웃 킬러(Hard Timeout Killer)’**와 ‘비동기 스레드 격리(Async Thread Isolation)’ 메커니즘이다.

  • [카테시안 폭탄 방어]: 확률론적 언어 모델인 LLM이 환각 상태에 빠져 JOIN 조건(ON)을 빼먹고 수억 건의 다중 테이블 데이터가 무한 교차 증식되는 최악의 비효율 ‘카테시안 곱(Cartesian Product)’ 악성 쿼리를 멍청하게 생성해 냈다고 가정해 보자. 이 텍스트를 그대로 실행기에 밀어 넣는 순간, 무한 루프 수준의 풀 스캔 연산으로 인해 샌드박스 DB 컨테이너의 CPU 코어와 메모리 할당량이 순식간에 100%로 치솟아 오라클 스케줄링 서버 전체가 자원 고갈(OOM, Out Of Memory)로 타버리고 뻗어버릴 수 있다.
  • [처형 권한 (Execution Rights)]: 따라서 쿼리 실행기 컴포넌트는 오라클 쿼리를 백엔드 세션에 주입함과 동시에 독립된 감시 스레드 타이머(Watchdog Timer)를 작동시켜야 한다. 그리고 쿼리 수행 시간이 미리 설정된 임계값(예: 3.0초 또는 5.0초)을 단 1ms라도 초과하는 순간, 가차 없이 해당 DB PID 프로세스를 포착하여 SIGKILL / Statement Timeout 강제 인터럽트로 목을 날려버리고 네트워크 커넥션을 끊어버리는 폭군과 같은 권한을 가져야 한다. 그리고 해당 예측 쿼리는 즉각 모델의 패배인 [TIMEOUT_ERROR : EX=0 (False)] 상태로 로그를 남기고 다음 채점 큐(Queue)로 넘어가 오라클의 엔진이 절대 멈추지 않도록 무사히 강제 종결시켜야 한다.

2. 텐서 평탄화 및 결과 정규화기 (Result Normalizer: The Artisan)

데이터베이스가 강제 셧다운을 피하고 무사히 스토리지에서 인출해 준 두 개의 거친 원시 결과 텐서 덩어리(Raw Result Sets)들을 거울처럼 똑같이 비교하기 쉬운 부품(Normalized Object)으로 이리저리 다듬고, 깎고, 평탄화하는 세밀한 장인(Artisan) 역할을 수행하는 전처리 엔진 컴포넌트다.
정답 평가용 쿼리 텐서(Ground Truth)와 AI 예측 쿼리 텐서(Prediction)를 각각 넘겨받은 뒤, 이 판별 전(Pre-computation) 단계에서는 필연적으로 발생하는 시스템적 부수물(Side-effects)의 차이를 무시하기 위해 다음과 같은 피도 눈물도 없는 강제 차원 축소 및 정규화(Normalization) 파이프라인을 100% 동시에 수행한다.

  • [문자열의 무자비한 깎기 (Aggressive String Trimming & Lowercasing)]: DB나 네트워크 드라이버 버전에 따라 우발적으로 반환된 모든 텍스트 값에 대해 좌우 공백 스페이스(trim())를 모조리 제거하고 싹 쓸어버린다. 또한 “Seoul“과 “seoul” 같은 단순한 대소문자 스키마 구분에 따른 억울한 False Negative(위음성) 채점 실패를 막기 위해, 메타데이터 규칙에 따라 모든 문자열을 가장 저수준의 소문자(Lowercase)로 획일화하여 치환(Casting)한다.
  • [허무주의적 가비지 통일화 (Null / None / Empty Unification)]: 데이터베이스의 종류(PostgreSQL, MySQL, SQLite)와 ORM 커넥터 클라이언트(psycopg2, JDBC 등)에 따라 테이블의 빈칸 데이터를 표현하는 방식은 NULL, NaN(Not a Number), None, 비어있는 문자열("") 등으로 중구난방 튀어나온다. 정규화기는 이들을 마주칠 때마다 주저 없이 언어 레벨 최하단의 원시 [Null / None] 싱글톤 객체 하나로 모두 무자비하게 강제 매핑 및 통일화시켜 비교의 이질성을 원천 소거한다.
  • [비결정적 정렬의 하드코딩 (Deterministic Hash Sorting)]: 가장 치명적인 문제다. SQL 쿼리에 ORDER BY 절이 부재할 경우, 데이터베이스 엔진은 CPU 상태와 디스크 블록 위치에 따라 동일한 쿼리라도 행(Row)들의 반환 순서(Sequence)를 무작위로 흩뿌려 반환한다. 정규화기는 이 무작위 배열을 그대로 두고 비교하지 않는다. 각 행(Row)이 지닌 데이터 문자열 전체를 암호학적 해시(SHA-256) 배열표로 변환해 내거나 메모리 튜플(Tuple) 기준으로 삼아, 프로그램 레벨에서 강제 내림차순 정렬(Forced Sorting)시켜버린다. 이를 통해 두 텐서 행렬의 위치 차원 벡터가 정확히 1:1 인덱스로 물리적으로 대응될 수 있는 완벽한 환원적 확정 포맷(Deterministic Formation) 아키텍처를 구축한다.

3. 결정론적 비교 판별기 (Deterministic Comparator: The Supreme Judge)

결과 정규화기(Normalizer)의 가혹한 파이프라인 손을 거쳐 잡티 하나 없이 거울처럼 깨끗하고 반듯해진 두 개의 대형 텐서 어레이(Array)를 최종 매개변수로 넘겨받아 사형 선고를 내리는, 이 오라클 파이프라인의 종착역이자 최종 채점 대법관(Supreme Judge) 컴포넌트다.

판별기 컴포넌트는 넘겨받은 두 행렬 데이터프레임(Dataframes)을 파이썬(Python) 객체 로직으로써 완벽히 동등한 차원 내에서 완전 비교(Array_A == Array_B)한다.
만약 정렬된 스키마 안에서 단 1개의 컬럼 셀(Cell) 값이라도 오차가 발생하거나 다를 경우, 위대한 판별기 루틴은 그저 바보같이 [EX=0 (False: 불일치)] 이라는 불리언(Boolean) 숫자 출력 하나만 달랑 내뱉고 게으르게 프로세스를 종료하지 않는다.
완벽하게 설계된 판별기는 즉시 메모리 위에서 거대한 다차원 집합 연산기(Set Operations)를 가동하여, 두 텐서 간의 **‘차집합(Set Difference)과 대칭 차집합(Symmetric Difference)’**을 정밀하게 연산하고 쪼개어(Diffing) 분석해 낸다.

“정답 텐서(Ground Truth)의 집합에는 반드시 [Alice, Bob] 두 명의 아이디가 레코드로 존재해야 정상인데, AI가 예측한 WHERE 문 텐서를 스캔해보니 엉뚱하게도 [Alice, Charlie]가 들어있음을 감지함.”

[최종 디버깅 리포트 판결문]:
“따라서 해당 AI 모델의 SQL 로직 생성 결함 원인은 단순한 문법 오류가 아님. AI는 필터링 로직을 잘못 추론하여 도출되었어야 할 [누락 요소 (Missing/False Negative Elements)]: [Bob]을 잃어버렸으며, 동시에 DB에 존재해선 안 될 [조작된 환각 요소 (Fabricated/False Positive Elements)]: [Charlie]를 잘못 긁어오는 치명적인 논리 결함을 범하였음.”

이처럼 AI가 ’도대체 코드의 무엇을 틀렸는지’를 멍청한 단순 소스코드 문자열(BLEU) 비교가 아니라 결론적인 ‘데이터 차원의 집합적 결함 분석(Data-centric Set Flaws)’ 기반으로 가장 정확하게 짚어내는, 무섭도록 구체적인 ‘오류 역추적 디버깅 리포트(Telemetry Debugging Report JSON)’ 메타데이터를 즉석 동적으로 완벽하게 조립해 낸다.
그리고 최종 벤치마크 평가 보고서 S3 스토리지 시스템에 이 수만 건의 채점표를 영구 보존하여, MLOps 파인튜닝 지표(Loss) 강화와 다음 프롬프트 스프린트 사이클 진화를 폭발시키기 위한 가장 순도 높고 고도화된 정답 피드백 연료(Reward Signal)로 주입하는 막중한 역할을 차갑게 완수하며 컴포넌트의 생명주기(Lifecycle) 사이클을 종료한다.