상태 공간의 크기
서비스와 등급과 접점이 곱해집니다. 한 사람이 균일하게 담아 두기 어려운 크기의 표가 만들어지고, 그 표는 닫히는 시간 없이 열려 있어야 합니다.
이 문서는 Context Hub의 구조와 설계 원리를 기술합니다. 제안서가 이 시스템이 무엇을 왜 하는지를 다루었다면, 이 문서는 그 일이 어떤 계층을 거쳐 어떤 판단 규칙 아래 이루어지는지를 다룹니다. 성능을 주장하는 대신 설계 결정과 그 근거를 적었고, 아직 측정되지 않은 것은 무엇을 어떤 방법으로 측정할지로 남겨 두었습니다.
Context Hub는 FlowOS가 설계하고 개발한 멀티 에이전트 컨텍스트 플랫폼입니다. 고객 접점에서 발생하는 비정형 입력 — 음성, 영상, 이미지, 텍스트, 웹 — 을 수집해 출처와 유효 구간을 가진 구조화된 사실로 변환하고, 고객 단위로 격리해 축적하며, 이후의 모든 접점에 실시간으로 되돌려 제공하는 시스템입니다.
형식을 가리지 않는 입력을 타입이 있는 사실로 변환합니다.
시간에 따른 변화를 표현하고, 어긋나는 사실을 판정합니다.
접점이 요청하는 시점에 필요한 사실만 조합해 반환합니다.
여정이 끝난 뒤의 관찰을 되돌려 다음의 기본값으로 만듭니다.
경계를 먼저 그어 두는 편이 정의를 정확하게 만듭니다.
시스템과 컨텍스트는 서로 다른 주체에 귀속됩니다. 이 구분은 운영 내내 유지됩니다.
FlowOS가 설계하고 구현해 보유한 자산입니다.
VONAER 운영에서 축적된 모든 것은 VONAER에 귀속됩니다.
Context Hub는 네 개의 계층으로 이루어집니다. 입력은 형식을 가리지 않고 들어오고, 처리 계층에서 형식이 하나로 맞추어지며, 기억 계층에 고객 단위로 쌓이고, 서빙 계층에서 접점마다 다시 꺼내집니다. 흐름은 여기서 끝나지 않습니다. 비행 이후에 남은 관찰은 회수 경로를 따라 입력 계층으로 되돌아가고, 그 되돌림이 다음 여정의 기본값을 바꿉니다.
좌우로 밀어 전체 구조를 확인하실 수 있습니다.
아홉 개의 장은 위 도표를 따라 배열되어 있습니다. 앞의 세 장은 문제와 전체 구조를, 가운데 네 장은 계층 하나하나의 내부를, 마지막 두 장은 이 설계가 어디에서 비롯되었고 무엇으로 확인될 수 있는지를 다룹니다.
이 문서는 아래 다섯 낱말을 처음부터 끝까지 같은 뜻으로 사용합니다. 이후의 모든 장은 여기에서 정한 정의를 전제로 쓰였습니다.
아래에서 정리하는 네 개의 축은 VONAER가 이미 공개한 서비스 구성과 운영 약속에서 그대로 따라 나오는 성질입니다. 운영의 완성도와는 무관하며, 사람을 더 두거나 절차를 다듬는 것으로 사라지지 않습니다. 각 축은 개별적으로도 알려진 난제이지만, 실제 응대에서는 네 축이 하나의 대화 안에서 동시에 성립합니다. 이 문서가 설명하는 모든 설계 결정은 여기서 정리한 제약을 근거로 삼습니다.
서비스와 등급과 접점이 곱해집니다. 한 사람이 균일하게 담아 두기 어려운 크기의 표가 만들어지고, 그 표는 닫히는 시간 없이 열려 있어야 합니다.
사실은 입력란이 아니라 통화의 여담, 사진 한 장, 메신저의 한 줄로 도착합니다. 형태가 정해지지 않았고, 도착한다는 보장도 없습니다.
어떤 사실은 유지되고, 어떤 사실은 확신이 줄고, 어떤 사실은 대체되며, 어떤 사실은 철에 따라 다시 유효해집니다.
맥락은 문의가 열리는 순간 안에서 함께 열려야 합니다. 하루 뒤에 정리되는 맥락은 그 응대에 존재하지 않는 것과 같습니다.
VONAER가 공개한 서비스 라인은 여덟 갈래입니다. 전용기 차터, The Collection의 기종 선정, 헬리콥터, 리무진, 슈퍼요트, 큐레이티드 익스피리언스, Empty Leg, 그리고 2027년의 eVTOL입니다. 회원 등급은 VON, VON Privé, VON Dominium 세 단계이고, 등급마다 응대의 기준선이 다릅니다. 여기에 하나의 여정이 지나는 접점을 열두 개로 잡으면 — 최초 문의부터 사후 기록까지 — 담당자가 어느 시각에든 정확히 처리할 수 있어야 하는 (서비스 × 등급 × 접점) 조합의 수는 다음과 같이 계산됩니다.
8
3
12
288
어느 시각에 열리든 같은 기준으로 답해져야 하는 (서비스 × 등급 × 접점) 상황의 수.
이 값이 정확히 288인지는 중요하지 않습니다. 접점을 어떻게 나누느냐에 따라 200이 되기도 하고 400이 되기도 합니다. 중요한 것은 자릿수입니다. 그리고 여기에 24시간 365일이라는 약속이 곱해집니다. 288개 상황이 교대 근무에 나누어 배분되는 것이 아니라, 어느 시각에 열리든 같은 기준으로 답해질 수 있어야 한다는 뜻입니다. 시각을 하나의 축으로 더 세면 288 × 24 = 6,912개의 (상황 × 시각) 칸이 됩니다. 이 역시 측정치가 아니라, 공개된 약속을 곧이곧대로 세었을 때 나오는 수입니다.
이 크기가 만드는 어려움은 각각의 칸이 어렵다는 데 있지 않습니다. 칸 하나하나는 숙련된 담당자에게 익숙한 일입니다. 어려움은 한 사람이 이 표 전체를 균일한 밀도로 담아 둘 수 없다는 데 있습니다. 통상적인 해법은 전문화입니다. 담당자를 서비스별로 나누고 각자 자기 열에서 깊어지게 하면, 개인이 감당할 상태 공간이 8분의 1로 줄어듭니다. 그런데 VON Privé가 약속하는 것은 단일 전담 컨시어지입니다. 고객 쪽에서 보면 창구는 하나여야 하고, 그 하나가 여덟 열 전체를 알고 있어야 합니다. 상태 공간을 사람 단위로 쪼개는 가장 자연스러운 완화책이 서비스 정의에 의해 닫혀 있습니다. 남는 방법은 표를 사람 바깥에 두는 것뿐입니다.
응대에서 얻어지는 사실의 대부분은 그 사실을 전달하려는 발화에서 나오지 않습니다. "이번엔 아이가 같이 갑니다"라는 한 문장은 캐빈 구성과 출발 시각, 기내식과 지상 이동 수배를 한꺼번에 바꿉니다. 그러나 이 문장은 요청이 아니라 근황으로 지나갑니다. 요청으로 발화된 것은 기록되지만, 근황으로 발화된 것은 담당자의 판단에 걸렸을 때만 남습니다. 형태도 제각각입니다. 통화 중의 여담, 메신저에 남은 한 줄 정정, 좌석 배치 사진, 일정표 문서의 각주. 같은 사실이 어느 경로로든 들어올 수 있고, 어느 경로로도 들어오지 않을 수 있습니다.
표는 좌우로 밀어 보실 수 있습니다.
| 입력 형태 | 전형적 원천 | 사실이 놓이는 자리 | 스키마 우선 입력이 놓치는 것 |
|---|---|---|---|
| 음성 | 상담 통화, 음성 메모 | 본론이 아닌 여담, 되묻는 말 | 말로만 오간 사실은 어떤 필드로도 남지 않습니다. |
| 이미지 | 좌석 배치, 메뉴, 서류 사진 | 화면 안의 배치와 표기 | 첨부로만 남고, 내용이 조회 대상이 되지 못합니다. |
| 채팅 조각 | 메신저, 이메일 회신 | 한 문장짜리 정정과 취소 | 최신 조각이 이전 값을 대체했는지 판단하지 않습니다. |
| 문서 | 일정표, 명단, 여정 확인서 | 표의 한 칸, 각주 | 사람이 옮겨 적어야 비로소 필드가 됩니다. |
필드를 먼저 정의하고 사람이 채우는 스키마 우선 방식이 이 축에서 실패하는 이유는 두 가지입니다. 첫째, 필드를 미리 알 수 없습니다. 어떤 사실이 다음 여정에서 의미를 가질지는 그 여정이 오기 전에 결정되지 않으며, 넓게 열어 둔 필드는 대부분 비어 있게 됩니다. 둘째, 그리고 이쪽이 결정적입니다. 묻는 행위 자체가 비용입니다. 요청하는 순간 이미 고객에게 부담이 됩니다. "It anticipates. It prepares. It delivers."를 약속한 서비스가 고객에게 양식을 내밀 수는 없습니다. 관계가 깊어질수록 물어볼 수 있는 것은 줄어들고, 알고 있어야 하는 것은 늘어납니다.
따라서 구조화의 부담은 전적으로 시스템 쪽에 있어야 합니다. 사실은 물어서 얻는 것이 아니라 이미 오간 것에서 추출되어야 하고, 입력의 형태가 넷이든 다섯이든 남는 사실의 형식은 하나여야 합니다. 이것이 이 문제의 두 번째 어려움입니다. 자동 추출은 반드시 오차를 냅니다. 사람이 채우는 필드보다 정확도가 낮은 구간이 존재하며, 그 구간을 어떻게 다룰지 — 무엇을 확정으로 올리고 무엇을 후보로 남길지 — 가 설계의 일부가 되어야 합니다. 오차가 없다고 가정하는 설계는 이 축을 해결한 것이 아니라 회피한 것입니다.
축적된 맥락을 다루는 시스템에서 가장 흔한 설계 오류는 사실을 시간이 없는 값으로 저장하는 것입니다. 실제 고객 사실은 시간에 대한 성질이 서로 다릅니다. 식이 제한은 갱신되지 않아도 유효합니다. 선호 출발 시간대는 3년이 지난 뒤에도 같은 확신으로 적용할 수 없습니다. 동반자 구성은 새 값이 들어오는 순간 이전 값이 틀린 값이 됩니다. 연말의 가족 여정은 특정 구간에서만 유효하고 다음 해에 다시 유효해집니다. 네 가지는 저장 방식도, 조회할 때 다루는 방식도 같을 수 없습니다.
표는 좌우로 밀어 보실 수 있습니다.
| 사실 유형 | 예 | 시간적 성질 | 오래된 값을 그대로 적용하면 |
|---|---|---|---|
| 안정 | 식이 제한, 기내 알레르기 | 갱신되지 않아도 유효합니다 | 문제 없습니다. 다만 만료시켜서는 안 됩니다. |
| 감쇠 | 선호 출발 시간대, 선호 좌석 | 시간이 지날수록 확신이 낮아집니다 | 근거가 옅어진 값이 기본값처럼 굳습니다. |
| 대체 | 동반자 구성, 연락 창구, 주소 | 새 값이 이전 값을 무효화합니다 | 지난 여정의 구성으로 이번 여정을 준비합니다. |
| 주기 | 연말 가족 여정, 계절 노선 | 특정 구간에서만 유효하고 반복됩니다 | 철이 아닌 때에 제안이 나갑니다. |
변화를 표현하지 못하는 기억은, 기억이 없는 것보다 나쁩니다. 기억이 없으면 시스템은 묻습니다. 묻는 것은 축 02에서 말한 대로 부담이지만, 적어도 틀리지는 않습니다. 반면 낡은 값을 가진 시스템은 묻지 않고 틀립니다. 그것도 확신을 가지고 틀립니다. 지난해의 동반자 구성으로 캐빈을 준비하고, 바뀐 식이 제한을 지나치고, 이미 정리된 관계에 맞춰 좌석을 배치합니다. 개인화의 실패는 개인화하지 않은 상태보다 눈에 훨씬 잘 띕니다. 고객은 시스템이 자신을 기억하고 있다는 신호를 받은 뒤에 그 기억이 틀렸다는 사실을 알게 되기 때문입니다.
그러므로 사실은 값 하나로 저장될 수 없습니다. 값과 함께 그 값이 어디에서 왔는지, 언제 관측되었는지, 언제까지 유효하다고 볼 것인지, 그리고 어떤 사실이 어떤 사실을 대체했는지가 함께 남아야 합니다. 대체는 덮어쓰기가 아닙니다. 이전 값을 지우면 값이 왜 바뀌었는지 되짚을 수 없게 되고, 잘못된 대체가 일어났을 때 되돌릴 근거도 사라집니다. 저장이 늘어나는 대신 이력이 남는 쪽을 택해야 하며, 이 선택의 비용은 저장 용량이 아니라 조회의 복잡도입니다. 꺼낼 때마다 "지금 유효한 값은 무엇인가"를 판정해야 하기 때문입니다. 그 판정을 조회 시점에 해야 한다는 점이 다음 축과 곧바로 충돌합니다.
이 축은 앞의 셋과 성격이 다릅니다. 앞의 셋은 무엇을 저장할 것인가의 문제이고, 이 축은 언제 쓸 수 있어야 하는가의 문제입니다. 그리고 이쪽이 저장 구조를 더 강하게 구속합니다. 응대는 사람이 기다리는 시간 안에서 일어납니다. 한 시간 이내의 응답을 약속한 서비스에서, 담당자가 지난 기록을 되짚는 데 쓸 수 있는 시간은 그 한 시간의 일부일 뿐입니다. 출발 당일이 되면 접점 사이의 간격은 분 단위로 좁아집니다. 하루에 한 번 야간에 정리해 두는 구조로는 이 요구를 만족시킬 수 없습니다. 오전 통화에서 나온 정정이 오후의 수배에 반영되지 않는다면, 시스템은 같은 날 안에서 자기 자신과 어긋납니다.
검색이 응대 흐름 안에 들어와야 하므로, 저장 구조가 조회 시점에 맞춰 설계되어야 합니다. 구체적으로는 무엇을 수집 시점에 미리 정리해 둘 것인가와 무엇을 조회 시점에 계산할 것인가의 경계가 아키텍처의 중심 결정이 됩니다. 축 03이 요구하는 유효성 판정, 축 01이 요구하는 상황별 범위 좁히기, 축 02가 요구하는 형태 통일이 모두 이 경계 위에 놓입니다. 경계를 조회 쪽에 유리하게 옮길수록 수집 시점의 작업량과 저장의 중복이 늘어납니다. 그 비용은 실재하며 감출 이유도 없습니다. 다만 수집은 사람이 기다리지 않는 작업이고 응대는 사람이 기다리는 작업이므로, 이 트레이드오프는 조회 쪽으로 기울이는 것이 옳습니다. 같은 이유로, 새로 들어온 입력이 다음 접점에 반영되기까지의 지연은 이 시스템에서 부차적 지표가 아니라 일차적 설계 목표가 됩니다.
이 축의 실패 모드는 '틀린 답'이 아니라 '늦은 답'입니다. 응대 흐름 안에서 늦게 도착한 맥락은 없는 맥락과 같고, 담당자는 이미 기억에 의존해 답을 내놓은 뒤입니다. 따라서 조회 경로에는 시간 상한이 있어야 하고, 상한에 닿았을 때 완전한 맥락을 더 기다리는 대신 그때까지 확정된 것만 정직하게 내놓는 경로가 함께 설계되어야 합니다. 무엇이 빠졌는지를 함께 알리는 편이, 침묵하거나 늦게 도착하는 것보다 응대에 도움이 됩니다. 어느 시점에 어떤 응답이 나갔고 그것이 상한 안이었는지 밖이었는지는 이후 측정의 대상이며, 이 문서에서 성능을 주장할 수 있는 대목이 아니라 측정 방법을 정해 두어야 할 대목입니다.
아래 세 가지는 모두 각자의 목적에서 잘 작동하는 도구입니다. 문제는 성능이 아니라 설계 목적과 위 네 축의 어긋남이며, 어긋나는 지점은 도구마다 다릅니다.
표는 좌우로 밀어 보실 수 있습니다.
| 도구 | 이 도구가 잘 하는 일 | 걸리는 축 | 어긋나는 지점 |
|---|---|---|---|
| 일반 CRM | 정해진 거래 단계와 필드를 정확하게, 감사 가능하게 기록합니다. | 축 02 | 스키마가 먼저 있어야 하고 채우는 주체가 사람입니다. 필드가 없는 사실은 자유 메모로 들어가고, 자유 메모는 조회의 대상이 되지 못합니다. 기록의 정확도를 지키기 위해 입력의 부담을 사람에게 남기는 설계이며, 그 부담이 여기서는 고객에게까지 옮겨 갑니다. |
| 문서 검색 | 방대한 기록에서 관련 있는 조각을 빠르게 찾아 돌려줍니다. | 축 03 | 반환의 단위가 '문서 조각'이지 '지금 유효한 사실'이 아닙니다. 3년 치 대화에서 선호 출발 시간을 물으면 여러 시점의 조각이 함께 돌아오고, 그중 무엇이 무엇을 대체했는지는 색인 안에 없습니다. 판정의 부담이 읽는 사람에게 그대로 남습니다. |
| 단일 모델 응답 | 주어진 맥락 안에서 접점 하나를 높은 품질로 처리합니다. | 축 01 · 04 | 상태가 응답 사이에 남지 않습니다. 매번 필요한 맥락을 통째로 넣어 주는 방식은 맥락이 길어질수록 비용과 지연이 함께 늘고, 무엇을 넣을지 고르는 문제가 다시 등장합니다. 288개 상황 전반의 일관성은 한 번의 응답 품질이 아니라, 응답과 응답 사이에 무엇이 남는가의 문제입니다. |
네 축은 각각 알려진 문제입니다. 이 문제가 어려운 이유는 네 축이 하나의 응대 안에서 동시에 성립하기 때문입니다.
조회 시점의 시간 상한은 저장할 수 있는 이력의 깊이를 제한하고, 이력의 깊이는 유효성 판정의 정확도를 좌우하며, 판정의 정확도는 다시 상태 공간 전체에 걸친 일관성을 결정합니다. 이 문서의 이후 절에서 설명하는 Context Hub의 구조는 모두 이 네 축과, 축들 사이의 이 충돌에 대한 응답입니다.
Context Hub는 하나의 큰 처리기가 아니라, 입력과 산출이 명시된 여덟 개의 단계로 나뉩니다. 단계를 나눈 이유는 규모가 아니라 관측입니다. 결과가 어긋났을 때 어느 단계에서 어긋났는지 가릴 수 있어야, 고칠 자리를 특정할 수 있습니다. 아래는 각 단계가 무엇을 받아 무엇을 내놓는지, 그리고 그 경계를 왜 그 자리에 두었는지에 대한 기록입니다.
수집부터 임베딩까지 다섯 단계는 응대와 분리된 시간에 진행됩니다. 자료가 도착하는 시점과 그 자료가 쓸모를 갖는 시점은 애초에 다르며, 둘을 같은 호흡에 묶으면 응답 시간이 그날 도착한 자료의 복잡도에 끌려갑니다. 무거운 처리는 미리 끝내 둡니다.
응대와 같은 호흡으로 도는 것은 서빙과 그 조회 경로뿐입니다. 이 경로에서 하는 일은 저장된 사실을 찾아 필요한 만큼 조립하는 것으로 한정되며, 추출도 판정도 이 안에서는 일어나지 않습니다. 응대 시간이 예측 가능한 이유는 이 제한 때문입니다.
좌우로 밀어 전체 파이프라인을 확인하실 수 있습니다.
각 단계는 앞 단계가 무엇을 넘겨줄지, 자신이 무엇을 돌려줄지를 미리 정해 둡니다. 경계가 고정되어 있으므로 한 단계의 내부를 바꾸어도 나머지 일곱 단계를 다시 손대지 않습니다. 네 번째 열은 그 경계를 왜 그 자리에 두었는지, 그리고 그 선택이 무엇을 포기했는지를 적은 것입니다.
| 단계 | 입력 | 산출 | 설계상의 결정 |
|---|---|---|---|
| 01 수집 Ingestion 처리원본을 변형 없이 확보하고 출처·수집 시각·여정 식별자를 각인합니다. | 음성, 영상, 이미지, 텍스트, 웹 검색 다섯 계열의 원자료 | 변형되지 않은 원본과 그에 붙은 출처 기록 | 요약하거나 압축해 보관하지 않습니다. 구조화 규칙은 운영 중에 반드시 개정되고, 개정된 규칙은 과거 입력에 다시 적용되어야 의미가 있습니다. 원본이 남아 있지 않으면 개선은 그 시점 이후의 입력에만 미칩니다. 보관 부담을 지는 대신 규칙을 고칠 권리를 보존합니다. |
| 02 정규화 Normalisation 처리계열별 형식을 하나의 내부 표현으로 통일하고, 발화와 문서에서 텍스트 표현을 확보하며, 상대 시각을 절대 시각으로 정렬합니다. | 원본과 출처 기록 | 형식이 통일되고 시점이 정렬된 텍스트 표현, 그리고 원본 구간으로 되돌아가는 참조 | 정규화 산출은 원본을 대체하지 않고 가리킵니다. 이후 어느 단계에서 나온 사실이든 원본의 어느 구간에서 비롯했는지 되짚을 수 있어야 하기 때문입니다. 참조를 유지하는 비용을 감수하는 이유는, 근거를 보여 줄 수 없는 사실은 담당자가 응대에 쓰지 않기 때문입니다. |
| 03 구조화 Structuring 처리역할이 나뉜 에이전트가 타입이 있는 사실을 추출하고, 각 사실에 근거 참조와 확신도를 붙입니다. | 정규화된 텍스트 표현 | 타입·유효 구간·근거·확신도를 갖춘 사실 후보 | 여기서 나온 것은 확정된 사실이 아니라 후보입니다. 기존 컨텍스트와의 정합성은 다음 단계의 책임으로 넘깁니다. 추출의 실패와 충돌의 실패는 원인이 다르므로, 한 단계에 묶으면 어느 쪽이 틀렸는지 가릴 수 없습니다. |
| 04 판정 Adjudication 처리후보를 기존 사실과 대조해 중복·갱신·충돌을 가리고, 항목의 성격에 따라 상태를 부여합니다. | 사실 후보와 해당 고객의 기존 확정 사실 | 확정·갱신·보류 중 하나의 상태가 붙은 사실과 그 판정 근거 | 최신 값이 자동으로 이기게 하지 않습니다. 선호는 실제로 바뀌기도 하고 잘못 읽히기도 하며, 두 경우는 도착할 때 같은 모습을 하고 있습니다. 되돌리기 어려운 항목은 보류로 두고 사람의 확인을 거칩니다. 판정 규칙은 05에서 상술합니다. |
| 05 임베딩 Embedding 처리사실 단위와 맥락 단위를 나누어 검색 가능한 표현을 만들고, 변경된 부분만 다시 생성합니다. | 확정된 사실과 그 사실이 속한 맥락 단위 | 두 층위의 검색 표현과 원 사실로 되돌아가는 참조 | 정밀한 조회와 넓은 회상은 목적이 다릅니다. 하나의 표현으로 둘 다를 감당하게 하면 어느 쪽도 제 몫을 하지 못합니다. 생성과 보관의 부담이 두 층위만큼 늘어나는 대신, 서빙 시점에는 질의의 성격에 따라 층위를 고르기만 하면 됩니다. |
| 06 저장 Storage 처리고객 단위로 격리된 컨텍스트에 덧붙여 기록하고, 갱신은 삭제가 아니라 이전 값의 만료로 처리합니다. | 상태가 부여된 사실, 검색 표현, 근거 참조 | 고객 한 명당 하나의 컨텍스트 — 현재 상태와 그에 이른 이력 | 격리를 질의 조건이 아니라 저장 구조 자체에 둡니다. 전부를 한 자리에 두고 조건으로 거르는 편이 단순하지만, 그때 격리는 질의문이 항상 옳다는 가정 위에 서게 됩니다. 구조로 나눈 경계는 질의가 잘못되어도 넘어가지 않습니다. 격리 구조는 07에서 상술합니다. |
| 07 서빙 Serving 처리요청의 성격에 따라 조회 층위를 고르고, 그 응대에 필요한 사실만 근거와 함께 조립합니다. | 접점의 요청 — 대상 고객, 상황, 여정의 단계 | 해당 응대에 필요한 최소한의 사실 묶음과 각 사실의 근거·시점·확신도 | 컨텍스트 전체를 넘기지 않습니다. 전부 넘기는 편이 구현은 단순하지만, 무엇이 실제로 쓰였는지 남지 않아 다음 응대를 개선할 근거가 사라지고, 그 응대와 무관한 기록까지 접점에 놓입니다. |
| 08 회수 Recovery 처리여정이 끝난 뒤 실제 결과를 관찰로 정리해 수집 단계의 새 입력으로 되돌립니다. | 응대에 제시된 사실과 실제로 선택·제공된 결과 | 다음 순환의 원본 입력과 앞 단계로 향하는 교정 신호 | 학습을 응대 도중에 시도하지 않습니다. 제안한 것과 실제로 선택된 것의 차이가 가장 값진 신호이며, 그 차이는 여정이 끝나기 전에는 존재하지 않습니다. 회수 경로는 06에서 상술합니다. |
구조화 단계는 정규화된 표현을 읽어 타입이 있는 사실을 만듭니다. 사실 하나는 주체, 속성, 값, 유효 구간, 근거 참조, 확신도를 갖춘 단위이며, 이 여섯이 모두 채워지지 않은 것은 사실로 인정하지 않습니다. 선호와 제약과 관계와 이력과 아직 확정되지 않은 요청은 서로 다른 타입으로 분리됩니다. “창가 자리를 좋아하신다”와 “이번 구간은 창가로 확정되었다”는 한 문장에서 함께 나올 수 있지만, 수명도 다르고 다음 여정에서의 취급도 다릅니다.
하나의 처리기가 전부를 맡지 않고, 역할이 나뉜 에이전트가 각각 좁은 책임을 집니다. 어떤 에이전트는 발화에서 사람과 사물을 골라내고, 어떤 에이전트는 흐릿한 시간 표현을 확정하며, 어떤 에이전트는 떨어져 있는 문장 사이의 관계를 잇고, 어떤 에이전트는 추출된 사실이 근거 구간에 실제로 존재하는지를 되짚습니다. 책임이 좁을수록 실패의 위치가 좁아지고, 실패의 위치가 좁아야 교정이 특정 지점에 가해집니다.
구조화는 판정하지 않습니다. 여기서 나온 사실은 기존 컨텍스트와 대조되기 전의 후보이며, 저장소에 들어가지 않은 채로 다음 단계에 넘겨집니다. 이 분리는 처리 단계를 하나 더 만들고, 아직 확정되지 않은 중간 산출을 따로 관리해야 하는 부담을 남깁니다. 그럼에도 나눈 이유는 두 종류의 실패가 서로 다른 얼굴을 하고 있기 때문입니다. 추출의 실패는 있는 것을 놓치거나 없는 것을 만들어 내는 형태로 나타나고, 판정의 실패는 서로 다른 것을 하나로 합치거나 아직 살아 있는 값을 덮어쓰는 형태로 나타납니다. 두 실패를 한 단계에 묶으면, 잘못된 응대를 보고도 읽기가 틀렸는지 판단이 틀렸는지 가릴 수 없습니다.
감수한 비용 단계가 하나 늘고, 확정되지 않은 후보를 별도로 보관해야 합니다. 대신 잘못된 사실을 마주쳤을 때 어느 단계를 고쳐야 하는지가 언제나 분명합니다.
판정 단계는 새 후보와 기존 사실을 나란히 놓고 세 가지를 묻습니다. 둘은 같은 대상을 말하고 있는가, 값이 서로 다른가, 다르다면 지금 유효한 쪽은 어느 쪽인가. 세 물음의 답에 따라 후보는 확정되거나, 기존 값을 갱신하거나, 보류 상태로 남습니다.
충돌에서 최신 값이 자동으로 이기게 하지 않았습니다. 선호는 실제로 바뀌기도 하고, 잘못 읽히기도 합니다. 두 경우는 판정 단계에 도착할 때 구분되지 않는 모습을 하고 있습니다. 그래서 항목을 되돌리기 쉬운 것과 어려운 것으로 나눕니다. 좌석 방향이나 기내 음료처럼 다음 접점에서 손쉽게 정정되는 항목은 자동으로 갱신하고, 알레르기나 동반 인원이나 의전상의 제약처럼 한 번 어긋나면 응대 자리에서 되돌릴 수 없는 항목은 보류로 두어 사람의 확인을 거칩니다. 자동으로 확정되는 비율을 낮추는 선택이지만, 조용히 잘못된 채로 쓰이는 사실을 줄이는 편이 이 서비스에서는 옳은 교환입니다.
갱신은 삭제가 아니라 만료입니다. 이전 값은 지워지지 않고 유효 구간이 닫힐 뿐입니다. 지금 무엇이 참인지뿐 아니라, 특정 시점에 시스템이 무엇을 참으로 알고 있었는지를 물을 수 있어야 하기 때문입니다. 어긋난 응대를 되짚을 때 필요한 것은 현재의 사실이 아니라 그때 제시되었던 사실입니다. 판정 규칙과 보류 항목의 분류 체계는 05에서 상술합니다.
감수한 비용 사람의 확인을 기다리는 사실이 상시 존재하고, 그만큼 자동화 비율이 낮아집니다. 대신 확인 대기 중인 항목은 서빙 단계에서 그 상태와 함께 전달되므로, 담당자가 모른 채 지나가는 일은 없습니다.
서빙은 접점에서 온 요청을 받아 그 응대에 필요한 사실만 조립합니다. 요청은 최소한 세 가지를 말해야 합니다. 누구의 컨텍스트인지, 지금 어떤 상황인지, 여정의 어느 단계인지. 같은 고객이라도 첫 상담과 출발 전날과 도착 이후에 필요한 사실은 서로 겹치지 않습니다.
조회는 두 층위를 나누어 씁니다. 확인해야 할 값이 분명한 요청은 사실 단위로 정밀하게 조회하고, 앞선 여정에서 비슷한 상황을 어떻게 처리했는지 되짚어야 하는 요청은 맥락 단위로 넓게 회상합니다. 두 층위를 임베딩 단계에서 미리 나누어 두었기 때문에, 서빙 시점에는 무엇을 새로 만들 필요 없이 고르는 일만 남습니다.
컨텍스트 전체를 넘기지 않고 선별하는 것은 의도된 선택입니다. 전부 넘기는 편이 구현은 단순하지만 세 가지를 잃습니다. 응대가 길어지고, 무엇이 실제로 쓰였는지 남지 않아 다음 응대를 개선할 근거가 사라지며, 그 응대와 무관한 기록까지 접점에 놓입니다. 선별은 필요한 사실을 빠뜨릴 위험을 만들지만, 그 위험은 회수 단계에서 드러나고 교정될 수 있는 종류입니다. 무엇을 내보냈는지와 함께 무엇을 내보내지 않았는지도 기록되기 때문입니다.
서빙과 그 조회 경로만이 응대와 같은 호흡으로 돕니다. VONAER는 한 시간 이내의 응답과 24시간 365일 운영을 공표했고, VON Privé는 24시간 내 보장된 리프트를 약속합니다. 이러한 약속은 시각을 고를 수 없고 자료의 성격도 고를 수 없다는 뜻입니다. 응대 경로를 조회와 조립으로 한정한 이유가 여기에 있습니다. 추출과 판정이 응대 안에 들어와 있으면 응답 시간은 그날 도착한 자료의 복잡도를 따라 움직이고, 약속은 가장 복잡한 자료가 도착한 날에 가장 먼저 흔들립니다.
감수한 비용 응대 시점에 아직 판정되지 않은 최신 입력은 반영되지 않을 수 있습니다. 그래서 서빙은 조립한 사실마다 그 사실이 확정된 시점을 함께 내보내고, 같은 대상에 대해 확인을 기다리는 항목이 있으면 그 사실 자체를 표시합니다. 시스템이 모르는 것을 모른다고 말하게 하는 것이, 아는 척하게 두는 것보다 응대에 안전합니다.
경계를 나눈 실익은 관측에서 나옵니다. 아래는 각 단계에서 무엇을 실패로 볼 것인지, 그리고 그 실패를 어떤 방법으로 관측할 것인지에 대한 정의입니다. 수치는 운영 데이터가 쌓인 뒤에야 의미를 가지므로 여기에 적지 않으며, 무엇을 어떤 방법으로 잴 것인지만 미리 고정합니다.
| 단계 | 대표 실패 양상 | 관측 방법 |
|---|---|---|
| 수집 | 입력이 유실되거나, 출처가 끊긴 채 들어옴 | 원본 건수와 정규화 산출 건수를 대조하고, 출처 기록이 비어 있는 원본을 따로 모아 유입 경로별로 점검합니다. |
| 구조화 | 있어야 할 사실이 추출되지 않거나, 근거 구간에 없는 사실이 만들어짐 | 사람이 직접 정리한 표본과 대조해 누락과 과잉을 유형별로 분류하고, 모든 사실에 대해 근거 구간을 되짚어 원문에 실제로 존재하는지 확인합니다. |
| 판정 | 서로 다른 대상을 하나로 합치거나, 아직 유효한 값을 덮어씀 | 보류로 넘어간 사실이 사람의 확인에서 어떤 결론에 이르렀는지를 되먹여, 자동 판정과 사람 판정이 갈린 지점을 유형으로 모읍니다. |
| 임베딩 | 필요한 사실이 조회 결과에서 뒤로 밀림 | 실제 응대에서 담당자가 사용한 사실을 표시하게 하고, 그 사실이 조회 결과의 어느 자리에 있었는지를 층위별로 기록합니다. |
| 서빙 | 필요한 사실을 빠뜨리거나, 불필요한 사실을 함께 내보냄 | 조립된 묶음과 실제 사용 여부를 대조하고, 응대 후 담당자가 따로 찾아본 항목을 누락 후보로 수집해 선별 기준에 되먹입니다. |
| 회수 | 관찰이 되돌아오지 않아 순환이 끊김 | 종료된 여정 가운데 회수 기록이 생성된 비중을 추적하고, 회수되지 않은 여정을 원인별로 분류해 접점 설계를 고칩니다. |
여기까지가 파이프라인의 골격입니다. 이어지는 절에서는 이 골격 위에서 판단이 가장 많이 필요한 세 곳을 따로 다룹니다. 충돌을 어떻게 가릴 것인지는 05에서, 관찰을 어떻게 되돌릴 것인지는 06에서, 고객 단위의 격리를 어떻게 구조로 세울 것인지는 07에서 이어집니다.
Context Hub는 단일 처리 경로가 모든 요청에 답하는 구조가 아닙니다. 요구되는 정밀도가 다르고, 실패했을 때 물어야 할 질문이 다르고, 허용해야 할 권한이 다르기 때문입니다. 이 장은 무엇을 기준으로 나누었는지, 나눈 것들을 무엇으로 다시 묶는지, 그리고 그 묶음의 어디에 사람이 서는지를 기술합니다.
여권의 성명 표기를 잘못 읽으면 그 여정은 출발하지 못합니다. 반면 선호하는 음악의 추정이 어긋나면 다음 비행에서 고쳐 담으면 됩니다. 두 오류는 같은 종류가 아닙니다. 단일 처리 경로는 이 둘에 하나의 확신 기준을 적용하게 만듭니다. 기준을 서류에 맞추면 취향에 관한 사실은 거의 남지 않고, 취향에 맞추면 서류가 위태로워집니다. 그래서 확신 기준과 검증 절차를 역할별로 따로 둡니다.
응답이 틀렸을 때 실제로 필요한 질문은 “어디에서 틀렸는가”입니다. 처리가 하나의 덩어리이면 입력을 잘못 읽은 것인지, 사실을 잘못 고른 것인지, 표현만 어긋난 것인지 구분되지 않습니다. 원인을 특정할 수 없으면 재현할 수 없고, 재현할 수 없으면 고칠 수 없습니다. 단계를 나누고 각 단계의 입력과 산출을 남기면 틀린 지점을 지목할 수 있고, 교정은 해당 에이전트에만 가해집니다.
조회만 하는 에이전트와 저장된 기본값을 바꾸는 에이전트가 같은 권한을 가지면, 응대 도중의 한 번의 오해가 그대로 기록으로 굳습니다. 읽기·제안·쓰기를 서로 다른 주체에 배정하면 오해는 제안 단계에서 멈춥니다. 분리는 단계와 왕복을 늘립니다. 그럼에도 잘못 굳은 사실 하나는 이후의 모든 응대를 오염시키므로, 왕복 한 번을 지불하는 편이 낫다고 판단했습니다.
여덟 에이전트의 책임과 권한입니다. 제안서가 접점 위에 드러나는 에이전트를 소개했다면, 여기에는 표면에 드러나지 않는 내부 에이전트가 함께 놓입니다. 이 표에서 가장 중요한 것은 마지막 열입니다.
| 에이전트 | 책임 | 입력 | 산출 | 권한 |
|---|---|---|---|---|
| 추출 에이전트 | 비정형 입력에서 사실 후보를 분리하고, 각 후보에 출처와 시점을 붙입니다. | 음성·영상·이미지·텍스트·웹 원천 스트림 | 근거가 첨부된 사실 후보 | 제안 저장소에 직접 쓰지 못합니다 |
| 판정 에이전트 | 후보를 검증하고, 기존 사실과의 충돌을 근거의 출처와 시점으로 해소합니다. | 사실 후보, 기존 컨텍스트 | 확정 사실, 대체 관계, 또는 보류 | 쓰기 저장소로 들어가는 유일한 관문 |
| 조회 에이전트 | 이번 응대에 필요한 사실만 범위를 좁혀 꺼내고, 함께 근거를 반환합니다. | 질의, 접점 맥락 | 근거가 붙은 사실 묶음 | 읽기 고객 단위로 격리된 범위 안에서만 |
| 준비 에이전트 | 기내 구성, 케이터링, 서류를 지난 여정의 기준에 맞춰 초안으로 세웁니다. | 조회 결과, 확정된 여정 | 준비 초안과 확인 요청 | 제안 사람의 확인 전에는 확정되지 않습니다 |
| 지상 에이전트 | 픽업 시각, 배차, 터미널 동선을 하나의 시간표로 묶고 겹치는 구간을 표시합니다. | 조회 결과, 일정과 이동 정보 | 시간표 초안과 충돌 경고 | 제안 배차와 수배를 스스로 확정하지 않습니다 |
| 현지 에이전트 | 도착지의 숙소, 식음, 현지 일정 후보를 도착 전에 정리합니다. | 조회 결과, 목적지 외부 정보 | 수배 후보와 각 후보의 근거 | 제안 외부에 예약을 넣지 않습니다 |
| 회수 에이전트 | 여정이 끝난 뒤 흩어진 기록을 모아 정규화하고, 수명이 끝난 사실을 만료로 표시합니다. | 접점 기록, 사후 메모 | 추가된 기록, 만료 표시 | 쓰기 추가와 만료에 한정 — 충돌 정정은 판정으로 되돌립니다 |
| 감사 에이전트 | 모든 읽기·제안·쓰기를 기록하고, 근거가 없는 사실과 규칙을 벗어난 접근을 표시합니다. | 전 단계의 입출력 기록 | 추적 기록, 이상 표시 | 읽기 어떤 값도 바꾸지 않습니다 |
저장된 사실을 바꿀 수 있는 것은 판정과 회수, 둘뿐입니다. 그리고 이 둘 중 어느 쪽도 회원에게 직접 닿지 않습니다. 회원 앞에 서는 것은 사람이고, 그 사람 앞에 놓이는 것은 초안입니다. 응대 표면에 해당하는 상담·매칭 에이전트 역시 저장소를 직접 열지 않고, 필요한 사실은 반드시 조회 에이전트를 통해 받습니다.
준비·지상·현지 에이전트는 제안서의 접점 구성과 같습니다. 회수 에이전트는 제안서에서 기억 에이전트로 부른 구성 요소의 내부 명칭입니다.
나누는 일보다 어려운 것은 다시 묶는 일입니다. 일을 어디로 보낼지, 서로 다른 답이 나왔을 때 무엇을 기준으로 정할지, 그리고 정할 수 없을 때 무엇을 할지가 이 시스템의 실제 성격을 결정합니다.
요청의 종류가 아니라 필요한 사실의 종류로 라우팅합니다. “다음 주에 가족과 홍콩”이라는 한 문장은 요청 유형으로는 하나이지만, 필요한 사실은 동반 인원의 구성과 서류 상태, 이 고객이 지금까지 선호해 온 기내 구성, 목적지의 시간 조건으로 나뉩니다. 요청 유형으로 라우팅하면 이 문장은 ‘문의 처리’라는 하나의 경로로 들어가고, 무엇이 빠졌는지는 답을 다 만든 뒤에야 드러납니다. 필요한 사실로 라우팅하면 각 사실을 맡은 에이전트가 나란히 호출되고, 응답을 만들기 전에 아직 확보되지 않은 사실이 먼저 드러납니다.
두 번째 이유는 확장입니다. VONAER가 운용하는 서비스는 전용기 차터와 헬리콥터, 리무진, 슈퍼요트, 큐레이티드 경험이며 2027년에는 eVTOL이 더해집니다. 요청 유형을 축으로 삼으면 서비스가 늘어날 때마다 분기가 함께 늘어납니다. 필요한 사실을 축으로 삼으면 이들 대부분이 인원, 서류, 선호, 시간, 이동이라는 같은 축을 공유하므로, 새 서비스는 새로운 분기가 아니라 기존 축 위의 새로운 값이 됩니다.
둘 이상의 에이전트가 서로 다른 사실을 제시하는 일은 드물지 않습니다. 통화에서는 창가를 선호한다고 말했는데 지난 세 번의 탑승 기록은 통로일 수 있습니다. 이때 판정 에이전트는 다수결을 쓰지 않습니다. 자주 등장한 사실이 옳은 사실은 아니기 때문입니다. 기준은 두 가지입니다.
그래서 판정이 답하는 질문은 “무엇이 옳은가”가 아니라 “무엇이 더 나은 근거를 가졌는가”입니다. 확정된 사실에는 그 판정에 쓰인 근거가 함께 붙어 저장되며, 이후 어느 응대에서든 같은 근거를 다시 꺼내 볼 수 있습니다.
출처 등급과 시점이 모두 같아 우열이 서지 않을 때, 확정에 필요한 사실이 아예 없을 때, 그리고 그 사실이 회원의 안전이나 서류에 직접 닿을 때 — 판정 에이전트는 임의로 하나를 고르지 않고 보류합니다. 보류는 조용히 쌓이지 않습니다. 보류는 사람에게 올라갑니다.
이 서비스에서는 침묵보다 잘못된 확신이 더 비쌉니다. “확인이 필요합니다”는 몇 분으로 회복되지만, 틀린 사실이 확신을 갖고 저장되면 그 뒤의 모든 응대가 그 위에서 이루어집니다. 보류는 응답을 늦춥니다. 그것이 이 설계가 지불하기로 한 대가이며, 반대 방향의 대가보다 싸다고 판단했습니다.
보류 자체도 관측 대상입니다. 운영에서는 접점 단위로 보류율, 보류 사유의 분포, 그리고 사람이 내린 결정이 에이전트가 올린 후보 안에 있었는지를 기록합니다. 후보 안에 없었던 경우는 라우팅이나 추출을 고칠 지점을 가리키고, 보류 사유가 한쪽으로 몰리는 경우는 판정 기준을 다시 볼 지점을 가리킵니다. 두 지표는 도입 첫날부터 수집하되, 운영 기간이 쌓이기 전의 값은 기준선으로만 사용합니다.
좌우로 밀어 전체 구조를 확인하실 수 있습니다.
It anticipates. It prepares. It delivers.
앞의 두 문장은 시스템이 맡습니다. 마지막 문장은 사람이 맡습니다. 에이전트는 준비하고, 사람이 결정합니다. 회원에게 나가는 모든 최종 커뮤니케이션은 사람의 확인을 거칩니다.
이것은 성능의 한계가 아니라 서비스 등급에서 도출한 설계 제약입니다. 멤버십은 소개로 이어지는 관계이고, 그 관계의 마지막 문장은 사람의 것이어야 합니다. 자동화의 목표는 그 문장을 대신 쓰는 것이 아니라, 그 문장을 쓰기 전에 필요한 사실이 이미 책상 위에 놓여 있게 하는 것입니다.
그래서 사람이 마주하는 것은 빈 화면이 아니라 근거가 붙은 초안입니다. 확인의 대상은 “무엇을 할 것인가”가 아니라 “이대로 나가도 되는가”로 좁혀집니다. 이 제약은 시간이 지나도 풀리지 않으며, 다만 초안의 완성도를 높이는 방향으로만 완화됩니다.
Context Hub가 저장하는 최소 단위는 문서도 대화도 아닌 하나의 사실입니다. 사실은 여덟 개의 필드를 반드시 갖추며, 그중 두 개는 비어 있을 수 없습니다. 이 절은 그 형식과, 형식이 그렇게 정해진 이유를 기술합니다.
비정형 입력에서 무엇을 뽑아냈든, 저장되는 순간 모든 사실은 같은 여덟 개의 필드를 갖습니다. 음성에서 나온 사실과 서류 이미지에서 나온 사실이 형식상 구분되지 않는다는 뜻이며, 이 균일성 덕분에 뒤따르는 모든 처리 — 충돌 판정, 만료, 열람 범위 — 가 입력의 종류를 다시 묻지 않고 동작합니다.
| 필드 | 의미 | 예 |
|---|---|---|
| 주체 | 이 사실이 누구의 것인지. 회원 본인, 동반자, 가구 가운데 하나에 귀속됩니다. | 회원 A · 본인 |
| 술어 | 무엇에 관한 사실인지. 스키마에 미리 정의된 속성 이름만 쓰입니다. | 식이 제한 |
| 값 | 그 속성이 가지는 내용. 자유 문장이 아니라 술어마다 정해진 형식을 따릅니다. | 갑각류 회피 — 조리 접촉 포함 |
| 출처 | 어느 입력에서 나온 사실인지. 보존된 원본의 해당 지점까지 되짚을 수 있습니다. | 상담 통화 녹취 · 해당 발화 구간 |
| 관측 시점 | 사실이 관측된 시각. 저장된 시각이 아니라 관측된 시각입니다. | 2025-11-04 14:22 |
| 유효 구간 | 언제부터 언제까지 유효한지. 끝은 비어 있을 수 있으며, 비어 있음은 지금 유효를 뜻합니다. | 2025-11-04 — (열림) |
| 확신도 | 이 사실을 얼마나 강하게 붙들 것인지. 확정 · 유력 · 추정 세 등급. | 확정 |
| 안정성 등급 | 이 사실이 시간에 따라 어떻게 변하는지. 고정 · 완만 · 유동 · 일회 (B 참조). | 고정 |
저장 시각과 열람 이력은 별도로 기록되지만 사실의 일부가 아니라 기록의 메타데이터입니다. 사실 자체는 관측된 시각을 기준으로 정렬됩니다. 늦게 들어온 오래된 관측이 먼저 들어온 최근 관측을 밀어내지 않도록 하기 위해서입니다.
근거를 제시할 수 없는 사실은 서비스에 쓸 수 없습니다. 담당자가 “왜 이렇게 준비되어 있는가”를 물었을 때, 시스템은 원본의 어느 지점에서 나온 사실인지 답할 수 있어야 합니다. 답할 수 없는 사실은 저장은 되더라도 응대에 쓰이지 않습니다.
되돌리기 위해서도 필요합니다. 어디서 들어왔는지 모르는 오류는 고쳐도 같은 경로로 다시 들어옵니다. 출처는 사실을 신뢰하기 위한 장치이자, 사실을 의심하기 위한 장치입니다.
만료를 표현할 수 없는 사실은 언젠가 반드시 틀립니다. 선호는 바뀌고, 서류는 만료되며, 동행하는 사람은 달라집니다. 구간이 없는 스키마는 이 변화를 덮어쓰기로만 처리할 수 있고, 덮어쓰기는 과거를 지웁니다.
구간을 가지면 사실은 틀려지는 대신 닫힙니다. 닫힌 사실은 기본값으로 쓰이지 않지만 이력에는 남아, 지난 여정이 왜 그렇게 준비되었는지를 여전히 설명합니다.
설계 선택 — 확신도는 수치가 아니라 서열 등급으로만 적습니다. 확률값은 정밀해 보이지만, 보정되지 않은 수치는 실제보다 강한 근거처럼 읽히기 쉽습니다. 대신 세 등급을 운영 규칙과 일대일로 묶었습니다. 확정은 그대로 적용하고, 유력은 적용하되 응대 시 확인 문장을 함께 제시하며, 추정은 기본값으로 쓰지 않고 담당자에게 후보로만 보여 줍니다. 정밀함을 일부 포기하고 해석의 일관성을 택한 거래입니다.
고정 등급이므로, 이 값과 어긋나는 새 관측이 들어와도 시스템은 값을 바꾸지 않고 담당자에게 확인을 요청합니다.
사실은 내용이 아니라 변하는 방식으로 분류됩니다. 알레르기와 선호 시간대는 둘 다 한 사람에 관한 참인 사실이지만, 6개월이 지난 뒤의 신뢰도가 전혀 다릅니다. 등급은 술어마다 스키마에 미리 지정되며, 개별 사실이 스스로 등급을 고르지 않습니다. 등급이 정해지면 그 사실을 기본값으로 쓸지, 충돌이 났을 때 어느 쪽을 남길지가 자동으로 따라옵니다.
| 등급 | 변화의 성질과 예 | 기본값 사용 | 충돌 해소 |
|---|---|---|---|
| 고정 | 거의 변하지 않습니다. 식이 제한, 알레르기, 서류상의 사실. | 확인 절차 없이 그대로 적용합니다. | 어긋나는 관측이 들어오면 자동으로 갱신하지 않고, 기존 값을 유지한 채 사람의 확인을 요청합니다. |
| 완만 | 천천히 변합니다. 좌석 선호, 기내 온도. | 가장 최근 값을 기본값으로 쓰되, 직전 값을 함께 보여 줍니다. | 새 관측이 우선합니다. 이전 값은 구간을 닫아 이력으로 남깁니다. |
| 유동 | 자주 변합니다. 선호 시간대, 동반자 구성. | 가장 최근 관측만 기본값이 됩니다. | 과거 값은 근거로 쓰지 않습니다. 관측이 오래되었으면 기본값 없이 질문합니다. |
| 일회 | 해당 여정에만 유효합니다. 특정 기념일 축하, 일회성 요청. | 그 여정 안에서만 기본값이 됩니다. | 여정이 끝나면 유효 구간이 닫히고 다음 여정으로 승계되지 않습니다. |
고정 등급의 처리 규칙은 대칭적이지 않습니다. 불필요한 확인 한 번의 비용과, 알레르기 정보를 잘못 지운 비용은 비교할 수 없기 때문입니다. 그래서 고정 등급은 자동 갱신을 일부러 포기하고, 담당자의 확인을 한 단계 넣습니다. 나머지 세 등급에서는 반대로 확인 단계가 응대를 느리게 만들기 때문에 자동 갱신을 택합니다.
이 분류는 01에서 다룬 장기 기억과 변화의 축을 스키마 안으로 옮겨 놓은 것입니다. 오래 기억하는 것만으로는 부족하고, 무엇이 언제 변하는지를 같은 자리에 적어 두어야 합니다. 등급이 없는 기억은 오래된 선호를 확신을 가지고 적용하며, 이는 기억이 없는 것보다 나쁜 결과를 만듭니다. 아무것도 모르는 응대는 질문을 하지만, 틀린 것을 확신하는 응대는 질문하지 않기 때문입니다.
알려진 한계 — 등급 부여 자체가 틀릴 수 있습니다. 어떤 회원에게는 완만한 선호가 다른 회원에게는 거의 고정일 수 있습니다. 등급을 술어 단위로 고정해 둔 것은 이 위험을 없애서가 아니라, 위험을 한곳에 모아 두기 위해서입니다. 등급이 사실마다 흩어져 있으면 잘못을 찾을 수 없지만, 술어 목록에 모여 있으면 검토와 수정이 가능합니다. 새로운 술어를 추가할 때 등급을 지정하는 일은 사람의 판단으로 남겨 둡니다.
등급이 적절했는지는 운영 중에만 확인할 수 있습니다. 고정 등급에서 발생한 확인 요청 가운데 실제로 값이 바뀐 경우와 그대로 유지된 경우를 나누어 기록하면, 등급이 지나치게 보수적인지 느슨한지 판단할 근거가 쌓입니다. 이는 도입 이후의 측정 대상이며, 지금 제시할 수 있는 수치는 없습니다.
사실은 개체에 붙습니다. 개체 목록은 일반적인 고객 관리 모델에서 빌려온 것이 아니라, 전용기·헬리콥터·리무진·요트·큐레이티드 경험이 한 여정 안에서 이어지는 이 서비스의 실제 형태에서 나왔습니다. 각 개체 아래에 그 개체가 통상 갖는 안정성 등급을 함께 적습니다.
모든 사실이 최종적으로 귀속되는 단위. 계약·이력·열람 권한의 기준점입니다.
고정
회원과 함께 이동하는 개인. 회원과 구분되는 자신의 선호와 제한을 가집니다.
고정 · 제한 유동 · 동행 여부
회원과 생활을 공유하는 단위. 가족 단위 여행 계획이 성립하는 자리입니다.
완만
문의부터 귀가까지 한 번의 이동 전체를 묶는 상위 단위. 일회 사실이 매달리는 자리입니다.
일회
여정을 이루는 개별 이동. 항공·헬리콥터·지상·해상이 각각 하나의 구간입니다.
일회
선호하는 기종과 등급, 그리고 회피하는 기재 특성. 경험이 쌓이며 천천히 이동합니다.
완만
좌석 배치, 침상 준비, 기내 온도와 조도 등 기내 환경에 관한 선호.
완만
제한은 의학적·종교적 사실이고, 취향은 시간에 따라 변합니다. 두 층을 분리해 저장합니다.
고정 · 제한 완만 · 취향
차종, 승하차 위치, 동선, 대기 규칙과 운전 방식에 관한 선호.
완만
특정 도시에서 반복되는 숙소·식당·일정의 패턴. 도시 단위로 따로 보관됩니다.
완만
여권·비자·증명의 상태. 값 자체는 잘 변하지 않지만 유효 구간의 끝이 항상 명시됩니다.
고정
반복되는 날짜와 주기적 이동. 주기는 오래 지속되고, 개별 축하 요청은 한 번으로 끝납니다.
고정 · 주기 일회 · 요청
개체를 이렇게 나눈 이유는 하나의 여정이 여러 서비스 선을 가로지르기 때문입니다. 같은 회원의 기내 온도 선호와 차량 대기 위치 선호는 서로 다른 개체에 속하지만 같은 여정 안에서 동시에 필요합니다. 개체가 분리되어 있으면 한쪽이 바뀌어도 다른 쪽이 함께 흔들리지 않고, 구간 단위 취소나 변경이 발생해도 회원 단위의 사실은 영향을 받지 않습니다.
스키마를 정의하는 일의 절반은 무엇을 담지 않을지 정하는 일입니다. 아래 세 종류는 기술적으로 저장할 수 있음에도 의도적으로 저장하지 않습니다.
“고객이 불쾌해했다” 같은 해석은 사실로 저장하지 않습니다. 관측된 것은 발화와 행위이고, 감정은 그로부터의 추론입니다. 추론을 사실로 굳히면 근거를 제시할 수 없는 판단이 시스템 안에서 사실의 지위를 얻습니다. 대신 원래의 발화를 출처와 함께 보존해, 판단은 사람에게 남깁니다.
회원이나 본인이 아닌 경로로 알게 된 내용은 저장하지 않습니다. 출처 필드가 요구하는 되짚기가 성립하지 않기 때문입니다. 동반자에 관한 사실은 회원의 요청 맥락 안에서 전달된 것, 또는 본인이 직접 밝힌 것만 기록합니다.
알 수 있다는 것이 저장할 이유가 되지는 않습니다. 어떤 접점에서도 쓰이지 않는 정보는 수집 단계에서 걸러지며, 이미 들어온 입력 안에 있더라도 사실로 승격되지 않고 원본 안에만 남습니다.
술어 목록은 열려 있지 않습니다. 스키마에 정의된 술어만 저장되며, 새로운 술어를 추가하려면 그 술어가 어느 접점에서 어떻게 쓰이는지를 먼저 적어야 합니다. 쓰임을 적을 수 없으면 필드도 만들지 않습니다.
이 규칙은 개인 정보의 양을 줄이기 위한 것이기도 하지만, 그보다 먼저 스키마가 스스로 비대해지는 것을 막기 위한 것입니다. 쓰이지 않는 필드는 관리되지 않고, 관리되지 않는 필드는 가장 먼저 낡습니다. 담지 않기로 한 것이 명확할수록, 담기로 한 것을 정확하게 지킬 수 있습니다.
조회 계층은 두 가지 일을 합니다. 필요한 사실을 찾아오는 일과, 찾아온 사실들이 서로 어긋날 때 무엇을 믿을지 정하는 일입니다. 앞의 일은 유사도로 상당 부분 해결되지만, 뒤의 일은 유사도가 전혀 다루지 못합니다. Context Hub의 조회가 층으로 나뉘어 있고, 그 위에 명시적인 충돌 해소 절차가 얹혀 있는 이유입니다.
임베딩 유사도는 “이 문장은 무엇에 관한 말인가”를 잘 잽니다. 그것은 회상의 도구로는 훌륭하지만, 판정의 도구로는 세 지점에서 구조적으로 부족합니다. 프라이빗 항공의 응대에서는 세 지점 모두가 그대로 오응대로 이어집니다.
어휘와 구문이 거의 같은 두 문장은 임베딩 공간에서 아주 가깝게 놓입니다. 값이 정반대여도 그렇습니다. 상위 결과만으로는 어느 쪽이 회원의 실제 선호인지 판별할 수 없고, 둘이 함께 회수되면 오히려 응답을 흐립니다. 부정, 회피, 조건절이 모두 같은 문제를 만듭니다.
“창가를 선호합니다.”2년 전 상담에서 나온 취향과 지난달 통화에서 나온 취향은, 의미가 같으면 같은 점수를 받습니다. 유사도는 “무엇에 관한 말인가”를 재지 “언제의 말인가”를 재지 않습니다. 동반자 구성, 반려동물 동반, 흡연 여부, 선호 출발 시간대처럼 실제로 바뀌는 사실에서 이 결함은 곧바로 오응대가 됩니다.
2년 전의 “가족과 함께 이동합니다”가알레르기는 전체 기록에서 한두 번 언급되고 끝납니다. 반면 좌석, 목적지, 일정은 매 접점마다 반복됩니다. 자주 등장하는 화제가 후보 목록을 채우면, 정작 결정적인 한 줄은 상위에 오르지 못합니다. 유사도는 빈도에 편향되지만, 응대의 위험은 빈도가 아니라 결과의 크기로 정해집니다.
기내 케이터링을 준비하는 질의에검색은 가장 비슷한 것을 돌려주고, 조회는 정확히 그것을 돌려줍니다. 알레르기, 여권 만료일, 반려동물 동반 여부처럼 답이 하나로 정해져 있는 술어에서 “가장 비슷한 결과”는 오답의 다른 이름입니다. 그래서 Context Hub의 조회 계층은 질의의 형태를 먼저 판별하고, 형태에 따라 다른 경로를 태웁니다.
| 계층 | 질의의 형태 | 동작 | 반환 |
|---|---|---|---|
| 사실 조회 | 술어가 특정됩니다. “이 회원의 알레르기는” |
스키마에서 해당 술어를 직접 조회합니다. 유사도를 계산하지 않습니다. | 확정된 값과 그 근거 |
| 맥락 회상 | 술어가 열려 있습니다. “이번 여정에서 유의할 점은” |
임베딩으로 후보를 넓게 회상합니다. 이 단계는 정밀도가 아니라 재현율을 우선합니다. | 순위가 매겨지지 않은 후보 집합 |
| 결합·재정렬 | 앞 두 계층의 결과 | 안정성 등급 → 관측 시점 → 확신도 → 출처의 순서로 후보를 다시 정렬합니다. | 근거가 부착된 정렬 목록 |
| 필수 사실 병합 | 질의와 무관하게 항상 | 안전·규정·신체 제약에 해당하는 고정 등급 사실을 관련성 계산 없이 병합합니다. | 누락될 수 없는 제약 목록 |
유사도는 질의를 기준으로 후보를 고릅니다. 그런데 위험은 질의를 따라오지 않습니다. “기내식 메뉴를 정해 주십시오”라는 질의는 알레르기를 언급하지 않으며, 유사도만으로는 알레르기 사실이 상위에 오를 이유가 없습니다. 그래서 안전·규정·신체 제약에 해당하는 고정 등급 사실은 질의와의 관련성을 아예 계산하지 않고 무조건 결과에 병합합니다.
이 규칙에는 비용이 있습니다. 응답마다 컨텍스트가 조금씩 길어지고, 이번 질의와 무관한 제약이 함께 실립니다. 그 비용은 의도적으로 감수한 것입니다. 누락의 대가와 잉여의 대가가 대칭이 아니기 때문입니다.
사실 조회 경로를 타려면 질의에서 술어를 특정할 수 있어야 합니다. 이 판별 자체가 틀릴 수 있습니다. 판별에 실패하면 조회 계층은 조용히 비고, 응답은 맥락 회상만으로 만들어집니다. 조용한 실패는 가장 위험한 실패입니다.
그래서 판별은 보수적으로 설계했습니다. 애매한 질의는 두 계층을 모두 태웁니다. 중복 회수를 감수하고 누락을 피하는 쪽을 택했으며, 두 계층의 결과가 겹칠 때는 뒤이은 재정렬과 충돌 해소 절차가 중복을 정리합니다.
재정렬의 기준 순서와 충돌 해소의 기준 순서가 다른 점은 의도된 것입니다. 재정렬은 무엇을 먼저 보여줄 것인가의 문제이고, 충돌 해소는 무엇을 믿을 것인가의 문제이기 때문입니다.
같은 술어에 서로 다른 값을 가진 두 사실이 들어왔을 때, Context Hub는 정해진 순서의 절차를 밟습니다. 순서는 고정되어 있고, 각 단계는 통과 조건과 종료 조건이 명시되어 있습니다. 어느 단계에서 결론이 났는지는 사실에 기록으로 남아, 나중에 그 판정을 되짚을 수 있습니다.
충돌은 같은 술어 안에서만 성립합니다. 먼저 그 술어의 안정성 등급을 봅니다. 고정 등급 — 알레르기, 신체적 제약, 여권·비자 정보, 규정상의 제약 — 에서 두 값이 어긋난다면, 이는 취향이 바뀐 것이 아니라 어느 한쪽이 잘못 기록되었다는 뜻입니다. 자동 승계의 대상이 아니므로 절차는 여기서 멈추고 담당자에게 넘깁니다. 완만·유동·일회 등급이면 다음 단계로 진행합니다.
두 사실의 유효 구간이 시간축에서 겹치는지 봅니다. 겹치지 않는다면 애초에 충돌이 아닙니다. “지난겨울에는 통로석, 올봄부터는 창가석”은 모순이 아니라 각자의 구간 안에서 모두 참인 두 개의 사실입니다. 이 경우 어느 쪽도 폐기하지 않고 둘 다 보존하며, 조회 시점에 따라 해당 구간의 값이 선택됩니다. 겹치는 경우에만 다음 단계로 진행합니다.
구간이 겹친다면 출처를 봅니다. 직접성은 세 등급입니다. 1등급은 회원 본인의 발화, 2등급은 담당자의 기록, 3등급은 시스템의 추론입니다. 등급이 다르면 더 직접적인 출처가 우선하며, 관측이 더 최근이라는 이유만으로 추론이 본인의 발화를 덮지 않습니다. 밀려난 쪽은 폐기되지 않고 근거로 부착되어, 같은 방향의 관측이 반복되면 재검토 신호로 누적됩니다. 등급이 같으면 다음 단계로 진행합니다.
직접성이 같다면 최신 관측이 우선합니다. 최근성이 결정권을 갖는 것은 이 단계에 이르러서입니다. 채택된 사실이 승계되고, 이전 사실의 유효 구간은 새 사실의 관측 시점에서 닫힙니다. 다만 최신 관측의 확신도가 추정 등급에 머무는데 이전 사실이 확정 등급이라면, 최신이라는 이유만으로 우선권을 갖지 못하고 다음 단계로 넘어갑니다.
네 단계로도 결정되지 않는 경우가 있습니다. 같은 통화 안에서 같은 등급의 상반된 발화가 나온 경우가 그렇습니다. 이때 절차는 임의로 고르지 않습니다. 두 사실을 모두 미결로 두고, 다음 접점을 준비하는 담당자에게 확인 항목으로 전달합니다. 확인 이전까지 어느 쪽도 응답에 단정적으로 실리지 않으며, “확인이 필요한 항목”으로만 표시됩니다. 자동으로 고른 절반의 오답보다, 담당자가 한 문장으로 확인할 수 있는 미결이 낫습니다.
좌우로 밀어 절차 전체를 확인하실 수 있습니다.
아래는 절차의 동작을 설명하기 위해 구성한 가상의 사례입니다. 실제 기록이 아닙니다.
| 속성 | 사실 A | 사실 B |
|---|---|---|
| 주체 | 회원 A · 본인 | 회원 A · 본인 |
| 술어 | 좌석 선호 | 좌석 선호 |
| 값 | 창가 | 통로 |
| 출처 | 상담 통화 녹취 · 회원 본인의 발화 | 탑승 영상 · 착석 위치로부터의 추론 |
| 관측 시점 | 2025-11-04 | 2026-02-17 |
| 유효 구간 | 2025-11-04 — (열림) | 2026-02-17 — (열림) |
| 확신도 | 확정 | 추정 |
| 안정성 등급 | 완만 | 완만 |
| 출처 직접성 (파생) | 1등급 — 본인 발화 | 3등급 — 시스템 추론 |
출처 직접성은 저장되는 필드가 아니라 출처 필드에서 규칙으로 파생되는 값입니다. 같은 출처는 언제나 같은 등급으로 읽히며, 등급 자체를 사람이 사실마다 매기지 않습니다.
두 사실은 같은 술어에 다른 값을 갖고 있으며, 늦게 들어온 쪽이 반대의 값을 말합니다. 유사도만으로 판정한다면 두 문장은 나란히 회수되고, 최근성만으로 판정한다면 B가 이깁니다. 절차는 다르게 답합니다.
안정성 등급. 좌석 선호는 완만 등급입니다. 바뀔 수 있는 취향이지만 자주 바뀌지는 않습니다. 고정 등급이 아니므로 절차는 멈추지 않고 다음으로 넘어갑니다.
유효 구간. A의 구간은 2025-11-04부터 열려 있고 아직 닫히지 않았습니다. B의 구간은 2026-02-17부터입니다. 2026-02-17 이후 두 구간이 겹칩니다. 진짜 충돌입니다.
출처의 직접성. A는 회원 본인의 발화(1등급), B는 관측으로부터의 추론(3등급)입니다. 등급이 다르므로 여기서 결론이 납니다. A가 유지됩니다. B는 폐기되지 않고 A에 관측 근거로 부착되어, 같은 방향의 관측이 반복되면 재검토 신호로 누적됩니다.
결론 — 승계 없음. 좌석 선호는 여전히 “창가”입니다. 더 최근의 관측이 존재함에도 그렇습니다. 회원이 그날 통로석에 앉은 데에는 동반자 배치나 기내 구성 같은 다른 이유가 있을 수 있고, 시스템은 그 이유를 알지 못합니다. 모르는 것을 근거로 회원이 직접 말한 것을 덮지 않는다는 것이 이 단계의 원칙입니다.
2026-03-02 상담 통화에서 회원이 직접 말합니다. “요즘은 통로가 편합니다.” 사실 C — 술어 좌석 선호, 값 통로, 출처 회원 본인의 발화(1등급), 관측 시점 2026-03-02. 이제 A와 C를 같은 절차에 태웁니다.
완만 등급 — 통과.
A의 구간은 열려 있고 C는 2026-03-02부터입니다. 겹칩니다 — 통과.
A도 C도 회원 본인의 발화입니다. 직접성 등급이 같습니다 — 통과.
관측 시점. 두 사실 모두 확신도가 확정 등급이므로 확신도는 개입하지 않습니다. C가 더 최근입니다 — 여기서 결론이 납니다.
결론 — C가 승계합니다. A의 유효 구간은 2026-03-02에 닫히고, A는 삭제되지 않은 채 이력으로 남습니다. 앞서 A에 부착되어 있던 B의 관측은 이 변화의 정황으로 함께 보존됩니다. 같은 두 값 “창가”와 “통로”가, 출처가 달라졌다는 이유만으로 정반대의 판정을 받은 것입니다. 절차가 재는 것은 값이 아니라 값의 근거이기 때문입니다.
판별이 끝까지 되지 않는 경우도 같은 절차 위에 놓입니다. 회원이 한 번의 통화 안에서 “창가가 좋습니다”와 “이번에는 통로로 하겠습니다”를 함께 말했다면, 주체도 술어도 직접성도 확신도도 같고 관측 시점마저 같습니다.
네 단계가 모두 판별에 실패합니다. 두 값을 미결로 두고, 다음 접점을 준비하는 담당자에게 확인 항목으로 넘깁니다. 그때까지 어느 값도 응답에 단정적으로 실리지 않습니다.
새 사실이 채택되면 이전 사실은 지워지지 않습니다. 유효 구간의 종료 시점이 기록되고, 사실 자체는 이력으로 남습니다. 현재 값을 묻는 조회에는 열려 있는 구간만 응답하므로 이력은 일상적인 응대에 끼어들지 않습니다. 삭제 대신 승계를 택한 데에는 두 가지 이유가 있습니다.
자동 판정은 틀릴 수 있습니다. 앞의 절차는 근거를 갖고 결론을 내지만, 근거 자체가 잘못된 입력에서 왔다면 결론도 잘못됩니다. 삭제된 사실은 되돌릴 방법이 없지만, 닫힌 구간은 다시 열 수 있습니다. 잘못 밀려난 사실의 복원은 구간의 종료 시점을 거두는 것으로 끝나며, 그동안의 판정 기록도 함께 남아 무엇이 어디서 어긋났는지 추적할 수 있습니다. 되돌릴 수 없는 연산을 자동 절차에 맡기지 않는다는 것이 설계의 전제입니다.
“창가에서 통로로 바뀌었다”는 사실은 현재 값 “통로”가 담지 못하는 것을 담습니다. 선호가 언제, 어떤 계기로 바뀌었는지는 다음 응대의 재료입니다. 3년간 흔들림 없이 유지된 선호와 지난달에 처음 언급된 선호는 같은 무게로 다루어져서는 안 되며, 그 구분은 이력이 남아 있을 때에만 가능합니다. 과거 여정을 돌아보는 질의 역시 그 시점에 유효했던 사실로 답해야 합니다. 현재 값으로 과거를 답하면 그것은 기록이 아니라 왜곡입니다.
이력을 남기는 이상 저장량은 단조 증가합니다. 이 비용은 그대로 인정합니다. 다만 이력은 기본 조회 경로에서 제외되므로 응답의 품질이나 길이에는 영향을 주지 않으며, 이력이 필요한 경우는 복원, 감사, 변화 추적 세 가지로 한정됩니다. 늘어나는 것은 저장 공간이고, 지켜지는 것은 되돌릴 수 있다는 성질입니다. 이 교환은 의도한 것입니다.
승계로 닫히는 사실과 달리, 처음부터 종료 시점이 정해진 사실이 있습니다. 여권과 비자, 기한이 정해진 동의, 시즌이 있는 협약이 그렇습니다. 이런 사실은 유효 구간의 끝이 미리 기록되며, 그 시점이 가까워지면 값이 사라지는 대신 확인이 필요한 항목으로 표시되어 담당자의 준비 목록에 오릅니다. 만료를 침묵으로 처리하지 않는 것이 원칙입니다.
위의 설계는 가정 위에 서 있습니다. 가정이 맞는지는 도입 이전에 알 수 없으므로, 운영과 함께 측정할 항목과 판독 기준을 미리 정해 두었습니다. 아래는 도입 시점부터 수집하기로 한 지표와, 그 값을 어떻게 읽고 무엇을 조정할지에 대한 정의입니다.
| 측정 대상 | 수집 방법 | 판독과 조정 |
|---|---|---|
| 판정 타당성 | 절차가 자동으로 내린 판정을 담당자가 사후에 검토하고 동의·이견을 표시합니다. | 이견이 발생한 단계를 01~04로 나누어 집계합니다. 특정 단계에 이견이 몰리면 그 단계의 조건을 다시 씁니다. |
| 단계별 보류율 | 충돌이 01단계에서 멈춘 것인지 05단계까지 내려온 것인지를 나누어 집계합니다. | 양방향 지표입니다. 지나치게 낮으면 절차가 과신하고 있다는 뜻이고, 지나치게 높으면 담당자에게 부담을 넘기고 있다는 뜻입니다. 두 방향 모두 조정 대상입니다. |
| 필수 사실 누락 | 안전·규정 관련 고정 등급 사실이 응답에 실리지 않은 사례를 전수로 검출합니다. | 목표값은 0입니다. 한 건이라도 발생하면 개별 사후 분석 대상이며, 병합 규칙 자체를 재검토합니다. |
| 회수 충분성 | 담당자가 응답을 받은 뒤 원본 기록을 직접 다시 찾아본 횟수를 기록합니다. | 회수가 충분했다면 일어나지 않을 행동이므로 대리 지표로 사용합니다. 반복되는 질의 유형은 조회 계층의 판별 규칙에 반영합니다. |
| 승계 복원 | 닫힌 유효 구간이 다시 열린 사례와 그 원인을 기록합니다. | 복원이 잦다는 것은 승계 조건이 느슨하다는 신호입니다. 원인이 특정 출처에 몰리면 해당 출처의 직접성 등급을 재검토합니다. |
어떤 값이 나올지는 지금 말할 수 없습니다. 말할 수 있는 것은 무엇을 재고, 어느 방향으로 벗어나면 무엇을 고칠지가 설계 단계에서 이미 정해져 있다는 사실입니다. 정합성은 한 번 맞추고 끝나는 성질이 아니라, 계속 맞춰 나가는 성질이기 때문입니다.
Context Hub가 여정을 거듭할수록 두터워진다는 것은 이 시스템의 핵심 주장이며, 그 주장은 하나의 절차에 걸려 있습니다. 여정이 끝난 뒤 실제로 제공된 것과 준비되어 있던 것의 차이를 회수하고, 그 차이를 해석한 다음에만 컨텍스트에 반영하는 절차입니다. 이 절은 그 절차와, 절차가 그렇게 나뉜 이유를 기술합니다.
여정이 종료되면 8단계 회수가 시작됩니다. 회수는 다섯 개의 절차로 이루어지며, 각 절차는 앞 절차가 남긴 판정 결과만을 입력으로 받습니다. 수집과 해석과 반영을 한 덩어리로 처리하지 않고 굳이 나눈 이유는 하나입니다. 한 덩어리로 처리하면 잘못 학습된 값이 어느 지점에서 들어왔는지 나중에 특정할 수 없고, 특정할 수 없는 오류는 되돌릴 수도 없습니다.
실제로 제공된 구성과 준비된 구성의 차이를 수집합니다. 회수의 입력은 여정 기록 전체가 아니라 차이입니다. 준비 시점에 확정되어 있던 항목별 값과 여정이 끝난 시점에 실제로 제공된 값을 대조하여, 어긋난 항목만 다음 절차로 넘깁니다.
일치한 항목은 판정 대상에서 빠지지만 버려지지는 않습니다. 기존 사실을 한 번 더 확인해 준 근거로 기록되며, 이 확인 기록이 뒤의 승격 심사에서 재료가 됩니다. 아무 일도 일어나지 않은 항목이야말로 가장 신뢰할 만한 항목이기 때문입니다.
차이가 회원의 선호 변화인지, 그날에만 성립한 일회성 상황인지, 준비의 실패인지 구분합니다. 이 구분이 회수 전체에서 가장 어려운 부분입니다. 세 경우가 남기는 관찰이 서로 구별되지 않기 때문입니다.
기내 온도가 준비값과 다르게 유지되었다고 합시다. 회원의 기준이 바뀐 것일 수도 있고, 그날 동반한 가족 때문일 수도 있으며, 준비 지시가 현장에 전달되지 않은 것일 수도 있습니다. 세 경우 모두 기록에 남는 것은 같은 한 줄입니다. 관찰만 보아서는 판정할 수 없다는 뜻이며, 그래서 판정은 관찰 하나가 아니라 관찰의 주변을 봅니다.
차이가 발생한 조건(동반자, 목적지, 계절, 시간대), 같은 조건에서의 과거 이력, 차이가 회원의 요청에서 비롯되었는지 현장의 판단에서 비롯되었는지의 출처, 그리고 같은 항목에 남아 있는 상충 기록을 함께 봅니다. 그러고도 근거가 부족하면 판정하지 않고 보류로 남깁니다. 보류는 실패가 아니라 이 단계의 기본 동작입니다.
한 번의 예외를 선호 변화로 오인해 기본값으로 올리면, 그 기본값은 다음 여정의 준비를 어긋나게 만듭니다. 어긋난 준비는 다시 차이로 수집되고, 그 차이가 또 한 번의 잘못된 판정을 부릅니다. 오염은 스스로 증폭되며, 어느 시점의 어느 판정이 시작이었는지 사람이 되짚기 전까지 멈추지 않습니다. 회수를 다섯 단계로 나누고 마지막을 감사 기록으로 닫는 이유가 여기에 있습니다.
선호 변화로 판정된 것만 컨텍스트의 지속되는 사실을 바꿉니다. 일회성으로 판정된 차이는 그 여정에만 유효한 사실로 기록되어, 여정이 끝나면 유효 구간이 닫히고 다음 여정으로 승계되지 않습니다. 준비 실패로 판정된 차이는 회원에 관한 사실이 아니므로 운영 항목으로 분류되어 해당 준비 절차로 회송됩니다.
세 갈래를 같은 저장소에 두되 다른 수명으로 관리하는 것이 설계의 요지입니다. 일회성 차이를 지워 버리면 나중에 같은 상황이 반복되었을 때 그것이 반복이라는 사실을 알 수 없고, 지속되는 사실과 같이 다루면 다음 준비가 즉시 어긋납니다.
반복 확인된 사실이 다음 여정의 기본값으로 승격됩니다. 사실로 등록되었다고 해서 곧바로 준비의 기본값이 되지는 않습니다. 사실은 시스템이 ‘알고 있는 것’이고 기본값은 ‘묻지 않고 실행하는 것’이므로, 둘 사이에는 별도의 심사가 놓입니다.
이 구분이 없으면 한 번 관찰된 값이 곧장 다음 여정의 실행 지시가 되고, 그때부터 오류는 내부가 아니라 회원 앞에서 발생합니다. 심사 기준은 아래 B에 정리했습니다.
무엇이 왜 바뀌었는지 남깁니다. 모든 판정과 승격에는 판정 시각, 근거가 된 관찰, 판정 주체(자동 또는 사람), 변경 전후의 값이 함께 기록됩니다. 승격되지 않은 판정과 보류도 같은 형식으로 남습니다.
이 기록이 있어야 잘못된 학습을 사후에 특정해 되돌릴 수 있고, 승격된 기본값이 이후 번복되었는지를 되짚어 승격 기준 자체를 조정할 수 있습니다. 감사 기록은 규정을 위한 부산물이 아니라 학습을 교정하는 유일한 입력입니다.
좌우로 밀어 n회차까지 보실 수 있습니다.
승격 심사는 네 가지를 함께 봅니다. 어느 하나도 단독으로 승격을 결정하지 않으며, 네 가지가 모두 충족될 때에만 사실이 기본값이 됩니다. 하나만으로 결정하도록 두면 그 하나를 우연히 만족시킨 관찰이 곧바로 실행 지시가 되기 때문입니다.
같은 조건에서 같은 값이 다시 확인되었는지를 봅니다. 한 여정 안에서 여러 번 확인된 것은 반복으로 세지 않습니다. 서로 다른 여정에서 거듭 나타난 것만 반복입니다.
그 항목이 본래 잘 변하는 항목인지를 봅니다. 등급은 04의 스키마에서 술어마다 미리 정해져 있으며, 등급에 따라 요구되는 임계가 달라집니다.
회원이 직접 말한 것인지, 현장에서 추론된 것인지를 봅니다. 직접 진술은 한 번으로도 근거가 되지만, 추론은 반복되지 않으면 근거가 되지 않습니다.
같은 항목에 반대되는 관찰이 남아 있는지를 봅니다. 해소되지 않은 상충이 하나라도 있으면 승격은 보류되며, 상충의 해소가 승격보다 먼저입니다.
임계는 항목마다 다릅니다. 같은 횟수로 반복된 관측이라도 좀처럼 변하지 않는 항목과 자주 변하는 항목에 같은 기준을 적용할 수는 없기 때문입니다. 승격 임계는 그 항목에 부여된 안정성 등급을 따릅니다.
| 안정성 등급 | 승격 임계 | 승격 이후의 취급 |
|---|---|---|
| 고정 | 반복 관측만으로는 승격되지 않습니다. 담당자의 확인을 거쳐야 기본값이 됩니다. | 문턱에서 이미 확인했으므로, 적용 시점에는 되묻지 않습니다. |
| 완만 | 서로 다른 여정에서 거듭 확인되면 사람의 개입 없이 승격됩니다. | 가장 최근 값이 기본값이 되고, 직전 값이 함께 표시됩니다. |
| 유동 | 반복을 기다리지 않습니다. 가장 최근 관측 하나로 갱신됩니다. | 관측이 오래되면 기본값 자격을 잃고, 준비 단계에서 다시 묻습니다. |
| 일회 | 승격 대상이 아닙니다. 심사 자체가 열리지 않습니다. | 여정이 끝나면 유효 구간이 닫히고 다음 여정으로 승계되지 않습니다. |
고정 등급에만 사람을 넣은 것은 자동화를 덜 신뢰해서가 아니라, 이 등급에서 오류의 비용이 비대칭이기 때문입니다. 확인 한 번의 비용은 담당자의 몇 분이지만, 식이 제한이나 서류상의 제약을 잘못 승격한 비용은 회원 앞에서 발생하며 되돌릴 수 없습니다. 반대로 유동 등급에서는 확인 절차가 응대를 느리게 만드는 쪽의 비용이 더 크므로, 자동 갱신을 택하고 틀리면 다음 여정에서 정정합니다. 같은 기준을 모든 항목에 적용하지 않는 것이 이 설계의 요점입니다.
알려진 한계 — 첫 여정에서 시스템이 기여할 수 있는 것은 제한적입니다. 승격을 뒷받침할 반복 관측이 없고, 대조할 준비 이력이 없으며, 판정의 근거가 될 과거 조건도 없습니다. 앞의 A와 B에서 기술한 절차는 모두 두 번째 관측부터 작동합니다. 이 한계는 설계로 없앨 수 있는 종류가 아니며, 다만 완화되고 짧아질 뿐입니다. 첫 여정의 정교함은 여전히 담당자의 몫입니다.
그렇다고 첫 여정에 시스템이 아무 일도 하지 않는 것은 아닙니다. 첫 여정에서 하는 일은 응대를 개선하는 일이 아니라, 두 번째 여정부터 개선이 가능해지도록 바닥을 까는 일입니다.
상담에서 오가는 정보는 어느 방식으로든 수집됩니다. 차이는 그것이 담당자의 메모로 남는지, 형식을 갖춘 사실로 남는지에 있습니다. 첫 상담에서 확인된 항목은 그 자리에서 값과 출처와 안정성 등급을 부여받아 저장되며, 이후 모든 대조의 기준선이 됩니다.
개인 이력이 없어도 준비가 비어 있지는 않습니다. 회원 구분과 서비스 종류에 따른 도메인 관례를 공통 기본값으로 삼아 시작합니다. 이 값은 회원에 관한 사실이 아니므로 컨텍스트에 사실로 등록되지 않으며, 첫 회수에서 가장 먼저 대조되는 대상이 됩니다.
첫 회수는 비어 있던 항목을 채우는 회수입니다. 구조상 이후의 어떤 회수보다 컨텍스트를 크게 바꿉니다. 두 번째 여정부터는 바뀌는 폭이 줄어드는 대신 판정이 정밀해집니다. 축적이 빠른 구간은 초반이고, 정확해지는 구간은 그 다음입니다.
선호는 바뀝니다. 어려운 것은 바뀌었다는 사실을 알아차리는 일이 아니라, 바뀐 것과 한 번 어긋난 것을 구분하는 일입니다. 2단계의 판정이 개별 차이 하나를 다룬다면, 드리프트 감지는 차이의 연속을 다룹니다. 같은 관찰이라도 홀로 있을 때와 줄지어 있을 때의 의미가 다르기 때문에, 판정을 두 층으로 나누어 두었습니다.
이 설계는 한쪽으로 치우친 오류를 의도적으로 감수합니다. 변화를 늦게 반영하는 쪽입니다. 잘못 반영해 회원이 정정을 요구하는 상황보다, 반영이 한 여정 늦어 담당자가 한 번 더 확인하는 상황이 회복 비용이 낮기 때문입니다. 앞의 오류는 회원이 직접 겪지만, 뒤의 오류는 운영 안에서 끝납니다. 두 오류를 같은 무게로 다루지 않는 것이 이 절 전체를 관통하는 원칙입니다.
축적을 자산으로 만드는 것은 쌓인 관찰의 양이 아니라,
무엇을 남기지 않을지에 대한 판정입니다.
회수의 품질은 도입 이후 감사 기록에서 산출됩니다. 승격된 기본값이 이후 번복된 비율, 보류가 해소되기까지 걸린 여정의 수, 고정 등급에서 발생한 확인 요청의 빈도, 그리고 준비 실패로 회송된 항목이 다시 나타난 비율이 관찰 대상입니다. 이 네 가지는 모두 감사 기록만으로 계산되며, 별도의 조사나 설문을 필요로 하지 않습니다. 이 문서가 제시하는 것은 산출의 방법이고, 값은 운영이 시작된 뒤에 나옵니다.
멤버십이 소개로 열리는 고객군에서는 고객끼리 서로를 알고 있을 수 있습니다. 한 고객의 사실이 다른 고객의 화면에 스치는 일은 이곳에서 단순한 결함이 아니라 관계의 종결입니다. 그래서 격리와 소유권은 마지막에 덧붙이는 절차가 아니라 저장 구조를 정하는 첫 결정이었습니다. 이 장에서는 그 결정과, 이 시스템이 아직 하지 못하는 일을 함께 적습니다.
한 고객의 컨텍스트는 공유 테이블에 조건을 걸어 구분한 행 묶음이 아니라, 그 고객만을 위한 별도의 저장소입니다. 사실도, 임베딩도, 조회 색인도 고객마다 따로 존재하며, 하나의 질의가 두 고객의 저장소에 동시에 닿는 경로는 설계상 만들어 두지 않았습니다.
이유는 실패의 성질이 다르기 때문입니다. 필터로 분리된 데이터는 필터가 실패하면 섞이지만, 저장소로 분리된 데이터는 그렇지 않습니다. 조건으로 나눈 경계는 질의문 한 줄, 조건 하나가 빠지는 순간 사라집니다. 경계가 코드 안에 있기 때문입니다. 저장소로 나눈 경계는 질의가 어떻게 잘못 쓰이든 그대로 남습니다. 경계가 데이터가 놓인 자리 자체에 있기 때문입니다.
대가는 분명합니다. 운영 복잡도가 올라갑니다. 저장소의 수가 고객 수를 따라 늘어나므로 생성·이전·백업·복구·상태 감시를 모두 다중 저장소 기준으로 설계해야 합니다. 구조를 한 번 바꾸려면 한 번의 변경이 아니라 전 저장소에 반복 적용되고 중간에 멈춰도 이어서 재개되는 절차가 필요합니다. 고객을 가로지르는 집계는 저장소를 직접 훑을 수 없으므로, 개인을 식별하는 사실이 들어가지 않는 별도의 집계 경로를 따로 만들어야 합니다.
그럼에도 이 교환을 택한 이유는 두 비용의 성질이 다르기 때문입니다. 운영 복잡도는 우리가 설계와 인력으로 감당할 수 있고, 감당한 만큼 줄어듭니다. 혼입은 한 번 일어나면 되돌릴 수 없고, 사후에 아무리 잘 대응해도 이미 일어난 일로 남습니다. 되돌릴 수 있는 비용을 늘려서 되돌릴 수 없는 비용을 구조에서 제거하는 것이 이 고객군에서는 옳은 선택입니다.
좌우로 밀어 전체 도표를 확인하실 수 있습니다.
축적된 컨텍스트는 VONAER의 자산입니다. FlowOS의 자산이 아닙니다. 시스템을 FlowOS가 설계하고 운영하더라도, 그 안에 쌓이는 고객 사실과 그 사실이 만들어낸 가치는 처음부터 끝까지 VONAER에 귀속됩니다. 이 원칙은 문장으로만 두면 지켜지지 않으므로, 세 가지 능력으로 구현합니다.
여기에는 정직하게 밝혀야 할 충돌이 있습니다. T05에서 설명한 이력 보존은 사실이 왜 지금의 값이 되었는지를 되짚기 위해 과거 값을 남깁니다. 삭제 요청은 그 과거 값까지 지우기를 요구합니다. 두 원칙은 같은 데이터를 두고 반대 방향을 가리키며, 어느 한쪽을 조용히 우회하는 구현은 결국 신뢰를 잃습니다. 이 시스템에서는 삭제가 우선합니다. 삭제 요청이 접수되면 이력은 보존 대상에서 제외되고 함께 제거됩니다. 남는 것은 삭제가 있었다는 사실과 그 시각뿐이며, 삭제된 내용은 어떤 형태로도 남지 않습니다. 되짚기는 시스템을 고치기 위한 편의이고, 삭제는 고객의 권리입니다. 편의가 권리를 이길 수 없습니다.
격리가 고객과 고객 사이의 경계라면, 접근 통제는 하나의 고객 안에서 그어지는 경계입니다. 사실마다 T03에서 정의한 권한 등급이 붙고, 접점마다 열람할 수 있는 등급의 범위가 정해집니다. 조회는 요청 시점에 세 가지를 함께 판정합니다. 누가 요청했는가, 어떤 접점에서 요청했는가, 무엇을 하기 위해 요청했는가. 세 가지가 모두 충족되어야 사실이 반환됩니다.
에이전트는 고객의 컨텍스트 전체를 받지 않습니다. 이번 접점이 자기 일을 끝내는 데 필요한 사실 묶음만 받습니다. 더 많이 주는 편이 성능에 유리해 보이는 경우에도 그렇게 하지 않습니다. 전달된 적 없는 사실은 잘못 쓰일 수도, 새어 나갈 수도 없기 때문입니다. 판정에 실패한 요청에는 사실 대신 권한 밖이라는 표시가 반환되며, 존재 자체를 감추어야 할 등급에는 그 표시조차 남기지 않습니다. 무엇이 있는지 모르게 하는 것과 볼 수 없게 하는 것은 다른 요구이고, 둘 다 필요합니다.
쓰기 권한은 읽기 권한과 별도로 관리됩니다. 어떤 사실을 읽을 수 있다는 것이 그 사실을 바꿀 수 있다는 뜻은 아닙니다. 아래는 최소 권한 원칙이 접점에서 어떤 모습이 되는지를 보여주는 설계 예시입니다.
객실 승무 · 케이터링
전달되는 사실
전달되지 않는 사실
의전 차량 · 이동 연결
전달되는 사실
전달되지 않는 사실
숙박 · 다이닝 수배
전달되는 사실
전달되지 않는 사실
위 구분은 설계 예시이며, 실제 등급표는 운영 정의 단계에서 VONAER의 접점 정의에 맞추어 함께 확정합니다. 원칙은 하나입니다. 접점이 자기 일을 끝내는 데 필요한 만큼만 전달합니다.
컨텍스트에 대한 모든 읽기와 쓰기는 기록됩니다. 예외는 없습니다. 기록은 시스템 바깥에서 확인할 수 있는 형태로 남으며, 시스템 자신이 지울 수 없습니다. 한 줄의 기록은 다음 다섯 가지를 담습니다.
감사 기록은 규정을 충족하기 위한 부속물이 아닙니다. 이 시스템이 교정 가능해지는 유일한 경로입니다. 틀린 기본값이 응대에 쓰인 것을 발견했을 때, 그 값이 어디에서 왔는지 되짚을 수 없다면 할 수 있는 일은 그 한 건을 손으로 고치는 것뿐입니다. 같은 원인에서 나온 다른 사실은 그대로 남고, 다음 여정에서 같은 방식으로 다시 틀립니다. 되짚을 수 있어야 원인을 고칠 수 있고, 원인을 고쳐야 같은 오류가 반복되지 않습니다.
이 시스템이 하지 못하는 일이 있습니다. 아래는 그 목록입니다. 운영을 시작하면 드러날 것이므로 먼저 적습니다. 각 한계에는 그 한계를 없애는 장치가 아니라, 한계가 실제 응대에 닿기 전에 붙잡거나 닿은 뒤에 되돌리기 위한 장치가 붙어 있습니다.
| 한계 | 안전장치 |
|---|---|
| 추출이 사실을 잘못 읽을 수 있습니다. 특히 구어체 통화와 맥락이 생략된 메시지에서, 농담과 요청이, 잠정과 확정이 구분되지 않습니다. | 모든 사실은 원본과 그 안의 위치를 함께 보관합니다. 뽑아내는 단계와 채택 여부를 정하는 단계를 분리해 서로 다른 에이전트가 맡습니다. 확신이 낮은 사실은 채택되지 않고 사람의 확인 경로로 넘어갑니다. |
| 오래된 사실이 잘못 적용될 수 있습니다. 선호는 바뀌고, 동행자는 바뀌고, 사정도 바뀝니다. 한때 맞았던 사실이 지금은 틀립니다. | 사실마다 안정성 등급과 유효 구간을 부여합니다. 자주 바뀌는 사실은 재확인 없이 자동 적용되지 않습니다. 새 입력이 기존 사실과 어긋나면 드리프트로 감지되어 재판정 대상이 되고, 그 사이에는 적용이 보류됩니다. |
| 첫 여정에서는 기여가 제한적입니다. 컨텍스트가 비어 있는 고객에게 이 시스템은 아직 아무것도 기억하지 못합니다. | 빈 상태에서 시작하지 않습니다. 서비스 라인별 도메인 기본값에서 출발하고, 첫 여정에서 오간 기록을 회수해 그 기본값을 그 고객의 값으로 빠르게 대체합니다. 기여가 낮은 구간임을 감추지 않고 담당자 화면에 표시합니다. |
| 시스템이 스스로 결정하면 위험한 영역이 있습니다. 안전, 운항 관련 판단, 금액, 그리고 고객의 관계에 관한 판단이 그렇습니다. | 읽기 권한과 쓰기 권한을 분리하고, 이 영역에는 쓰기 권한을 부여하지 않습니다. 시스템은 준비하고 제안하되 최종 결정은 사람이 내립니다. 이 경계는 운영 지침이 아니라 권한 구조로 고정되어, 지침을 잊어도 넘어갈 수 없습니다. |
| 컨텍스트가 늘수록 조회 정밀도가 떨어질 수 있습니다. 사실이 쌓이면 비슷한 사실도 함께 늘고, 필요한 하나를 고르기가 어려워집니다. | 등급이 높은 사실은 유사도와 무관하게 강제로 포함합니다. 조회 결과는 최신성과 안정성 등급을 반영한 재정렬 규칙을 거칩니다. 무엇이 왜 포함되었는지가 기록에 남으므로, 정밀도 저하는 추정이 아니라 관측 대상이 됩니다. |
이 표의 어느 행에도 해결되었다는 말은 없습니다. 안전장치는 한계를 없애지 못합니다. 한계가 드러났을 때 그것이 어디서 왔는지 알 수 있게 하고, 되돌릴 수 있게 하고, 같은 자리에서 다시 틀리지 않게 할 뿐입니다. 이 시스템에 대해 저희가 드릴 수 있는 약속은 틀리지 않는다는 것이 아니라, 틀린 것을 찾아낼 수 있고 고칠 수 있다는 것입니다.
어떤 시스템도 전부를 처음부터 만들지 않습니다. Context Hub 역시 누구나 확보할 수 있는 범용 계층 위에 놓여 있습니다. 이 장은 그 경계를 있는 그대로 적습니다. 전부가 저희의 것이라고 말하는 편이 유리해 보이지만, 그 말은 확인되는 순간 이 문서의 나머지 전부와 함께 신뢰를 잃습니다.
아래 두 목록은 같은 시스템의 두 계층입니다. 왼쪽은 시장에서 구할 수 있는 것이고, 오른쪽은 FlowOS가 설계하고 구현한 것입니다. 두 목록을 같은 크기로 나란히 둔 것은 의도한 것입니다. 왼쪽을 작게 그리면 이 문서는 정확하지 않게 됩니다.
누구나 확보할 수 있는 것
이 세 가지는 오늘의 표준이고, 몇 해 뒤에는 다른 형태로 불릴 것입니다. 저희는 이것들을 만들지 않았고, 만들 계획도 없습니다. 이 자리에서 경쟁하는 것은 이 시스템이 하려는 일이 아니기 때문입니다.
이 계층은 FlowOS의 것이 아니며, 대체 가능합니다.
이 문서가 장마다 설명해 온 것
이 계층은 FlowOS가 설계하고 구현해 보유합니다.
여기서 말하는 것은 시스템의 소유입니다. 운영 중 축적되는 컨텍스트는 VONAER의 것이며, 반출과 삭제와 이관의 조건은 07에서 정한 그대로입니다. 오른쪽 목록의 각 항목 옆 번호는 그 항목을 다룬 장을 가리킵니다.
범용 계층은 바꿀 수 있습니다. 연산 자원도, 언어 처리 능력도, 검색 기법도 더 나은 것으로 교체할 수 있고, 교체해도 오른쪽 목록은 그대로 남습니다. 스키마도, 추출과 판정의 분리도, 권한 경계도, 충돌 해소 절차도, 회수와 승격의 기준도 달라지지 않습니다. 반대 방향은 성립하지 않습니다. 범용 계층을 아무리 좋은 것으로 갖추어도 이 가운데 어느 것도 저절로 생기지 않습니다. 무엇을 저장할지, 무엇을 믿을지, 무엇을 누구에게 보일지는 범용 능력이 대답하는 질문이 아니기 때문입니다.
범용 계층을 교체해도 이 구조는 유지되며,
이 구조가 없으면 범용 계층만으로는 동작하지 않습니다.
오른쪽 목록이 저희의 것이라는 말과, 그것을 남이 쉽게 따라 만들 수 없다는 말은 다릅니다. 아래 세 가지는 두 번째에 대한 답이며, 어느 것도 특별한 비밀에 기대고 있지 않습니다. 세 가지 모두 시간과 실패로만 얻어지는 종류의 것입니다.
어려운 부분은 사실을 저장하는 일이 아니라, 무엇을 저장해야 하는지를 아는 일입니다. 04의 개체와 술어 목록은 일반적인 고객 관리 모델에서 옮겨 올 수 없습니다. 전용기와 헬리콥터와 리무진과 요트와 큐레이티드 경험이 하나의 여정 안에서 이어지는 형태를 겪어야, 어떤 항목이 반드시 있어야 하고 어떤 항목이 없으면 응대가 어긋나는지가 보입니다.
빠진 술어는 나중에 추가할 수 있습니다. 다만 빠졌다는 사실은 대개 한 번 어긋난 뒤에야 알게 됩니다. 목록의 길이가 자산이 아니라, 그 목록에 이르기까지 지불한 어긋남이 자산입니다.
05의 충돌 해소 절차와 필수 사실 강제 포함 규칙은 책상에서 먼저 완성된 것이 아닙니다. 어떤 충돌이 실제로 일어나는지는 겪어야 알 수 있습니다. 같은 선호가 두 경로로 서로 다르게 들어오는 상황, 농담이 요청으로 기록되는 상황, 한 번의 예외가 기본값으로 굳는 상황은 미리 목록으로 떠올려지지 않습니다. 규칙은 그런 일이 한 번 일어난 자리마다 하나씩 붙습니다.
그러므로 이 규칙 집합은 완결되어 있지 않습니다. 운영과 함께 계속 늘어날 것이며, 늘어난다는 사실 자체를 설계 전제로 두었습니다. 규칙은 처리 로직 안에 흩어 두지 않고 검토 가능한 하나의 목록으로 유지하며, 추가와 수정의 이력이 남습니다.
07의 격리와 감사 구조는 원칙에서 연역된 것이 아니라 운영에서 나왔습니다. 저장소를 고객 단위로 나누는 결정의 대가 — 생성과 이전, 백업과 복구, 상태 감시, 구조 변경을 전 저장소에 반복 적용하는 절차 — 는 설계 문서를 읽어서는 체감되지 않습니다. 그 대가를 먼저 알아야 어디에 경계를 그을지 결정할 수 있습니다.
이 대가의 목록은 여러 고객사의 제품을 하나의 기반 위에서 분리해 운영해 오는 동안 반복해서 마주친 것들입니다. 다음 절에 적은 실적은 그 운영의 기록이기도 합니다.
이 세 가지 가운데 어느 것도 영구적인 방벽은 아닙니다. 충분한 시간과 충분한 실패를 들이면 도달할 수 있는 자리입니다. 저희가 말씀드릴 수 있는 것은 그 시간과 실패가 이미 지불되었다는 점, 그리고 VONAER가 그것을 처음부터 다시 지불하지 않아도 된다는 점입니다.
설계가 옳다는 것과 그 설계를 실제로 만들어 운영 상태까지 끌고 갈 수 있다는 것은 서로 다른 문제입니다. 아래는 두 번째에 대한 근거입니다.
좌우로 밀어 표 전체를 확인하실 수 있습니다.
| 구축 | 다루는 대상 | 이 설계와 닿는 문제 | 참조 |
|---|---|---|---|
| LG AI Video Studio | 영상 자산 관리 | 비정형 영상 자산을 나중에 찾을 수 있는 형태로 정리하는 문제 | 02 · 04 |
| Samsung MX GEO Validation | 최적화 검증 | 산출물이 기준을 충족하는지 자동으로 판정하는 문제 | 02 · 05 |
| Cheil Deck Intelligence | 캠페인 레퍼런스 검색 | 축적된 자료에서 지금 필요한 것만 꺼내는 문제 | 05 |
| PXG AI Fitter | 대화형 골프 클럽 피팅 | 대화에서 개인의 조건과 선호를 구조화된 값으로 옮기는 문제 | 02 · 04 |
| FantaScan | 브랜드 노출 추적 | 바깥에서 일어난 변화를 지속적으로 관측해 기록으로 남기는 문제 | 06 |
| Dongwha CPMS | 환자 모니터링 대시보드 | 민감한 개인 정보를 다루는 운영 화면을 설계하는 문제 | 07 |
여러 고객사의 제품을 하나의 기반 위에서 분리해 운영해 온 경험이 이 목록의 뒤에 있습니다. 07에서 기술한 고객 단위 격리와 감사 구조는 새로 떠올린 원칙이 아니라, 그 운영에서 확인된 것들을 항공 도메인의 요구에 맞추어 다시 설계한 것입니다. 분리 운영에서 무엇이 실제로 비용이 되는지를 아는 상태에서 경계를 그었다는 뜻입니다.
분명히 적어 둡니다. 위 목록의 어느 것도 Context Hub가 아닙니다. 이 목록이 뒷받침하는 것은 하나입니다 — 이런 성격의 시스템을 설계하고, 만들고, 운영 상태까지 끌고 가 본 팀이라는 점입니다. 지나온 구축이 앞으로 만들 시스템의 성능을 보증하지는 않습니다. 보증할 수 있는 것은 이 일이 이 팀에게 처음이 아니라는 사실뿐입니다.
04의 스키마와 06의 승계 기준은 항공 운항 지식에서 나온 것이 아니라, 0.1% 고객을 실제로 응대해 온 자리에서 나왔습니다. FlowOS 공동창업자가 설립한 Hyangsoo는 한국의 0.1% 고객을 응대해 온 컨시어지이며, 무엇이 기억되어야 하고 무엇이 다음 여정으로 이어져야 하는지에 대한 판단은 그 응대의 경험에서 옮겨 왔습니다.
이 장의 논거가 이 사실 하나에 기대고 있지는 않습니다. 다만 앞의 세 절이 어떻게 가능했는지를 설명하는 자리에 이 사실이 있습니다.
이 장은 두 가지를 다룹니다. 하나는 VONAER가 이미 공표한 약속들이 지식이 놓이는 자리에 대해 무엇을 구조적으로 요구하는가이고, 다른 하나는 그 요구가 충족되었는지를 무엇으로 확인할 것인가입니다. 앞의 절반은 공개된 사실에서 도출되었고, 뒤의 절반은 아직 측정되지 않았습니다. 그래서 뒤의 절반은 결과가 아니라 측정의 설계로 적었습니다.
이 절의 근거는 전부 VONAER가 스스로 공개한 문장입니다. 저희의 관찰이나 추정은 들어가지 않았습니다. 공개된 약속에서 출발해, 그 약속이 지식 시스템에 무엇을 요구하는지까지만 따라갑니다.
VONAER는 서비스 설명과 멤버십 안내에서 네 가지를 공표하고 있습니다. 문의에 대한 응답은 한 시간 이내에 이루어지고, 운영은 "24 Hours, 365 days" 이어지며, VON Privé 회원에게는 "Guaranteed lift, twenty-four hours"와 "A single dedicated concierge"가 제공됩니다. 여기에 여덟 갈래의 서비스 라인과 세 단계의 멤버십 등급이 더해집니다.
이 약속들이 만들어내는 상태 공간의 크기는 T01에서 이미 셈하였으므로 되풀이하지 않습니다. 여기에서 보려는 것은 크기가 아니라 방향입니다. 네 약속은 서로 다른 것을 말하고 있지만, 지식이 어디에 놓여야 하는가에 대해서는 모두 같은 방향의 요구를 만듭니다. 아래 표의 두 번째 열이 그 요구이고, 세 번째 열은 그 요구를 사람의 기억과 인수인계만으로 충족할 때 부하가 걸리는 자리입니다.
세 번째 열은 VONAER의 현재 운영에 대한 관찰이 아닙니다. 저희는 VONAER 내부의 운영을 알지 못하며, 알지 못하는 것에 대해서는 적지 않습니다. 이 열은 어떤 조직이든 위의 약속들을 사람만으로 지탱할 때 구조적으로 발생하는 부하이고, 숙련된 인력일수록 그 부하를 더 잘 흡수한다는 점까지 포함해 사실입니다. 흡수되고 있다는 것과 부하가 없다는 것은 다릅니다.
표는 좌우로 밀어 보실 수 있습니다.
| 공개된 약속 | 그 약속이 요구하는 것 | 사람만으로 지탱할 때의 부하 |
|---|---|---|
| 1시간 내 응답 | 문의가 열리는 순간에 그 회원의 맥락이 이미 정리되어 있어야 합니다. 지난 기록을 되짚는 시간은 약속된 한 시간 안에 포함되며, 따로 주어지지 않습니다. | 응답의 품질이 그 시각에 응대하는 사람의 기억과 재직 여부에 의존하게 됩니다. 기억이 닿지 않으면 남는 선택지는 회원에게 되묻는 것이고, 되묻는 순간 관계가 얼마나 이어져 있었는지가 함께 드러납니다. |
| 24시간 365일 운영 | 맥락은 근무 시간이 아니라 시각과 무관하게 같은 상태로 조회될 수 있어야 합니다. 새벽 두 시의 맥락과 오후 두 시의 맥락이 같아야 합니다. | 교대마다 인수인계가 필요하고, 인수인계에 담기지 않은 것은 그 교대 동안 존재하지 않습니다. 인수인계 문서의 정밀도가 곧 야간 응대의 상한이 됩니다. |
| "Guaranteed lift, twenty-four hours" | 확정을 기다리지 않고 준비가 먼저 진행되어야 하며, 그 진행은 야간과 휴일에도 멈추지 않아야 합니다. 준비는 요청 이후가 아니라 요청과 동시에 시작됩니다. | 준비의 착수 시각이 담당자의 근무 시작 시각에 묶입니다. 이를 풀려면 대기 인력을 두어야 하고, 대기 인력을 두면 맥락이 넘어가야 할 지점이 하나 더 늘어납니다. |
| "A single dedicated concierge" | 한 사람이 그 회원의 모든 접점을 동시에 알고 있어야 합니다. 기재 선호, 캐빈 구성, 숙박, 다이닝, 가족 여정, 웰니스가 한 사람의 머릿속에서 하나로 이어져야 합니다. | 서비스별로 담당을 나누어 부하를 줄이는 가장 자연스러운 방법이 약속 자체에 의해 닫힙니다. 그리고 그 한 사람의 부재가 그 회원에 대한 서비스의 부재와 같아집니다. |
| 8개 서비스 라인 · 3개 멤버십 등급 | 등급마다 기준선이 다른 응대를 여덟 갈래 전부에 대해 유지해야 하며, 접점이 하나 늘 때마다 유지 대상은 더해지는 것이 아니라 곱해집니다. | 한 사람이 균일한 밀도로 담아 둘 수 있는 크기를 넘어섭니다. 실제로는 최근에 다룬 조합이 진해지고 오래 다루지 않은 조합이 옅어지는 방식으로 편차가 생깁니다. |
첫 번째 열의 문장은 VONAER의 공개된 서비스 설명과 멤버십 안내에 있는 그대로입니다. 두 번째 열과 세 번째 열은 그 문장에서 논리적으로 도출한 것이며, 측정된 값이 아닙니다.
네 약속 가운데 과한 것은 하나도 없습니다. 각각은 이 시장에서 합당한 수준이며, 공표되어 있다는 것은 이미 지탱되고 있다는 뜻입니다. 구조적인 어려움은 개별 약속이 아니라 네 가지가 동시에, 그리고 계속 참이어야 한다는 데 있습니다. 게다가 이 넷은 서로의 완화책을 닫습니다. 단일 창구라는 약속은 상태 공간을 담당자별로 나누는 방법을 닫고, 상시 운영이라는 약속은 그 하나의 창구를 여러 사람이 번갈아 맡게 하며, 한 시간의 응답 창은 그 교대 사이에서 되짚을 시간을 남기지 않습니다. 하나를 사람으로 흡수하면 그만큼이 다른 하나에 얹힙니다.
그러므로 필요한 것은 더 나은 인수인계가 아니라, 인수인계에 의존하지 않는 자리입니다. 사람이 기억을 서로에게 옮기는 대신 사람 바깥에 놓인 하나의 맥락을 함께 참조할 때, 위의 네 요구는 비로소 서로를 밀어내지 않게 됩니다. Context Hub가 하는 일은 담당자를 대체하는 것이 아니라 담당자의 기억이 놓일 자리를 하나 더 만드는 것입니다. 판단은 그대로 사람에게 남습니다.
VONAER는 2027년부터 eVTOL을 서비스에 포함한다고 공개했습니다. 기술적으로 보면 이것은 서비스 라인 하나가 늘어나는 일이 아니라 접점의 묶음이 하나 추가되는 일입니다. 새 접점에서는 지금까지 관측되지 않던 종류의 사실이 발생하고, 그 사실은 어딘가에 담겨야 하며, 기존 접점의 사실과 어긋날 때 무엇을 우선할지 판정되어야 하고, 여정이 끝난 뒤 다시 회수되어야 합니다. 접점을 늘린다는 것은 이 네 가지를 새로 마련한다는 뜻입니다.
컨텍스트 구조가 없는 상태에서 그 시점을 맞으면, 새 접점에서 오간 대화는 다시 담당자의 기억과 대화 기록에 쌓입니다. 그리고 그 축적은 처음부터 시작합니다. 기존 회원이라 하더라도 새 접점에서는 아직 아무것도 알려져 있지 않은 사람이 됩니다.
구조가 이미 있는 상태에서 그 시점을 맞으면, 도입은 확장이 됩니다. 스키마에 접점 하나와 사실 유형 몇 개를 추가하고 권한 등급표에 그 접점의 행을 더하는 일로 끝나며, 기존 회원의 컨텍스트는 그대로 새 접점에 서빙됩니다. 첫 비행에서 이미 그 회원이 알려져 있습니다.
시점이 중요한 이유는 컨텍스트가 시간을 들여야만 쌓이는 자산이기 때문입니다. 2027년에 시작하면 2027년의 빈 컨텍스트에서 시작하고, 지금 시작하면 2027년에는 그때까지 쌓인 컨텍스트 위에서 시작합니다. 그리고 이 차이는 나중에 더 많은 노력을 들여 메울 수 있는 종류가 아닙니다. 지나간 접점에서 관측되지 않은 사실은 소급해서 관측되지 않기 때문입니다.
도표는 좌우로 밀어 보실 수 있습니다.
이 문서에는 성능에 관한 수치가 하나도 없습니다. 아직 측정되지 않았기 때문입니다. 이 절은 결과 대신 측정의 설계를 적습니다. 무엇을 지표로 삼을지, 각 지표를 어떻게 정의할지, 무엇과 비교할지, 그리고 각 단계를 언제 끝난 것으로 볼지입니다.
측정의 정의를 도입 이전에 확정하는 데에는 이유가 있습니다. 운영이 시작된 뒤에 정해지는 지표는 이미 나온 결과를 설명하기 좋은 쪽으로 정해집니다. 그래서 지표의 정의와 기준선의 산출 방식은 첫 기록이 쌓이기 전에 문서로 고정합니다. 운영 중에 정의를 바꾸어야 할 사정이 생기면, 바뀐 정의로 과거 구간을 다시 집계해 두 결과를 함께 제시합니다. 정의를 바꾸는 것 자체는 문제가 아니지만, 바뀐 사실을 감춘 채 비교하는 것은 문제입니다.
표는 좌우로 밀어 보실 수 있습니다.
| 지표 | 정의 | 측정 방법 |
|---|---|---|
| 최초 응답까지의 시간 | 회원의 문의가 접수된 시각부터 담당자의 첫 실질 응답이 전달된 시각까지의 경과 시간입니다. 접수를 알리는 자동 회신은 응답으로 세지 않습니다. 답이 아니기 때문입니다. | 접수 기록과 발신 기록의 시각 차로 산출합니다. 평균이 아니라 분포로 봅니다. 접점별·시간대별로 나누어 집계하며, 특히 야간과 휴일 구간이 주간 평균에 묻히지 않도록 별도로 남깁니다. |
| 회원 재확인 횟수 | 이미 컨텍스트에 유효한 상태로 존재하는 사실을 회원에게 다시 묻는 횟수입니다. 여정 한 건을 단위로 셉니다. 새로 발생한 사실을 묻는 것은 재확인이 아닙니다. | 담당자 발신 가운데 질문 형태를 분류하고, 그 시점의 컨텍스트에 해당 사실이 유효하게 존재했는지 대조합니다. 존재했는데 물었다면 재확인으로 셉니다. 이 지표는 시스템의 성능이 아니라 회원이 느끼는 연속성을 대신합니다. |
| 준비 정확도 | 출발 전에 준비된 구성과 실제로 제공된 구성이 일치한 항목의 비율입니다. 좌석 구성, 케이터링, 지상 이동, 숙박 등 항목 단위로 셉니다. | 준비 시점의 구성 스냅샷과 여정 종료 후의 실제 제공 기록을 항목별로 대조합니다. 회원의 변심으로 인한 변경은 분모에서 제외하고 별도로 셉니다. 이 구분이 없으면 이 지표는 회원의 선택 변경을 시스템의 오류로 세게 됩니다. |
| 기본값 승격 후 유지율 | 컨텍스트에서 도출되어 기본값으로 승격된 값이, 이후 여정에서 사람의 수정 없이 그대로 사용된 비율입니다. 승격이 성급했는지를 되짚는 지표입니다. | 승격 기록과 이후 여정의 수정 기록을 대조합니다. 승격 직후의 첫 사용과 세 번째 사용을 나누어 봅니다. 수정은 실패가 아니라 회수 신호이므로 수정 사유도 함께 분류하며, 사유 분포가 승격 기준을 다시 조정하는 근거가 됩니다. |
| 보류율 | 에이전트가 스스로 판정하지 않고 사람의 확인으로 넘긴 요청의 비율입니다. 다섯 지표 가운데 이것만 방향이 다르며, 낮출수록 좋은 지표가 아닙니다. | 판정 기록에서 보류로 종료된 건의 비중으로 산출하고, 보류 사유의 유형별로 나누어 집계합니다. 단독으로 보지 않고 준비 정확도와 함께 봅니다. 아래에 그 이유를 적었습니다. |
보류율은 0에 가까울수록 좋은 지표가 아닙니다. 적정 구간이 존재하며, 지나치게 낮은 보류율은 성숙이 아니라 과신을 뜻합니다. 보류율이 높으면 시스템이 사람의 일을 아직 덜어 내지 못한 것이고, 보류율이 지나치게 낮으면 확신이 없어야 할 자리에서 확신을 냈다는 뜻입니다. 보류율 0은 시스템이 모든 것을 안다는 증거가 아니라, 모른다는 것을 인식하지 못한다는 증거입니다.
그래서 이 지표는 단독으로 읽지 않습니다. 보류율이 내려갈 때 준비 정확도가 함께 유지되면 판정 규칙이 실제로 정련된 것이고, 보류율이 내려가면서 준비 정확도가 떨어지면 과신이 시작된 것입니다. 두 지표는 반드시 같은 구간에서 나란히 놓고 봅니다.
적정 구간의 값은 미리 정할 수 없습니다. 회원군의 성격과 접점의 구성에 따라 달라지므로, 제한 운영 구간의 관측에 근거해 정합니다. 다만 도입 이전에 고정해 두는 것이 하나 있습니다. 보류율의 목표를 0으로 두지 않는다는 것입니다. 목표를 0으로 두는 순간, 시스템을 개선하는 가장 쉬운 방법은 판정 기준을 낮추는 것이 되기 때문입니다.
기준선은 같은 회원군의 도입 이전 기간으로 삼습니다. 각 회원은 다른 회원이 아니라 자신의 과거와 비교되고, 결과는 전체 평균이 아니라 회원별 변화의 분포로 보고합니다. 서로 다른 회원을 나누어 한쪽에만 적용하는 비교는 이 서비스에서 쓰지 않습니다. 이유는 셋입니다.
회원 내 비교에도 한계가 있고, 그 한계는 감추지 않고 설계로 다룹니다. 시간이 지나면 시스템과 무관하게 운영 자체가 나아질 수 있고, 계절과 여정의 성격도 달라집니다. 그래서 세 가지를 함께 적용합니다.
이 세 가지를 적용해도 시간에 따른 변화를 완전히 분리할 수는 없습니다. 따라서 보고서에는 관측된 변화와 함께, 그 변화 가운데 시스템에 귀속시킬 수 없는 부분이 무엇인지도 적습니다. 귀속시킬 수 없는 부분을 적지 않은 보고는 설명이 아니라 주장입니다.
단계는 셋입니다. 각 단계의 종료는 날짜가 아니라 조건으로 정의합니다. 조건이 충족되지 않은 채 다음 단계로 넘어가면, 앞 단계에서 정리되지 않은 것이 넓어진 범위 위에서 다시 나타나기 때문입니다. 아래 종료 조건은 모두 기록으로 확인할 수 있는 형태로 적혀 있습니다. 확인할 수 없는 조건은 조건이 아닙니다.
접점의 경계와 사실 유형을 확정하고, 권한 등급표를 VONAER의 실제 접점 정의에 맞추어 고정합니다. 이어서 기존 고객 기록을 컨텍스트로 이관합니다. 이 단계에서 확인해야 할 것은 스키마가 옳은가가 아니라, 스키마가 이미 있는 기록을 손실 없이 담을 수 있는가입니다.
좁은 회원군과 좁은 접점에서 실제 응대에 사용하며, 판정 규칙과 승격 기준을 관측에 따라 조정합니다. 이 단계의 목적은 성능을 끌어올리는 것이 아니라, 무엇이 왜 틀렸는지를 기록만으로 되짚을 수 있는 상태를 만드는 것입니다.
남은 접점과 등급으로 범위를 넓히고, 운영의 주체를 VONAER 측으로 옮깁니다. 기술적으로 이 단계의 핵심은 확대 자체가 아니라, 확대하는 절차가 반복 가능한 형태로 남는가입니다. 2027년의 접점 추가가 확장이 되려면 그 절차가 먼저 있어야 합니다.
이 문서는 구조를 기술합니다. 이 구조를 어떤 순서로, 어느 범위에서 도입할지는 제안서에서 다룹니다. 두 문서는 같은 하나를 서로 다른 각도에서 봅니다. 기술적으로 옳은 설계라도 도입의 순서가 맞지 않으면 자리 잡지 못하고, 도입의 계획이 잘 짜여 있어도 구조가 이 문제를 담지 못하면 계획대로 되지 않습니다.
제안서로 돌아가기