← 판결 시뮬레이터로 돌아가기

K-Law 개발자 문서 — 2026-09-15 ~ 09-18 작업 정리

이 기간 동안 klaw.hondi.net(Openhash-Gopang/klaw)과 hondi-proxy 백엔드(Openhash-Gopang/hondi worker.js)에 이뤄진 모든 변경사항을 정리합니다. PR 번호는 각 저장소 기준입니다.

목차
1. hondi 인증 · 과금 연동 2. 토큰 예산 · 안정성 3. 이력 기능 확장 (1차) 4. UI/UX 변경 이력 5. 인프라 · 기타 6. 이력 탭 즉시 닫힘 버그 7. 일치도 평가 기능 신설 8. 이력 시스템 전면 개편 (게시판화) 9. 공개 게시판 신설 + 레거시 제거 10. 표시 다듬기 (제목·일치도·항목별 평가) 11. 사고실험으로 발견한 문제들 12. 알려진 제약 · 남은 과제

1. hondi 인증 · 과금 연동 FEATURE

klaw #17, #20, #21 · hondi #274

배경 원칙(주피터 지시): "혼디 가입자는 혼디 시스템의 모든 모듈에 자유로이 접근할 수 있어야 한다 — hondi.net에 전화번호 인증하면 다른 모든 K-서비스에 자유로이 접근하고, hondi.net과 동일한 방식으로 사용량에 따른 GDC 차감이 이뤄져야 한다."

2. 토큰 예산 · 안정성 FIX

klaw #18, #22, #25, #31, #32

핵심 발견: klaw-pro 티어는 DeepSeek의 "thinking"(추론) 모드가 항상 켜져 있고 (hondi worker.js payload.thinking), 추론 토큰도 max_tokens 예산에서 함께 소모된다. 예산이 부족하면 모델이 추론만 하다 실제 답변은 한 글자도 못 쓰고 끝나는 사례가 반복 발견됨.

토큰 예산 변경 이력

항목최초최종
사건 분석 (단순)14002400
사건 분석 (복잡, pro)240010000
STEP 030009000
STEP A300014000
STEP B (최종 판결문)300016000
STEP C30009000

STEP A·B가 특히 높은 이유: 각 STEP은 이전 STEP 전체 출력을 컨텍스트로 이어받아 갈수록 입력이 커지고, 요구되는 실제 출력 분량도 STEP C(확신도 숫자+짧은 요약)보다 훨씬 길다.

자동 복구 로직

3. 이력 기능 확장 (1차) FEATURE SECURITY

klaw #21, #34, #35 · hondi #274, #278, #280

