본문으로 건너뛰기

사무실 기억 — 업무 유산(legacy) 의 디지털화

상태: Phase 0~1a 완료 · 자동 회상 V2 의미검색 통일 (ADR 0048, 2026-06-03) 날짜: 2026-04-19 (최종 갱신 2026-06-03) 선행 결정: ADR 0001 — Vision 과 Core Value · ADR 0015 — Tenant 격리 AI 학습 · ADR 0048 — 기억·판례 메뉴 재정의 + 자동 회상 통일 기술 식별자: /legacy 라우트, tenants/{tid}/legacyDocuments/* 컬렉션 (의미 재정립 후 유지)


한 줄 정의

사무실 기억 은 이 법률사무소가 직접 작성·처리해 온 서류의 비식별화 기록이며, 새 서류를 작성할 때 자동으로 참조되는 이 사무실 고유의 업무 유산(legacy) 이다.


무엇이 아닌가 — 오해 방지

혼동 대상차이
판례 라이브러리판례는 법원 공개 DB (대법원 종합법률정보·케이스노트 등) 영역. "사무실 기억" 은 이 사무실의 자체 작업물 — 세상 어느 DB 에도 없음
낡은 파일 아카이브 (legacy code 뉘앙스)영어 legacy 의 본의는 "유산(heritage)" — 남긴 것, 축적된 자산. 기술 업계의 "낡은 것" 과 정반대 방향
의뢰인 포털용 자료사무실 내부 자산. 의뢰인에게 직접 노출되지 않음
법률 도메인 "유산" (상속 사건)같은 한국어를 쓰지만 전혀 다름. UI 라벨에서는 이 혼동을 피하기 위해 "유산" 단독 표기를 쓰지 않고 "기억" 으로 통일

무엇인가 — 정체성 선언

  1. 고유 자산 — 각 사무실이 일해 온 방식의 결과물. 변호사 개인에게 붙어 있던 암묵지(Tacit Knowledge) 를 서류 단위로 디지털화한 것.
  2. 살아 있는 기억 — 종결된 사건의 시체안치소가 아니라, 새 사건 앞에서 "예전에 비슷한 거 있었지?" 할 때 자동으로 호출되는 능동적 자원.
  3. 재활용 루프의 절반 — "저장 → 비식별화 → 재활용" 세 단계가 하나의 고리. 재활용(문서 생성 시 참조) 이 없으면 저장의 의미가 죽는다.
  4. 전 사무소 활성 — ADR 0002(전 사용자 무료) 정합. tier 차별 없이 모든 사무소에서 활성화. legacyDocLimit 은 어뷰징 방어용 운영 상한일 뿐 기능 차별이 아니다.

3층 네이밍 규칙 (SSoT)

세 층이 서로 다른 언어로 같은 하나를 가리킨다. 드리프트 방지를 위해 이 표가 단일 출처(Single Source of Truth) 다.

언어예시원칙
UI 라벨한국어 인지 은유"사무실 기억", "비슷한 과거 기억", "기록 추가"인격화·은유. 변호사 인지 과정과 일치. 첫 화면에서 정체성이 드러남
기술 식별자영문 legacy/legacy, legacyDocuments, findRelatedMemoriesAction본의(유산) 로 재정의됨. 라우트·컬렉션 개명 안 함 (마이그레이션 비용 회피). 파일 상단 주석으로 재정의 명시
개념·설명한영 혼합 서사"이 사무실의 업무 유산(legacy) — 일해 온 방식의 결과물"부제·온보딩·빈 상태·마케팅 카피. 두 층을 의미론적으로 연결

라벨 매트릭스 (Phase 0 에서 적용)

위치BeforeAfter
사이드바 메뉴문서 아카이브사무실 기억
모바일 드로어문서 아카이브사무실 기억
페이지 H1문서 아카이브사무실 기억
페이지 부제(없음)"이 사무실이 일해 온 방식의 결과물 · 업무 유산(legacy)"
빈 상태 (전체 없음)아카이브된 문서가 없습니다아직 기억이 쌓이지 않았습니다
빈 상태 (필터/검색)해당 상태의 문서가 없습니다 / 검색 결과가 없습니다(유지)
상세 헤더 뒤로가기아카이브 목록사무실 기억
유사 문서 패널유사 판례비슷한 과거 기억
유사 문서 CTA판례 찾기 + AI 분석기억에서 찾기 + AI 분석
유사 문서 안내이 사건과 유사한 아카이브 문서를 찾고...이 사건과 비슷한 사무실 기억을 찾아 AI 가 유사점·차이점·활용 포인트를 분석합니다.
활동 로그문서 아카이브 완료 / 오류사무실 기억 추가 / 오류
업로드 버튼 (Phase 1)기록 추가 ← 행동 동사는 중립어

네이밍 원칙

  • 은유는 "보는 자리"(메뉴·타이틀·빈 상태·설명) 에. 변호사가 머물러 읽는 위치.
  • 중립 행동어는 "누르는 자리"(버튼·CTA·폼 액션) 에. "기억에 저장" 은 어색 → "기록 추가" / "저장".
  • 외래어 단독 노출 금지 (메뉴에 "레거시" 단독 배치는 한글 톤 파괴). legacy 는 부제·설명에서 의미 환기용으로만 등장.
  • 도메인 충돌 회피: "유산" 은 상속 사건과 혼동 → UI 단독 라벨 금지. 부제에서 "업무 유산(legacy)" 처럼 한정어와 함께만 허용.

데이터 흐름 — 재활용 루프

[종결 사건 자동 유입 (현재)]
cases/{id}.status = "closed"
→ onCaseClosedLegacyPipeline (functions/src/legacy-pipeline.ts)
→ 서류·증거 파일을 legacyDocuments 로 복사
→ OCR → PII 비식별화 → text-embedding-004 임베딩 생성 (V2, ADR 0015/0017)

[종이 스캔 수동 업로드 (Phase 1 신설)]
/legacy 업로드 UI → sourceType: "scanned" 로 적재
→ 기존 processFileForLegacy 파이프라인 재사용
→ 필수 메타: 의뢰인 + 사건유형 + 연도

[재활용 — 새 서류 작성 시 자동 참조]
/docs/generate → getRagContextForDocGenAction
→ findNearest 의미 검색 (Tenant RAG · text-embedding-004) 으로 사무실 기억 중 유사 스니펫 검색
→ Gemini 프롬프트에 주입
→ 생성된 서류에 referencedLegacyDocIds 저장 (Phase 2)
→ UI 에서 "참고한 사무실 기억" 섹션 명시 노출 + 변호사 제외 가능

로드맵

Phase범위상태예상 규모
0네이밍·라벨 전면 교체 + 본 정체성 문서 수립✅ 완료1215 파일, 300400 LOC
1a (서류 생성 참조)Step 2 우측 RelatedMemoriesPanel 카드 3~5개 · 가벼운 쿼리 (유형+서면+금액bucket) · 3종 텔레메트리 (shown/clicked/cancel)✅ S1 scaffold 완료 (2026-04-22)PR #402~#414
1b (스캔 업로드)종이 스캔 수동 업로드 경로 신설. sourceType: "scanned" 추가. 박스/대량 업로드 UX. OCR 큐 가시성. ops 페이지 수 관찰 대시보드계획 (S2)1~2주
2문서 생성 시 "참고한 사무실 기억" 명시 노출. documents.referencedLegacyDocIds 추가. 변호사 제외권. 아카이브 상세에 역방향 "이 기억을 참고한 서류 N건"계획 (S3)3~5일
3사건유형·연도·의뢰인 축 탐색. 무한스크롤 (200 하드캡 해제). 사무실 지식 지도 대시보드보류 — 데이터 쌓인 뒤 재검토

Phase 1a (2026-04-22 착수) 아키텍처 요약

서류 생성 InlineDocGenerate Step 2 진입 시 우측에 skeleton → 카드 렌더 → 실패/빈 결과 silent hide 패턴 (ADR 0012 R1 B 채택). 구현 계층:

  1. 쿼리 빌더buildRelatedMemoryQuery({ recoveryType, docType, principal, isCommercial }) 순수 함수. 사건번호·이름·정확 금액 미전파. 유형 + 서면 + 상사 + 금액 bucket (소액/중액/고액).
  2. Server ActionfindRelatedMemoriesForDocGenAction({ caseId, docType }). features.ai.ragSearch 킬 스위치 gate. weight 0 (Vertex AI Search 단독). 최대 5 카드, snippet 150자 상한, 메타 배치 조인.
  3. UIRelatedMemoriesPanel.tsx. 상태 머신 idle/loading/ready/hidden. 카드: 사건번호 · 유사도 % · 종결일 · 3줄 스니펫 · "이 기억 반영" CTA.
  4. 텔레메트리 — 3종 discriminated union. related_memories_shown/_clicked/step2_cancel_before_load. 집계 스크립트 scripts/aggregate-related-memories-stats.tstenantDoc.stats.relatedMemories.
  5. S3 말 C 캐시 재평가 조건 (3 모두 충족 시):
    • Hit rate (clickThroughRate) ≥ 40%
    • 월 평균 weight 소비 ≥ 20/tenant
    • 이탈률 (cancelRate) ≥ 25%

부속 결정 사항

  • OCR 비용 한도: Pro 무제한 유지. tenant 당 월 OCR 페이지 수 ops 관찰 대시보드만 신설 (한도 없음, 이상치 감지용). 초기 박스 업로드 후 점감 패턴 예상.
  • "Precedent" 네이밍 전면 제거: SimilarPrecedentsPanelRelatedMemoriesPanel, findSimilarPrecedentsActionfindRelatedMemoriesAction 등. Phase 0 에서 완료.
  • 라우트·컬렉션 개명 금지: /legacy, legacyDocuments 는 유지. 파일 상단 주석으로 의미 재정의 못박음.
  • 의뢰인 포털 연결 없음: 사무실 내부 자산. 의뢰인에게는 노출하지 않는다.

파일 상단 주석 템플릿

functions/src/legacy-pipeline.ts, app/(workspace)/legacy/_actions/*.ts, types/legacy-document.tslegacy 식별자를 쓰는 파일 상단에 삽입:

// "legacy" = 기술용어(낡은 것)가 아니라 영어 본의 "유산(heritage)".
// 이 사무실이 일해 온 방식의 결과물 — UI 에서는 "사무실 기억" 으로 노출.
// 정체성 SSoT: apps/docs/content/product/firm-memory.md

관련 문서