사용자 흐름 · 확장 후 — 회의 전 · 중 · 후
갱신일 2026-08-12 · 기준: 확장 개요 · 현재 판 사용자 흐름 · 공통 시나리오 S1~S7 이 문서가 갖는 것: 최종 목표 한 줄, 회의 전·중·후를 잇는 루프, 맥락 세 층의 설계, 그리고 두 달 안에 무엇부터 만드는가. 여기 없는 것: 화면 문구(IA) · 모듈과 파이프라인(AA) · 경계(SA) · 저장소 소유권(DA) · 스키마(ERD) · 그래프(온톨로지) · 게이트(실시간).
⚠︎ 이건 계획이지 현황이 아니다. 지금 서 있는 것은 현재 판이 갖는다.
1. 최종 목표 한 줄
회의가 끝나면 다음 회의가 준비돼 있다.
지금은 회의 하나가 그 안에서 닫힌다(현재 판 §5). 목표는 회의 후 산출물이 다음 회의의 입력이 되는 것이고, 그 사이를 사람이 손으로 옮기지 않는 것이다.
이 한 줄이 아래 전부를 강제한다.
| 목표가 요구하는 것 | 어디서 다루나 |
|---|---|
| 회의 밖에 사는 데이터가 있어야 한다 | 결정·액션 아이템 1급 객체화 → ERD §5 |
| 그 데이터가 회의를 가로질러 이어져야 한다 | 온톨로지 |
| 사람이 아는 것을 시스템에 넣을 자리가 있어야 한다 | 맥락 세 층 — §3 |
| 회의 전에 보여줄 화면이 있어야 한다 | §5 · IA |
| 산출물을 믿을 수 있어야 한다 | 근거 연결(APP-391) — 이게 없으면 나머지가 못 믿을 것 위에 선다 |
2. 루프 — 선이 원이 된다
원을 닫는 화살표는 G → BR 하나다. 나머지는 이미 있거나 만들기 쉬운데, 이 하나가 그래프와 근거 연결을 전제로 한다. 그래서 §8의 순서가 이렇게 나온다.
점선은 자동화하지 않는다. 프로젝트 맥락은 사람이 고쳐 쓴다 — 요약이 자기 스스로 프로젝트 맥락을 갱신하면 아무도 안 읽은 문장이 다음 회의 전체의 프롬프트에 들어가고, 오염이 조용히 누적된다(§7).
3. 맥락 세 층 — 사람이 아는 것을 넣는 자리
세 층으로 나누는 기준은 수명이다. 얼마나 자주 바뀌는가가 다르면 저장도 캐싱도 권한도 달라진다.
| 층 | 무엇을 담나 | 수명 | 누가 쓰나 | 상한(추정) |
|---|---|---|---|---|
| 워크스페이스 | 팀 용어·약어·고유명사. 민손 · PRO-1 · 사람 이름 표기 | 분기 단위로 바뀐다 | ADMIN | 2,000자 |
| 프로젝트 | 이 프로젝트가 무엇이고 지금 어디까지 왔나 | 주 단위 | MEMBER | 4,000자 |
| 회의 전 | 오늘 정할 것 · 참석자 역할 · 읽고 올 것 | 그 회의 1회 | 노트를 만든 사람 | 2,000자 |
워크스페이스 층만 ADMIN인 이유는 반경이다. 프로젝트 맥락은 그 프로젝트 회의에만 걸리지만 용어집은 워크스페이스의 모든 회의에 걸린다. 한 사람이 오타를 내면 전사 교정과 요약 표기가 통째로 흔들린다.
세 층 다 텍스트 하나다. 필드를 쪼개지 않는다 — 목표 · 배경 · 참석자 로 나누면 사용자가 칸을 채우려고 없는 말을 쓰고, 프롬프트에는 어차피 이어 붙여 들어간다.
저장은 한 테이블이다
scope 하나로 세 층을 다 받는다. 층마다 테이블을 파면 조립하는 코드가 세 벌이 된다.
| 테이블 | 갖는 것 |
|---|---|
contexts | (workspace_id, scope, scope_ref_id) 유니크 · 현재 본문 · current_revision_id |
context_revisions | append-only. 본문 · 쓴 사람 · 시각. 고치지 않고 쌓는다 |
note_contexts | 노트 하나가 회의 시작 때 얼린 revision 참조 최대 3행 |
context_revisions 를 append-only로 두는 이유는 감사다. 맥락이 요약 결과를 바꾸므로 「그때 이 회의는 무엇을 입력으로 받았나」에 답할 수 없으면 요약을 검증할 수 없다. 자리는 ERD가 갖는다.
4. 맥락은 회의 시작 시각에 얼린다
녹음 시작 시점의 revision 세 개를 note_contexts 에 박고 그 회의 내내 고정한다. 회의 도중이나 끝난 뒤에 프로젝트 맥락이 바뀌어도 그 회의의 입력은 안 바뀐다.
| 안 얼리면 | |
|---|---|
| 앞 20분과 뒤 25분의 입력이 갈린다 | 같은 회의의 실시간 카드 판정 기준이 중간에 달라진다 |
| 재분석이 다른 답을 낸다 | 사용자가 「다시 분석」을 누른 것뿐인데 요약이 바뀌고, 왜 바뀌었는지 답할 방법이 없다 |
| 감사가 성립하지 않는다 | 잘못된 요약의 원인이 프롬프트인지 맥락인지 못 가른다 |
AA §6의 기능 플래그와 같은 규칙이다 — 회의 시작 시 1회 평가, 회의 내내 고정. 새 장치가 아니라 이미 정한 규칙을 한 종류 더 태우는 것이다.
얼린 것과 현재 판이 다르면 화면이 말한다. 노트 요약 탭에 이 회의는 8월 5일자 프로젝트 맥락으로 정리했다 · 지금 맥락은 그 뒤에 바뀌었다 한 줄. 문구는 IA가 갖는다.
5. 회의 전 — 처음으로 화면이 생긴다
지금 회의 전은 제목 칸 하나다. 여기에 두 개가 붙는다.
| 무엇 | 어디서 오나 | 필수인가 |
|---|---|---|
| 회의 전 맥락 | 사람이 쓴다 | 아니다. 비워도 녹음이 시작된다 |
| 회의 전 브리핑 | 그래프 질의 — 지난 결정 · 밀린 액션 아이템 | 자동 |
| 프로젝트 맥락 | 이미 있는 것을 읽기 전용으로 | 자동 |
| 한도 사전 경고 | 사용량 — IA §11 | 남은 시간이 회의 길이보다 짧을 때만 |
회의 전 맥락을 필수로 만들지 않는다. 필수 칸은 「일단 아무거나」로 채워지고, 그 아무거나가 프롬프트에 들어가면 없느니만 못하다. 안 쓰면 두 층(워크스페이스·프로젝트)만 들어간다.
브리핑은 새 질의를 만들지 않는다. 온톨로지 §7의 노트 맥락 배너 질의를 회의 전 화면에서 한 번 더 부른다. 같은 질문이므로 같은 질의를 쓰고, 순회 상한도 그대로 받는다.
브리핑에서 안건으로는 사람이 옮긴다. 밀린 액션 아이템을 클릭하면 회의 전 맥락 칸에 텍스트로 들어간다 — 자동으로 안 넣는다. 옮긴 것이 곧 "오늘 다룬다"는 뜻이고, 안 옮긴 것은 오늘 안 다룬다는 뜻이다. 사람의 한 번 클릭이 그 판단을 대신할 수 없다.
6. 회의 중 — 새 개입 조건을 만들지 않는다
맥락은 회의 중에 새로 할 일을 만들지 않는다. 이미 있는 게이트의 정밀도만 올린다.
개입 조건은 C1~C3 세 개로 못 박혀 있고(도메인 모델) 이 문서는 그걸 안 늘린다. 조건을 늘리면 오탐이 늘고, 오탐 한 번이 기능 전체를 죽인다(IA §13 ④).
| 조건 | 맥락이 무엇을 바꾸나 |
|---|---|
| C1 결론 없이 종료 | 「결론」이 무엇인지를 회의 전 안건이 정의한다. 안건이 없으면 지금처럼 일반 판정 |
| C2 담당자·기한 미지정 | 워크스페이스 용어집의 사람 표기가 담당자 후보를 좁힌다 |
| C3 이전 결정 충돌 | 프로젝트 맥락이 벡터 게이트의 창 임베딩에 프리픽스로 붙어 유사도 판정이 프로젝트 안으로 좁아진다 |
회의 중에는 맥락을 못 고친다. §4가 얼렸기 때문이고, 그래야 카드 판정 기준이 회의 내내 하나다.
어휘 사전은 여전히 한국어 정규식이다. 용어집이 그 사전을 늘리지만 실시간 §4의 비한국어 재현율 0 문제는 그대로 남는다 — 맥락이 고치는 문제가 아니다.
7. 회의 후 — 맥락은 프리픽스로 들어가고 근거가 되지 않는다
프롬프트 어디에 붙나
안 바뀌는 것부터 앞에 놓는다. prompt caching은 접두사가 같아야 적중하므로 순서가 곧 원가다.
[워크스페이스 용어집] ← 분기 단위로 바뀐다. 워크스페이스의 모든 회의가 공유
[프로젝트 맥락] ← 주 단위. 그 프로젝트의 모든 회의가 공유
[회의 전 안건] ← 회의마다 다르다
[전사] ← 항상 다르다
| 소비자 | 어떻게 받나 | 새 경계인가 |
|---|---|---|
| 회의 후 요약·추출 | 분석 요청 payload에 전사와 함께 push | 아니다 — SA ⑥ 요청 본문에 필드가 는다 |
| 챗봇 | GET /internal/v1/notes/{noteId}/context 응답에 얹는다 | 아니다 — 경로 이름이 이미 이것이다 |
| 회의 중 게이트 | server가 이미 갖고 있다. 창에 프리픽스로 붙인다 | 아니다 |
새 내부 API를 만들지 않는다. 채팅 컨텍스트 pull 경로가 이미 있고 이름도 맞다. 여기에 필드를 얹는 것이 경로를 하나 더 파는 것보다 싸고, AA §2 규칙 1(web은 /internal/** 을 모른다)도 그대로 유지된다.
원가
세 층 합쳐 최대 8,000자다. 한국어 기준 4,000~6,000 토큰으로 잡는다(추정 — 재본 적 없다).
| 어디 | 몇 번 곱해지나 |
|---|---|
| 요약 | 섹션 3종이 병렬이라 회의당 3번 |
| 채팅 | 매 턴. 캐시 적중률이 여기서 결정적이다 |
| 회의 중 게이트 | 30초 틱 × LLM에 올라간 창 수 |
채팅이 제일 위험하다. 대화가 길어지면 프롬프트가 계속 커지는 문제가 이미 미확인으로 올라 있고(현재 판 AA §9), 맥락은 그 위에 고정 비용을 얹는다. 상한을 문자 수로 거는 이유가 이것이다 — 토큰으로 걸면 사용자가 쓸 때 몇 자까지인지 알 수 없다.
맥락은 근거가 아니다
요약 문장이 맥락에서 나왔으면 전사 근거를 달 수 없다. 회의에서 아무도 그 말을 안 했기 때문이다.
| 규칙 | 왜 |
|---|---|
맥락에서 나온 항목은 origin=context 로 표시한다 | evidence를 요구하지 않되 화면에 「회의에서 나온 말이 아니다」가 보인다 |
origin=context 인 항목은 그래프에 투영하지 않는다 | 그래프의 모든 사실에는 근거가 붙는다(온톨로지 §4). 근거 없는 노드를 넣는 순간 그 규칙이 죽는다 |
| 결정·액션 아이템을 맥락에서 만들지 않는다 | 안건에 적힌 「오늘 A를 정한다」가 결정 A 로 승격되면 안 정하고 끝난 회의도 정한 것이 된다 |
세 번째가 제일 중요하다. 맥락은 읽는 재료이지 추출 대상이 아니다.
회의가 끝나면 프로젝트 맥락에 후보가 뜬다
요약이 끝나면 프로젝트 맥락 화면에 이번 회의에서 이게 바뀐 것 같다 후보가 올라온다. 사람이 눌러야 본문에 들어간다.
| 버린 대안 | 왜 |
|---|---|
| 요약이 프로젝트 맥락을 자동 갱신 | 아무도 안 읽은 문장이 다음 회의 전체의 프롬프트에 들어간다. 한 번 오염되면 그 뒤 회의가 전부 오염되고, 그 요약이 다시 맥락으로 들어와 되먹임이 돈다 |
| 후보를 안 만들고 사람이 알아서 갱신 | 안 갱신된다. 맥락 문서가 낡는 것이 이 기능의 기본 실패 모드다 |
8. 무엇부터 하나 — 두 달
의존 순서가 우선순위를 정한다. 근거 연결이 없으면 산출물을 못 믿고, 못 믿는 산출물은 그래프에도 브리핑에도 못 올린다.
세 사람이고 저장소는 셋인데 server 와 web 이 한 사람이다(역할분담). 그 한 사람이 병목이므로 아래 순서는 그 사람의 시간 순서와 거의 같다.
| 주 | 무엇 | server | web | ai | 왜 지금 |
|---|---|---|---|---|---|
| 1–2 | 근거 연결 (APP-391) | 세그먼트 ID를 ai로 넘기고 evidence 영속화 | 근거 칩 · 전사 점프 | 인덱스 역변환 | 설계는 끝났다. 나머지 전부가 이 위에 선다 |
| 2–3 | ActionItem 1급 객체화 (F8-1) | 테이블 · 상태 전이 · 확정 권한 | 할 일 탭(S17) | 구조화 출력 | markdown 문자열인 동안은 프로젝트 단위로 모을 수 없다 |
| 3–5 | 맥락 세 층 | context 모듈 · 3테이블 · 시작 시 얼리기 | 입력 화면 셋 | 프리픽스 조립 · 캐싱 | §3~§7. 회의 전이 처음 생긴다 |
| 5–6 | 회의 전 화면 | 브리핑 질의(그래프 전에는 Postgres로) | 노트 생성 화면 개편 | — | 루프의 G → BR 을 그래프 없이 먼저 세운다 |
| 6–7 | 분석 완료 push · server→ai 인증 | STOMP 완료 이벤트 · X-Internal-Token 대칭 | 폴링 제거 | 헤더 검증 | 열려 있는 것 ②와 IA 미확인 ②. 둘 다 작고 오래 밀렸다 |
| 7–8 | Decision 시간축 설계 | 스키마 초안 | — | 추출 정확도 측정 | MVP 3. 여기서부터는 만들기 전에 재야 한다 |
두 달 안에 안 하는 것을 먼저 적는다. 화자 분리 · voice print · Neo4j · MCP · GPU는 확장 개요 §6의 1만 명 구간이다. 지금 사용자 수에서 그것들을 먼저 하면 맥락도 근거도 없는 위에 인프라를 얹는 것이 된다.
5–6주차가 갈림길이다. 브리핑을 Postgres 질의로 먼저 세우면 그래프 없이도 루프가 닫히고, 그 뒤에 그래프는 성능·표현력 문제로만 남는다. 그래프를 먼저 세우려 하면 두 달이 인프라로 끝난다.
9. 설계 전제
- 맥락은 원본이다. 사람이 쓴 것이라 재생성 경로가 없다.
heymoa에 살고 파생 저장소에 두지 않는다. - 맥락은 회의 시작 시각에 얼린다. 얼린 revision이 그 회의의 입력이고, 이후 어떤 재분석도 같은 입력을 쓴다.
- 맥락은 입력이지 사실이 아니다. 근거가 안 붙으므로 그래프에 안 들어가고 결정·액션 아이템으로 승격되지 않는다.
- 맥락은 개입 조건을 늘리지 않는다. C1~C3 정밀도만 올린다.
- 자동 갱신을 하지 않는다. 후보를 제시하고 사람이 누른다. 되먹임 오염이 이 기능의 유일한 치명적 실패 모드다.
- 새 경계를 만들지 않는다. 채팅 컨텍스트 pull 경로에 필드를 얹고, 분석은 payload에 얹고, 게이트는 server가 이미 가진 것을 쓴다.
- 순서는 신뢰가 정한다. 근거 → 구조화 → 맥락 → 회의 전 → 그래프. 뒤엣것을 먼저 해도 앞엣것에서 막힌다.
10. 미확인
| 무엇 | 지금 아는 것 | 무엇이 걸려 있나 |
|---|---|---|
| 맥락을 사람이 실제로 쓰나 | 모른다. 이 문서 전체가 「쓴다」에 걸려 있다 | 안 쓰면 §5 화면이 빈 칸으로 남고 후보 제시(§7)가 유일한 경로가 된다. 두 달 안에 재야 할 첫 번째 숫자 |
| 맥락 상한 2,000·4,000·2,000자 | 근거 없는 값이다 | 넘치는 사용자가 나오면 올리고, 아무도 500자를 안 넘기면 상한 자체가 필요 없다 |
| 한국어 토큰 환산 | 4,000~6,000 토큰은 추정 | §7 원가 표 전부. Langfuse 턴별 계측으로 바로 잰다 |
| 캐시 적중률 | 없다 | 채팅 매 턴 비용. 프리픽스 순서(§7)가 맞는지도 여기서 확인된다 |
| 회의 전 브리핑의 재현율 | 없다 | 밀린 액션 아이템을 놓치면 브리핑을 신뢰하지 않게 되고, 신뢰 안 하면 §5 화면을 안 본다 |
| 맥락이 요약 품질을 실제로 올리나 | 없다 | 골든셋 대조가 필요하다. 안 오르면 §8 3–5주차를 다시 판단한다 |
origin=context 항목의 화면 취급 | 규칙만 정했다(§7) | 아예 안 보이게 할지, 회색으로 보일지. IA가 정한다 |
| 회의 전 안건과 C1 판정의 결합 방식 | 방향만 정했다(§6) | 안건 문장을 게이트가 어떻게 파싱하나. 정규식인지 LLM인지가 원가를 가른다 |