3-1. 본인 전용 + 프라이버시 (#21)

기존 이력 기능은 currentUser?.ipv6(2026-07-23 제거된 죽은 코드가 채워야 하는 값)에 의존해 저장·조회가 항상 조용히 실패하고 있었다. 게다가 백엔드가 클라이언트가 보내는 user_id를 그대로 신뢰해, 값만 바꾸면 남의 이력을 보거나 남의 이름으로 기록을 남길 수 있는 취약점 발견.

3-2. 전문 저장 · 열람 (#34, #35)

"일치도만 표시"에서 한 발 나아가, STEP 0~C 판결문 전문을 저장하고 이력 목록 클릭 시 모달로 다시 열람하는 기능 추가.

4. UI/UX 변경 이력 STYLE

klaw #14, #16, #19, #23, #24, #26, #27, #29, #33

디자인 방향이 세션 내내 여러 번 전환되었다 — 각 결정은 그 시점 지시를 반영한 것으로, 이후 지시가 이전 방향을 대체한다.

단계내용
자료 다운로드 카드Material Design 카드(#19) → 법원 문서풍 무장식 고지문(미채택) → 헤더 우측 여백으로 이동, 카드/문구 삭제(#29, 최종)
안내 박스 배경색제각각(주황/초록/파랑) → 청색으로 통일(#14) → 2곳(면책 고지·표 강조행)만 남기고 플레인 텍스트化(#16, 최종)
AI 모델 카드빈 선택 표시등·제각각 아이콘 모양·3줄 텍스트 → 체크 배지·통일 아바타·2줄 압축, API Key 버튼 간소화(#33, 최종 — 사전에 목업 승인 절차 거침)
진행 표시dot 4개 → 막대 바(#23) → 실제 DeepSeek 스트리밍 원문 미리보기 + 경과시간 기반 바(#24, 최종)
입력 제출Enter 키 제출은 다문단 사건 개요 작성과 충돌 — Ctrl+Enter로 제출, 일반 Enter는 줄바꿈 유지(#23)

접이식 섹션 신설

5. 인프라 · 기타 CHORE

klaw #15

6. 이력 탭 즉시 닫힘 버그 FIX

klaw #37

"이력" 탭을 클릭해도 반응이 없다는 제보. 재현해보니 실제로는 한 클릭 안에서 두 가지가 동시에 일어나고 있었다: ① 탭의 onclick="toggleHistoryPanel()"이 실행되어 패널이 열리고, ② 같은 클릭 이벤트가 document까지 계속 버블링되며 "패널 바깥 클릭 시 닫기" 리스너가 발동해 곧바로 닫혀버렸다. 같은 패널을 여는 우측 상단 아바타 버튼(#user-info-bar)은 그 리스너의 예외 목록에 들어있어 정상 작동했지만, 나중에 추가된 "이력" 탭 버튼은 예외 목록에서 빠져 있던 게 원인.

탭 버튼에 id="history-tab-btn"을 부여하고 리스너 조건에 추가해 해결. Playwright로 "아바타는 정상, 탭은 열렸다 즉시 닫힘" 상태를 직접 재현해 원인을 확정한 뒤 수정했다.

7. 일치도 평가 기능 신설 FEATURE

klaw #38

"사건의 개요" 입력란 아래에 "일치도 평가" 패널을 신설. 사용자가 실제 대법원 판결문 전문을 붙여넣으면, 방금 생성된 K-Law 가상 판결문과 비교하여 "일치도 평가 기준" 방법론에 따른 평가 보고서를 생성한다.

8. 이력 시스템 전면 개편 — 팝업 → 게시판 페이지 FEATURE

klaw #39, #41, #42 · hondi #278, #280, #301, board-detail

"팝업이 아니라 게시판 형식의 이력 페이지를 보여달라"는 지시로, 작은 플라이아웃 패널을 완전히 걷어내고 my-history.html 신규 페이지로 교체.

8-1. 판결문 전문 저장 · 열람

8-2. 항목별 일치도 점수

일치도 평가 프롬프트가 방법론 원문에서 자동 추출한 실제 항목명(결론 방향 일치도/핵심 법리 일치도/세부 논증 일치도)으로 [항목: X] [점수: Y%] 태그를 출력하도록 지정. 항목명을 코드에 하드코딩하지 않고 정규식으로 파싱해 match_items(JSON)에 저장 — 방법론 문서가 버전업되어 항목 구성이 바뀌어도 코드 수정이 필요 없다.

실제 문서로 파싱 로직 검증 — 주피터님이 실제 "일치도_평가_기준_v1.6.docx" 파일을 첨부해주셔서, mammoth.js가 그 표(항목/배점/설명 3열)를 어떻게 텍스트로 풀어내는지 직접 확인 후 파싱 정규식을 작성 — 추측이 아니라 실측 기반으로 구현.

8-3. 사건명 자동 생성

분석 프롬프트에 【사건명】 태그를 추가해 "건축인허가 처분 취소 청구"처럼 실제 법원 사건명 형태의 짧은 제목을 K-Law가 직접 생성하도록 함. 날짜는 이미 별도 칼럼에 있으므로 제목에는 절대 포함하지 않음. 이 필드 도입 이전에 생성된 레코드는 소급 적용되지 않아, case_type+case_summary 기반 대체 제목으로 폴백.

9. 공개 게시판 신설 + 레거시 제거 FEATURE SECURITY

klaw #40 · hondi board-detail

public-board.html 신설 — is_public=true인 이력만 인증 없이 볼 수 있는 게시판. 작성자는 이용자-xxxx 형태로 익명화(guid 뒷자리 일부만 노출).

옛 자동 게시 시스템이 여전히 살아있었음 — "기본 비공개, 선택적 공개"를 설계·구현하는 도중, 사실은 _sendCaseToKlaw()가 모든 시뮬레이션 결과를 예외 없이 옛 klaw_cases 컬렉션(공개 옵션 자체가 없는 시스템)에 계속 자동 게시하고 있었다는 것을 뒤늦게 발견. 새 is_public 플래그를 다 만들어놓고도 이 호출 하나를 제거하지 않으면 전체 기능이 무의미해지는 상황이었음 — 발견 즉시 자동 호출 제거, 판결문 카드의 게시판 링크도 새 public-board.html로 교체(옛 board.html은 이제 새 글이 안 쌓이는 페이지라 그대로 두면 사용자를 막다른 곳으로 보내는 셈이었음).

10. 표시 다듬기 STYLE

klaw #41, #42
항목이전이후
생성 시각전체 로케일 문자열(폭 넓음)2026.09.16.15:36 압축 표기
제목없거나 "(제목 없음)"만 표시사건명 자동 생성 + 옛 레코드 대체 제목(날짜 미포함)
일치도 칼럼"종합 일치도", 값에 "(복잡도 N/10 기준)" 포함"일치도 예상"으로 개명, 순수 %만(옛 값도 화면에서 걸러냄)
항목별 평가미평가 항목에 "미평가" 텍스트, 2줄로 줄바꿈흐린 색상의 항목명만, flex-wrap:nowrap으로 한 줄 강제
공개 칼럼다른 칼럼과 동일 폭토글 크기에 맞춘 최소 폭

11. 사고실험으로 발견한 문제들

코드를 실제로 추적하며 발견 → 즉시 수정한 항목들
구 SSO 죽은 코드 — _onGopangAuth/currentUser가 2026-07-23 제거된 인증 스크립트를 전제로 작성되어 있어, 이력 저장·조회·헤더 배지가 전부 "성공한 것처럼 보이지만 실제로는 항상 실패"하는 상태였다. 에러가 안 나서 오래 발견되지 않았을 가능성.
user_id 신뢰 취약점 — /klaw/sessions/*가 클라이언트가 보내는 user_id를 검증 없이 사용해, 값만 바꾸면 타인의 사건 요약·판결 내용을 조회하거나 타인 명의로 기록을 남길 수 있었다.
thinking 모드 토큰 소모 — max_tokens를 여러 차례 올려도 계속 잘리는 근본 원인이 "추론 토큰도 같은 예산을 먹는다"는 것이었음을 worker.js 코드 확인 후에야 발견. 이전 시도들은 증상(잘림)만 완화했을 뿐 원인을 못 잡았었다.
STEP별 예산 불균형 — 모든 STEP에 동일 예산(9000)을 줬을 때 STEP 0·C는 성공, STEP A·B만 실패하는 실사용 로그를 근거로 STEP별 차등 예산 필요성 확인.
이력 전문 저장 시 4가지 허점 — ① 저장 상한(60,000자)이 최악의 경우(STEP 예산 총합 48,000토큰) 대비 부족 + 무음 절단 → 200,000자 상향 + 명시적 절단 표시. ② 상세 모달에 사건 맥락(종류/개요/주문/요약)이 안 보임 → 표시 추가. ③ 토큰 만료 시 재로그인 미지원 → _klawCall과 동일한 자동복구 적용. ④ KAuth 미정의 방어 누락 → 추가.
patch 배포 사고 2건 — (a) 색상 통일 patch가 그 사이 merge된 다른 patch와 컨텍스트가 어긋나 git am이 반복 실패(원인: CRLF 정규화 이전 상태 기준으로 만들어졌던 patch). (b) 보완 전 원본 patch(#34)가 먼저 merge되어, 4가지 허점 보완판을 현재 head 기준으로 다시 만들어 별도 PR(#35)로 반영.
옛 klaw_cases 자동 게시 잔존 — "공개 옵션 도입"을 계획서에 적어놓고도 실제로는 _sendCaseToKlaw() 제거를 빠뜨려, 새 기능을 다 만든 뒤에도 모든 결과가 여전히 무조건 공개되고 있었다(9번 섹션 참조). 계획을 문서로 남겨도 실행을 별도로 검증해야 한다는 교훈.
"배포했는데 안 바뀐다" — 브라우저/CDN 캐시 — my-history.html 개선 사항을 merge했는데도 화면이 그대로라는 문의. 저장소 코드는 실제로 갱신되어 있었고(raw 파일로 직접 대조), 원인은 GitHub Pages CDN 전파 지연 또는 브라우저 캐시였음 — 강력 새로고침(Ctrl+Shift+R)이나 시크릿 창으로 확인하는 절차를 안내.

12. 알려진 제약 · 남은 과제